P Pitchbar مستندات

مدیریت فضای کاری

تم‌های بازاریابی قابل‌نصب

تم‌های قابل تعویض بازاریابی

کل سایت بازاریابی — خانه، قیمت‌گذاری، نحوه کار، یکپارچه‌سازی‌ها، حریم خصوصی، شرایط، تاریخچه تغییرات — یک تم قابل تعویض است. اپراتورها با قرار دادن یک پوشه، تم جدیدی اضافه می‌کنند؛ تغییر آن با یک کلیک در تنظیمات ← سیستم ← بازاریابی انجام می‌شود.

نحوه عملکرد

هر کنترل‌کننده بازاریابی، کامپوننت Inertia خود را از طریق App\Support\MarketingTheme::component($page) به‌جای سخت‌کد کردن یک رشته، جستجو می‌کند. حل‌کننده app_settings.marketing_theme را می‌خواند، زمانی که ستون خالی باشد یا به نامکی اشاره کند که نصب نشده است، به harvest (تم داخلی) بازمی‌گردد و یکی از موارد زیر را برمی‌گرداند:

  • مسیر کامپوننت قدیمی برای harvest (welcome، marketing/pricing، marketing/how-it-works و غیره) — بنابراین نصب‌های موجود به نمایش چیدمان اصلی ادامه می‌دهند.
  • marketing-themes/{slug}/{page} برای هر تم دیگر — Inertia را به یک پوشه مستقل به ازای هر تم اشاره می‌دهد.

افزودن تم جدید

  1. یک پوشه در resources/js/pages/marketing-themes/ به نام نامک تم (kebab-case، بدون فاصله) ایجاد کنید. به عنوان مثال، resources/js/pages/marketing-themes/meadow/.

  2. یک مانیفست theme.json در ریشه آن پوشه اضافه کنید. حداقل شکل:

    {
        "name": "Meadow",
        "description": "چیدمان آرام و تحریریه با رنگ‌های سبز."
    }

    تم‌های بدون theme.json نادیده گرفته می‌شوند — مانیفست چیزی است که یک پوشه را به تم تبدیل می‌کند.

    اگر یک تم فقط زیرمجموعه‌ای از هفت صفحه را ارائه می‌دهد، یک لیست مجاز pages اضافه کنید تا حل‌کننده بداند تم کدام کلیدها را ارائه می‌دهد — هر صفحه دیگر به‌طور بی‌صدا به کامپوننت قدیمی Harvest بازمی‌گردد:

    {
        "name": "Aurora",
        "description": "بروتالیست تحریریه — فقط صفحه اصلی.",
        "pages": ["home"]
    }

    حذف pages به این معنی است که تم فرض می‌شود همه هفت صفحه را ارائه می‌دهد؛ زمانی که یک بسته کامل ارسال می‌کنید مفید است.

  3. هفت کامپوننت صفحه را در داخل پوشه قرار دهید که هر کدام همان props را دریافت کنند که کنترل‌کننده منطبق امروز ارسال می‌کند. نام‌ها باید دقیقاً مطابقت داشته باشند:

    • home.tsx
    • pricing.tsx
    • how-it-works.tsx
    • integrations.tsx
    • privacy.tsx
    • terms.tsx
    • changelog.tsx

    از resources/js/layouts/marketing-shell.tsx به‌عنوان پوسته اشتراکی استفاده کنید، یا پوسته مخصوص تم خود را در داخل پوشه ارسال کنید.

  4. npm run build را اجرا کنید (یا npm run dev را در حین تکرار در حال اجرا نگه دارید) تا Vite فایل‌های جدید را دریافت کند.

  5. تنظیمات ← سیستم ← بازاریابی را باز کنید، تم جدید را از منوی کشویی انتخاب کنید و ذخیره کنید. از /، /pricing و غیره بازدید کنید — آنها اکنون از پوشه شما نمایش داده می‌شوند.

propsهایی که کامپوننت‌های تم شما دریافت می‌کنند

کنترل‌کننده‌ها بدون توجه به تم، همان props را ارسال می‌کنند. کامپوننت‌های صفحه خود را براساس این شکل بسازید و تغییر تم، یک تغییر کاملاً بصری خواهد بود:

صفحهprops قابل توجه
homecanRegister، demoAgentId، content، seo
pricingplans، lifetime_plans، currency، currencies، matrix، faqs، shell، brand، seo
how-it-workssteps، latency، shell، brand، seo
integrationsnative، data_sources، roadmap، shell، brand، seo
privacycontent، shell، brand، seo
termsintro، sections، effective_date، contact_email، shell، brand، seo
changelogentries، shell، brand، seo

داخلی: تم Harvest

تم ارسال‌شده harvest نام دارد. برای سازگاری با نسخه‌های قبلی، فایل‌های آن در همان جایی که همیشه بودند (resources/js/pages/welcome.tsx + resources/js/pages/marketing/*.tsx) قرار دارند، نه در marketing-themes/harvest/. حل‌کننده به آن مسیرهای قدیمی نگاشت می‌کند تا نصب‌های موجود بدون تغییر در نمایش ارتقا یابند.

تم‌های اضافی ارسال‌شده

دو تم اضافی در بسته ارسال می‌شوند. هر دو بسته‌های کامل هستند که همه هفت صفحه را پوشش می‌دهند و از دستیار فروش دموی زنده برای پیش‌نمایش چت قهرمان استفاده می‌کنند.

  • Aurora (نامک aurora) — بروتالیست تحریریه با پالت کاغذ/جوهر و لهجه سیگنال لیمویی. در resources/js/pages/marketing-themes/aurora/ قرار دارد. auth-shell.tsx را ارسال می‌کند تا جریان‌های ورود، ثبت‌نام و بازنشانی رمز عبور در همان پالت کاغذ/جوهر/لیمویی سایت بازاریابی نمایش داده شوند.
  • Prism (نامک prism) — هویت گرادیان بنفش/مرجانی، بدنه Inter Tight با لهجه‌های کج نویس Instrument Serif، ماکت براق قهرمان با کارت‌های زمینه شناور، فوتر نوار گرادیان. در resources/js/pages/marketing-themes/prism/ قرار دارد. همچنین auth-shell.tsx را برای ورود منطبق با تم ارسال می‌کند.

دموی امتحان کنید Prism (دریافت آدرس ناشناس)

قهرمان Prism یک فرم تعاملی امتحان کنید را ارسال می‌کند. یک بازدیدکننده یک آدرس را وارد می‌کند، سرور صفحه را به‌صورت همزمان دریافت می‌کند (POST /api/v1/widget/try-now)، متن قابل خواندن را از طریق HtmlExtractor استخراج می‌کند، آن را تکه‌تکه می‌کند و تکه‌ها را زیر یک توکن کش با عمر کوتاه (TTL ۱ ساعت) ذخیره می‌کند. سپس چت قهرمان به آن زمینه کش‌شده تغییر می‌کند — هر پیام بازدیدکننده از طریق POST /api/v1/widget/try-now/stream هدایت می‌شود که یک پاسخ هوش مصنوعی مبتنی بر تکه‌های کش‌شده را از طریق تگ‌های <source> پخش می‌کند.

در app/Services/TryNow/TryNowSession.php و app/Http/Controllers/Widget/TryNowController.php قرار دارد. بدون دستیار فروش، بدون فضای کاری، بدون نوشتن در پایگاه داده — نمی‌تواند داده‌های فضای کاری را آلوده کند. محدودیت نرخ به ازای هر IP از طریق محدودکننده‌های try-now-start و try-now-stream که در AppServiceProvider::configureRateLimiting تعریف شده‌اند، اعمال می‌شود.

پوسته‌های احراز هویت منطبق با تم

هر دو Aurora و Prism یک auth-shell.tsx را در کنار هفت صفحه بازاریابی خود ارسال می‌کنند. توزیع‌کننده در resources/js/layouts/auth-layout.tsx پوسته مناسب را براساس marketingTheme (prop اشتراکی Inertia) انتخاب می‌کند. زمانی که تم فعال پوسته‌ای ارسال نمی‌کند، توزیع‌کننده به چیدمان دوپنلی پیش‌فرض Harvest بازمی‌گردد. برای افزودن پوسته احراز هویت یک تم جدید:

  1. resources/js/pages/marketing-themes/<slug>/auth-shell.tsx را با صادر کردن یک کامپوننت با propsهای { title, description, children } ایجاد کنید.
  2. یک شاخه در auth-layout.tsx اضافه کنید: if (marketingTheme === '<slug>').
  3. یک تست Pest در tests/Feature/Marketing/ اضافه کنید که با تم فعال به /login و /register درخواست دهد.

بین آنها در تنظیمات ← سیستم ← بازاریابی یا از طریق tinker تغییر دهید:

php artisan tinker --execute 'App\Models\AppSetting::singleton()->forceFill(["marketing_theme" => "prism"])->save();'

بازنشانی در صورت خرابی تم

اگر پوشه یک تم حذف شود، مانیفست آن نامعتبر شود، یا نامک ذخیره‌شده در app_settings.marketing_theme با هیچ تم نصب‌شده‌ای مطابقت نداشته باشد، حل‌کننده به‌طور بی‌صدا به harvest بازمی‌گردد. سایت بازاریابی با یک تنظیم قدیمی نمی‌تواند خالی شود. برای بازنشانی صریح، دستور زیر را اجرا کنید:

php artisan tinker --execute 'App\Models\AppSetting::singleton()->forceFill(["marketing_theme" => "harvest"])->save();'

زبان خود را انتخاب کنید