# إصلاح صفحة المنتجات ## المشاكل التي تم حلها: ### 1. عداد السلة لا يتحدث ❌ **المشكلة:** عند إضافة منتج للسلة، الرقم فوق أيقونة السلة لا يتحدث **الحل:** - ✅ إنشاء API endpoint جديد: `backend/api/cart/count.php` - ✅ إضافة دالة `updateCartBadge()` لتحديث العداد تلقائياً - ✅ استدعاء الدالة بعد كل إضافة ناجحة للسلة ### 2. زر المفضلة غير موجود ❌ **المشكلة:** لا يوجد زر لإضافة المنتجات للمفضلة **الحل:** - ✅ إنشاء جدول `wishlist` في قاعدة البيانات - ✅ إنشاء API endpoints: - `backend/api/wishlist/add.php` - `backend/api/wishlist/remove.php` - ✅ إضافة زر المفضلة بجانب زر السلة - ✅ إضافة دالة `toggleWishlist()` للتبديل بين الإضافة والإزالة ## الملفات المضافة: ### 1. API Files ``` backend/api/cart/count.php - عد عناصر السلة backend/api/wishlist/add.php - إضافة للمفضلة backend/api/wishlist/remove.php - إزالة من المفضلة ``` ### 2. Setup Files ``` backend/setup/create_wishlist_table.php - إنشاء جدول المفضلة ``` ### 3. Updated Files ``` backend/public/products.php - تحديث الصفحة بالميزات الجديدة ``` ## الميزات الجديدة: ### عداد السلة الديناميكي ```javascript function updateCartBadge() { fetch('../api/cart/count.php') .then(response => response.json()) .then(data => { // تحديث العداد أو إنشاؤه إذا لم يكن موجود if (data.count > 0) { badge.textContent = data.count; } }); } ``` ### نظام المفضلة ```javascript function toggleWishlist(productId, productName, button) { const isActive = button.classList.contains('active'); const action = isActive ? 'remove' : 'add'; fetch('../api/wishlist/' + action + '.php', { method: 'POST', body: 'product_id=' + productId }) .then(response => response.json()) .then(data => { if (data.success) { button.classList.toggle('active'); // تغيير شكل الأيقونة } }); } ``` ## التصميم: ### زر المفضلة ```css .action-btn { width: 36px; height: 36px; border-radius: 50%; background: var(--bg-secondary); transition: all 0.2s; } .action-btn:hover { background: var(--primary); color: white; transform: scale(1.1); } .action-btn.active { background: var(--primary); color: white; } ``` ### تنظيم الأزرار ```html
``` ## جدول قاعدة البيانات: ### wishlist ```sql CREATE TABLE wishlist ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, product_id INT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY unique_wishlist (user_id, product_id), FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE ) ``` ## الاستخدام: ### 1. إضافة للسلة - اضغط على زر السلة 🛒 - سيظهر toast بالتأكيد - العداد فوق أيقونة السلة يتحدث تلقائياً ### 2. إضافة للمفضلة - اضغط على زر القلب ❤️ - الزر يتحول للون الوردي - اضغط مرة أخرى للإزالة ### 3. متطلبات - يجب تسجيل الدخول لاستخدام السلة والمفضلة - إذا لم يكن المستخدم مسجل، يتم توجيهه لصفحة تسجيل الدخول ## الأمان: ✅ التحقق من تسجيل الدخول في كل API ✅ التحقق من وجود المنتج قبل الإضافة ✅ منع التكرار في المفضلة (UNIQUE KEY) ✅ استخدام Prepared Statements لمنع SQL Injection ✅ التحقق من صحة البيانات المدخلة ## الاختبار: 1. افتح صفحة المنتجات 2. جرب إضافة منتج للسلة - العداد يجب أن يتحدث 3. جرب إضافة منتج للمفضلة - الزر يجب أن يتحول للون الوردي 4. جرب إزالة من المفضلة - الزر يجب أن يرجع للون الرمادي 5. افتح السلة - المنتج يجب أن يكون موجود ## ملاحظات: - العداد يعمل مع المستخدمين المسجلين والضيوف - المفضلة تعمل فقط مع المستخدمين المسجلين - Toast notifications تظهر لكل عملية - الأزرار responsive وتعمل على الموبايل