N مستندات Novira مشاهده دمو صفحه اصلی قالب

معماری JavaScript

بازگشت به فهرست

نمای کلی

flowchart TB
  html[HTML x-data]
  alpine[alpine.js defer]
  core[novira.js]
  shared[noviraShared]
  pageMod[novira-cart.js / novira-fashion.js / ...]
  mainJs[main.js]
  swiper[swiper-bundle.min.js]

  html --> alpine
  core --> shared
  pageMod --> shared
  alpine --> pageMod
  mainJs --> swiper
  mainJs --> alpine

فایل هسته: novira.js

توابع سراسری

تابعنقش
noviraShared()state مشترک همه صفحات (منو، سبد، فوتر، ...)
novira()داده و متدهای صفحه اصلی
productImgFor()ساخت مسیر تصویر محصول
formatPrice()فرمت قیمت فارسی
dsIsLoggedIn()بررسی ورود mock
comingSoonHref()لینک صفحات به‌زودی

noviraShared() چه چیزی دارد؟

  • mobileMenuOpen, cartOpen, megaOpen, supportOpen
  • cartItems, cartCount, cartTotal
  • footerColumns, supportFaqs
  • متدهای toggleCart(), addToCart(), init() و ...

ماژول‌های صفحه

هر ماژول یک تابع Alpine برمی‌گرداند که noviraShared() را spread می‌کند:

// novira-fashion.js
function noviraFashion() {
  return {
    ...noviraShared(),
    fashionTrending: [...],
    initFashion() { ... }
  };
}

فهرست ماژول‌ها

فایلتابعx-init
novira.jsnovira()init()
novira-fresh.jsnoviraFresh()initFresh()
novira-fashion.jsnoviraFashion()initFashion()
novira-cart.jsnoviraCart()init()
novira-product.jsnoviraProduct()init()
novira-profile.jsnoviraProfile(nav)init()
novira-shipping.jsnoviraShipping()init()
novira-payment.jsnoviraPayment()init()
novira-blog.jsnoviraBlog()initBlog()
novira-blog-post.jsnoviraBlogPost()initPost()
novira-faq.jsnoviraFaq()initFaq()
novira-auth.jsnoviraAuth()init()
novira-coming-soon.jsnoviraComingSoon()init()
novira-demo.jsnoviraDemo()

ترتیب لود اسکریپت (ضروری)













اگر novira.js بعد از ماژول صفحه لود شود → خطای noviraShared is not defined.

اگر alpine.js قبل از novira.js لود شود → خطای novira is not defined.

main.js

فقط مسئول Swiper است:

document.addEventListener('DOMContentLoaded', function () {
  document.querySelectorAll('[data-swiper]').forEach((el) => {
    const options = el.dataset.swiper ? JSON.parse(el.dataset.swiper) : {};
    el.swiperInstance = new Swiper(el, options);
  });
});

اتصال به API واقعی

مراحل پیشنهادی:

  1. توابع fetch در novira.js یا فایل جدید api.js اضافه کنید
  2. آرایه‌های mock را با پاسخ API جایگزین کنید
  3. init() هر صفحه را async کنید و داده را await کنید
  4. dsIsLoggedIn() را با token/cookie واقعی جایگزین کنید

افزودن صفحه جدید

  1. mypage.html بسازید — x-data="noviraMyPage()"
  2. assets/js/novira-mypage.jsfunction noviraMyPage() { return { ...noviraShared(), ... }; }
  3. CSS اختیاری: novira-mypage.css
  4. اسکریپت‌ها را طبق ترتیب بالا لود کنید

گام بعدی