پروژه آپدیت فیلترهای موجود صفحات آرشیو ووکامرس (المنتور + آژاکس) شامل چه جزئیاتی است:

پیشنیاز‌ها

  •  تسلط به آژاکس
  • تسلط به PHP
  • آشنایی کامل با وردپرس و ووکامرس ( کلاس ها و توابع مهم )
  • آشنایی کامل با المنتور

مشخصات سایت

یک فروشگاه اینترنتی داریم بر اساس وردپرس و ووکامرس که تمامی صفحات آن از جمله صفحات آرشیو ووکامرس، با المنتور طراحی شده‌اند.

برای قرار دادن فیلتر محصولات در سایدبار از یک سری ویجت‌های اختصاصی المنتور استفاده شده است که توسط خودمان توسعه یافته‌اند. این فیلتر‌ها در واقع ترم‌های ویژگی‌های محصولات هستند (ترم های دسته‌بندی، تگ‌ها، رنگ، سایز و...) که بر اساس نام ویژگی گروه‌بندی شده‌اند.

هر ویجت نمایش دهنده ترم‌های یکی از ویژگی‌های محصولات است. 3 نوع ویجت فیلتر داریم: چک باکس، رادیو و سلکت .

اعمال فیلتر‌ها توسط یوزر از طریق (برای مثال) چک‌باکس‌این ترم‌ها و با استفاده از آژاکس صورت می‌گیرد. بصورتی که کوئری اصلی با ترم‌های اعمالی یوزر فیلتر می‌شود و نتایج کوئری فیلتر شده (محصولات) با استفاده از آژاکس روی صفحه آپدیت می‌شود.

خلاصه پروژه

ما می‌خواهیم در هر صفحه آرشیو فقط ترم‌هایی را برای فیلتر کردن نشان بدهیم که در داخل محصولات فیلتر شده آن صفحه استفاده شده‌اند. و به عبارت دیگر تعداد محصولات دارای این ترم در کوئری جاری، صفر نباشد. و اگر هیچ یک از ترم‌های یک ویژگی، در محصولات کوئری جاری استفاده نشده باشد، کل گروه ترم‌های این ویژگی حذف شود.

مثال: در صفحه‌ای هستیم که ترم "آبی" جز ترم‌های ویژگی رنگ هیچکدام از محصولات آن صفحه نیست، ترم آبی از لیست فیلتر‌های رنگ باید حذف شود و اگر کلا هیچ محصولی ویژگی رنگ را نداشت، کل گروه فیلتر رنگ حذف شود.

حتما باید آخرین تغییرات کوئری اصلی در نظر گرفته شود. مثلا وقتی با اعمال فیلتر قرمز، هیچکدام از محصولات ترم XL (سایز) را نداشته باشند، ترم XL از لیست فیلتر سایز‌ حذف شود. منطقا حالت برعکس همه این موارد هم صادق است و با حذف فیلتر‌های فعال باید ترم های حذف شده، دوباره فعال شوند.

ضمنا فقط تعدادی از ویژگی‌های محصولات بصورت فیلتر تعریف شده‌اند.

موارد مهمی که باید در نظر گرفته شود

  • صفحه‌بندی محصولات با آژاکس است و در هر صفحه، تعداد مشخصی از محصولات نمایش داده میشه و چک کردن اینکه یک ترم در داخل محصولات کوئری جاری هست یا نه، باید شامل همه محصولات پیدا شده توسط کوئری باشد و نه فقط محصولات فعلی خروجی کوئری که روی صفحه قرار گرفته‌اند.
  • کدهای نوشته شده مرتب و کامنت گذاری شده باشند.
  • کدهای نوشته شده انعطاف پذیر و قابل توسعه باشند.
  • در هر قسمت که امکانپذیر بود چه بک-اند چه فرانت-اند، بصورت آبجکت ارینتد کدنویسی شود. (کد اسپاگتی نشود.) 
  • روش پیشنهادی بهینه باشد و ریسورس زیادی استفاده نکند (مخصوصا در مورد کوئری های دیتابیس )
  • ویجت‌های استفاده شده بر پایه پلاگین JetSmartFilters توسعه داده شده‌اند و پیشنیاز خروجی پروژه، هماهنگی کامل با این پلاگین است. (تنها فیلتر‌هایی با Data Source تکسونومی  استفاده شده و مورد نیاز می‌باشد.)

راهکار پیشنهادی

  1. محتوای ویجت‌های فیلتر بصورت پیشفرض رندر نشوند.
  2. یک کوئری دوم دقیقا منطبق با کوئری اصلی نوشته شود، با این تفاوت که فقط ID کل محصولات پیدا شده را برگرداند (نه فقط محصولات صفحه جاری) و با تغییر کوئری اصلی، آرگیومنت‌های این کوئری نیز تغییر پیدا بکند.
  3. ترم‎های همه فیلتر‌های تعریف شده در داخل ویجت‌ها، برای محصولات پیدا شده توسط کوئری دوم، بررسی شوند.
  4. بعد از لود اولیه صفحه و همچنین در زمان اعمال فیلتر، ترم‌های موجود، بصورت JSON بر روی صفحه فرستاده شود و محتوای ویجت‌ها آپدیت شود.

این صرفا یک روش پیشنهادی می‌باشد و درصورتی که راه‌ دیگری به ذهنتان می‌رسد، با مراحل و نحوه اجرایی کردن، آن را توضیح دهید.

درصورتی که از روش مشابه این راه پیشنهادی، می‌خواهید استفاده بکنید، نحوه و الگوریتم اجرای مراحل 1 و 2 باید در حد امکان بهینه باشد و جزئیات اجرای این مراحل را در پیشنهاد خود توضیح دهید.


نکات دیگر

  • قابلیت توسعه کد برای کش کردن نتایج به منظور افزایش سرعت می‌تواند مهم باشد. اگر پیشنهادی در این زمینه دارید، اعلام کنید. از امکانات کش لایت اسپید هم می‌توانید استفاده کنید.
  • از هر تکنیک دیگری برای افزایش سرعت و بهینه شدن فرایند استقبال می‌شود.
  • در این فاز نیازی به آپدیت کردن ویجت اسلایدر فیلتر قیمت وجود ندارد.
  • داشتن سابقه توسعه ویجت‌های المنتور، مزیت محسوب می‌شود.

تصریح شده 21 اسفند 1397 10:39

ضمنا هزینه پروژه بستگی مستقیم به پیشنهاد شما و تکنیک‌ها و روشی که مد نظر دارید و زمان اجرا داره


امکانات ویژه

فوری

بودجه پروژه

مهارت های مورد نیاز