ایجاد صفحه تسویه حساب برای فروشگاه اینترنتی
🎯 اهداف این بخش
- طراحی رابط کاربری صفحه پرداخت
- پیاده سازی اعتبارسنجی فرم پرداخت
- محاسبه جمع کل سبد خرید
- ذخیره اطلاعات سفارش در localStorage
- نمایش پیام موفقیت آمیز بودن پرداخت
📌 ساختار HTML صفحه پرداخت
ابتدا ساختار اصلی صفحه تسویه حساب را ایجاد میکنیم:
html
<!-- بخش اصلی صفحه تسویه حساب --><div class="checkout-container"> <h2>تسویه حساب</h2> <div class="row"> <div class="col-75"> <form id="checkoutForm"> <!-- فیلدهای فرم پرداخت --> </form> </div> <div class="col-25"> <div class="cart-summary"> <h3>خلاصه سبد خرید</h3> <div id="cartItems"></div> <hr> <div class="total"> <span>جمع کل</span> <span id="cartTotal">0 تومان</span> </div> </div> </div> </div></div>
فیلدهای فرم پرداخت:
- اطلاعات شخصی: نام، نام خانوادگی، ایمیل، تلفن
- آدرس ارسال: آدرس، شهر، کدپستی
- روش پرداخت: کارت اعتباری، پرداخت آنلاین، پرداخت در محل
📌 اعتبارسنجی فرم با جاوااسکریپت
javascript
// اعتبارسنجی فرم پرداختdocument.getElementById('checkoutForm').addEventListener('submit', function(e) { const name = document.getElementById('name').value; const email = document.getElementById('email').value; const address = document.getElementById('address').value; const cardNumber = document.getElementById('cardNumber').value; if (!name || !email || !address) { alert('لطفا تمام فیلدهای ضروری را پر کنید'); e.preventDefault(); return; } // اعتبارسنجی ایمیل const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { alert('لطفا یک ایمیل معتبر وارد کنید'); e.preventDefault(); return; } // اعتبارسنجی شماره کارت (اگر پرداخت با کارت انتخاب شده) if (document.getElementById('paymentMethod').value === 'creditCard' && !cardNumber) { alert('لطفا شماره کارت خود را وارد کنید'); e.preventDefault(); }});
نکات مهم اعتبارسنجی:
- فیلدهای ضروری: بررسی پر بودن فیلدهای اجباری
- فرمت ایمیل: بررسی صحت فرمت ایمیل وارد شده
- شماره کارت: اعتبارسنجی در صورت انتخاب پرداخت با کارت
- جلوگیری از ارسال: استفاده از preventDefault() در صورت وجود خطا
📌 نمایش سبد خرید و محاسبه جمع کل
محصولات موجود در سبد خرید را از localStorage خوانده و نمایش میدهیم:
javascript
// نمایش محصولات سبد خرید و محاسبه جمع کلfunction displayCartItems() { const cartItems = JSON.parse(localStorage.getItem('cart')) || []; const cartContainer = document.getElementById('cartItems'); const totalElement = document.getElementById('cartTotal'); let total = 0; cartContainer.innerHTML = ''; if (cartItems.length === 0) { cartContainer.innerHTML = '<p>سبد خرید شما خالی است</p>'; totalElement.textContent = '0 تومان'; return; } cartItems.forEach(item => { const itemElement = document.createElement('div'); itemElement.className = 'cart-item'; itemElement.innerHTML = ` <span class="item-name">${item.name}</span> <span class="item-quantity">${item.quantity} عدد</span> <span class="item-price">${item.price.toLocaleString()} تومان</span> `; cartContainer.appendChild(itemElement); total += item.price * item.quantity; }); totalElement.textContent = total.toLocaleString() + ' تومان';}// فراخوانی تابع هنگام لود صفحهdocument.addEventListener('DOMContentLoaded', displayCartItems);
اجزای عملکرد نمایش سبد خرید:
- خواندن از localStorage: دریافت لیست محصولات از حافظه مرورگر
- ایجاد المانهای داینامیک: ساخت HTML برای هر محصول با JavaScript
- محاسبه جمع کل: جمع قیمت تمام محصولات با در نظر گرفتن تعداد
- قالببندی قیمت: استفاده از toLocaleString() برای نمایش زیبای اعداد
📌 پردازش پرداخت و ذخیره سفارش
پس از تایید فرم، اطلاعات سفارش را پردازش و ذخیره میکنیم:
javascript
// پردازش سفارش و نمایش پیام موفقیتfunction processOrder(e) { e.preventDefault(); const cartItems = JSON.parse(localStorage.getItem('cart')) || []; const formData = new FormData(document.getElementById('checkoutForm')); const order = { id: Date.now(), customer: { name: formData.get('name'), email: formData.get('email'), address: formData.get('address') }, items: cartItems, total: cartItems.reduce((sum, item) => sum + item.price * item.quantity, 0), date: new Date().toISOString() }; // ذخیره سفارش در localStorage const orders = JSON.parse(localStorage.getItem('orders')) || []; orders.push(order); localStorage.setItem('orders', JSON.stringify(orders)); // خالی کردن سبد خرید localStorage.removeItem('cart'); // نمایش پیام موفقیت document.getElementById('checkoutForm').innerHTML = ` <div class="success-message"> <h3>سفارش شما با موفقیت ثبت شد!</h3> <p>کد پیگیری سفارش: ${order.id}</p> <p>جزئیات سفارش به ایمیل ${order.customer.email} ارسال شد.</p> <a href="/" class="btn">بازگشت به صفحه اصلی</a> </div> `;}// اتصال تابع پردازش به رویداد submit فرمdocument.getElementById('checkoutForm').addEventListener('submit', processOrder);
مراحل پردازش سفارش:
- جمعآوری اطلاعات: خواندن اطلاعات فرم و محصولات سبد خرید
- ساخت شیء سفارش: ایجاد یک شیء شامل تمام اطلاعات مربوط به سفارش
- ذخیره سفارش: اضافه کردن سفارش جدید به لیست سفارشات در localStorage
- پاک کردن سبد خرید: حذف محصولات از سبد خرید پس از ثبت سفارش
- نمایش پیام موفقیت: جایگزینی فرم با پیام تأیید و کد پیگیری
📌 استایلدهی صفحه تسویه حساب
برای زیباسازی صفحه از CSS زیر استفاده میکنیم:
css
/* استایل کلی صفحه تسویه حساب */.checkout-container { max-width: 1200px; margin: 2rem auto; padding: 1rem; background-color: #fff; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1);}/* استایل سطرها و ستونها */.row { display: flex; flex-wrap: wrap; margin: 0 -16px;}.col-75 { flex: 75%; padding: 0 16px;}.col-25 { flex: 25%; padding: 0 16px;}/* استایل خلاصه سبد خرید */.cart-summary { background-color: #f9f9f9; padding: 20px; border-radius: 8px;}.cart-item { display: flex; justify-content: space-between; margin-bottom: 10px;}.total { display: flex; justify-content: space-between; font-weight: bold; font-size: 1.2rem;}/* استایل پیام موفقیت */.success-message { text-align: center; padding: 2rem; background-color: #e8f5e9; border-radius: 8px;}
ویژگیهای طراحی صفحه:
- طرح واکنشگرا: استفاده از Flexbox برای چیدمان مناسب در دستگاههای مختلف
- تفکیک بخشها: جداسازی فرم پرداخت و خلاصه سبد خرید
- رنگبندی مناسب: استفاده از رنگهای ملایم و حرفهای
- سایه و گردی گوشهها: ایجاد ظاهری مدرن و کاربرپسند
📌 تمرین عملی
صفحه تسویه حساب را با ویژگیهای زیر تکمیل کنید:
javascript
// 1. اضافه کردن کد تخفیفfunction applyDiscount() { // کد خود را اینجا بنویسید}// 2. محاسبه هزینه ارسال بر اساس شهرfunction calculateShipping() { // کد خود را اینجا بنویسید}// 3. ذخیره اطلاعات کاربر برای خریدهای بعدیfunction saveCustomerInfo() { // کد خود را اینجا بنویسید}
راهنمای تمرین:
- یک فیلد برای کد تخفیف اضافه کنید و تابعی برای اعمال تخفیف بنویسید
- هزینه ارسال را بر اساس شهر انتخاب شده محاسبه و به جمع کل اضافه کنید
- اطلاعات کاربر را در localStorage ذخیره کنید تا در خریدهای بعدی نیازی به وارد کردن مجدد نباشد
📌 قدم بعدی
در بخش بعدی با پیاده سازی صفحه مدیریت سفارشات آشنا خواهیم شد!