وب‌سایت موتور

راهنمای ناحیه مدیریت

۱. ورود و خروج

نشانی بخش مدیریت سایت

ناحیه مدیریت روی مرورگر و در نشانی پیش‌فرض /ctrl/ در دسترس است. اگر نشانی سایت example.com باشد، نشانی مدیریت example.com/ctrl است.

تغییر نشانی مدیریت

از قابلیت‌های موتور، این است که ناحیه مدیریت در نشانی ثابتی محدود نشده است. در تنظیمات سایت، ردیف «نشانی بخش مدیریت» را با عبارت دلخواه جایگزین کنید:

نشانی مدیریت در data/setting.json و در ردیف login_url ذخیره می‌شود. ویرایش مستقیم این فایل بلامانع است؛ اگر نشانی را فراموش کردید یا مشکلی پیش آمد، می‌توانید آن را مستقیماً در این فایل بازنشانی کنید.

توصیه امنیتی: نشانی پیش‌فرض ctrl برای همه سایت‌های موتور یکسان و شناخته‌شده است. تغییر آن به عبارت دیگر، ساده‌ترین لایه محافظت در برابر تلاش‌های خودکار ورود است.

ورود

ورود با نشانی ایمیل، رمز ورود و کد امنیتی چهاررقمی انجام می‌شود.

فراموشی رمز ورود — سه راهکار

اگر ارسال ایمیل روی هاست کار کند، از گزینه «بازنشانی رمز» در صفحه ورود، پیوند بازنشانی به ایمیل کاربر ارسال می‌شود. در غیر این صورت یا در نبود دسترسی به ایمیل:

راه اول — ویرایش پایگاه کاربران از مدیریت: اگر کاربری با سطح مدیر (یا راه دوم زیر) به بخش مدیریت پرونده برسد، می‌تواند با ویرایشگر پایگاه، رمز دیگری جایگزین کند. در ویرایشگر پایگاه، فایل data/users.sqlite را باز کنید و این دستور را اجرا کنید (شماره کاربر را جایگزین ۲ کنید):

UPDATE users SET user_pass='827ccb0eea8a706c4c34a16891f84e7b' WHERE user_id=2;

این مقدار، درهم‌ساخت (hash) رمز 12345 است؛ پس از ورود با رمز 12345، آن را فوراً عوض کنید.

راه دوم — بدون دسترسی به مدیریت: با FTP فایل data/users.sqlite را دریافت، با یک نرم‌افزار مدیریت SQLite (مثل SQLite Database Browser یا SQLite Editor برای اندروید) به همین شکل ویرایش و باز بارگذاری کنید.

راه سوم — راه‌اندازی مجدد سایت: نام فایل data/setting.json را موقتاً تغییر دهید (مثلاً setting-original.json). با مراجعه به نشانی سایت، فرآیند راه‌اندازی (نام سایت و رمز) از نو انجام می‌شود؛ سپس فایل جدید را حذف و نام فایل قدیمی را بازگردانید. محتوای سایت دست‌نخورده می‌ماند و فقط کاربران قبلی حذف و کاربر جدید جایگزین می‌شود.

⚠ هشدار: در فاصله‌ای که setting.json تغییر نام یافته، هر بازدیدکننده‌ای می‌تواند فرم راه‌اندازی را تکمیل و مدیر سایت شود. این کار را در کوتاه‌ترین زمان و خارج از ساعت‌های پر بازدید انجام دهید.

جزئیات بیشتر: راهنمای «خطاها»، بخش «ایمیل بازنشانی ارسال نشد».

خروج

خروج از حساب با کلید خروج در ناحیه مدیریت انجام می‌شود.

۲. نقش‌ها و دسترسی‌ها

سه سطح دسترسی در نظر گرفته شده است و امکان ثبت‌نام برای عموم وجود ندارد؛ کاربران فقط توسط مدیر سایت و برای همکاری در انتشار و نگهداری سایت ایجاد می‌شوند. این طراحی، حداقل فرض سوءاستفاده از طرف کاربرها را تضمین می‌کند.

نقششرح
مدیر (admin)بدون محدودیت در دسترسی به بخش مدیریت
سردبیر (editor)مدیریت کامل محتوا: همه مطالب، دیدگاه‌ها، سفارش‌ها، فعال‌سازی و حذف پوسته و تنظیمات نمایش آن — اما بدون دسترسی به تنظیمات سایت، روش‌های پرداخت، ویرایشگر فایل/پایگاه و مدیریت کاربران
نویسنده (author)انتشار محتوا: ایجاد مطلب، دسته و برچسب؛ ویرایش و حذف فقط مطالب خودش؛ مدیریت تصاویر (بارگذاری و حذف تصویر)

جدول دسترسی عملیات‌ها

عملیاتمدیرسردبیرنویسنده
ایجاد مطلب، دسته، برچسب✔✔✔
ویرایش و حذف مطالب دیگران✔✔— (فقط مطالب خودش)
حذف دسته و برچسب✔✔—
تأیید، ویرایش و حذف دیدگاه‌ها✔✔—
سفارش‌ها (یادداشت، وضعیت، حذف)✔✔—
فعال‌سازی و حذف پوسته، تنظیمات نمایش پوسته✔✔—
نصب پوسته✔——
تنظیمات سایت و روش‌های پرداخت✔——
مدیریت پرونده (تغییر نام، کپی، جابجایی، zip)✔——
آپلود و حذف تصویر، ایجاد پوشه و فایل متنی✔✔✔
آپلود فایل غیرتصویری (مثل pdf)✔——
ویرایشگر فایل و ویرایشگر پایگاه داده✔——
ایجاد و حذف کاربران✔——
ویرایش مشخصات خود (نام، ایمیل، نشانی معرفی، رمز)✔✔✔
به‌روزرسانی موتور و پاک‌کردن وقایع✔——

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

۳. پیشخوان

پس از ورود، پیشخوان خلاصه‌ای از وضعیت سایت را نشان می‌دهد:

۴. تنظیمات سایت

نام سایت

نام و عنوان اصلی سایت که در پوسته نمایش داده می‌شود. در setting.json ذیل sitename ذخیره و در پوسته با %sitename فراخوانی می‌شود.

عنوان، توضیح و کلیدواژه‌های سایت برای موتورهای جستجو

این سه مقدار برای صفحه اصلی سایت به کار می‌روند؛ هر مطلب، فیلدهای سئوی اختصاصی خودش را دارد (بخش ۵).

نشانی بخش مدیریت

شرح کامل و قواعد: بخش ۱.

افزونه‌ها

برای نصب یک افزونه، فایل‌های آن را روی سایت و در پوشه plugins بارگذاری کنید و یک‌بار وارد مدیریت شوید؛ افزونه به‌طور خودکار شناسایی و فعال می‌شود. هر افزونه شامل دو فایل ضروری است:

هر افزونه در پوشه‌ای هم‌نام خودش قرار می‌گیرد؛ مثل plugins/plug1/index.php.

به‌روزرسانی خودکار موتور

با کلید به‌روزرسانی (فقط مدیر)، موتور نسخه جدید را از وب‌سایت رسمی دریافت می‌کند؛ پس از تطبیق امضا (MD5)، نسخه فعلی در پوشه trash نگه داشته و نسخه جدید جایگزین می‌شود. این عملیات به اتصال سایت به websitemotor.com نیاز دارد.

۵. مطالب

فرم ایجاد و ویرایش، برای مطلب و دسته و برچسب یکسان است و با ردیف «نوع» بین آن‌ها تمایز گذاشته می‌شود. به هر محتوا یک شماره یکتا (شناسه) اختصاص می‌یابد که در صفحه ویرایش نمایش داده می‌شود؛ شناسه مبنای فراخوانی‌های پوسته و نشانی کوتاه است.

نشانی کوتاه

علاوه بر «نشانی یکتا»، هر محتوا با شناسه هم قابل مشاهده است و به‌طور خودکار به نشانی کامل هدایت می‌شود:

example.com/123          ← نشانی کوتاه (هدایت به نشانی کامل)
example.com/مطلب-نمونه   ← نشانی کامل

عنوان

عنوان محتوا؛ به‌صورت متن ساده ذخیره می‌شود و کاراکترهای < > " ' با نمادهای امن جایگزین می‌شوند. عنوان خالی پذیرفته نمی‌شود.

نشانی یکتا

نشانی منحصربه‌فرد هر مطلب، دسته و برچسب در نوار نشانی مرورگر:

وضعیت انتشار

حالترفتار
انتشار (P)برای عموم قابل مشاهده
پیش‌نویس (D)برای عموم نمایش داده نمی‌شود؛ بازدیدکننده مهمان با خطای دسترسی مواجه می‌شود و اعضای سایت مطلب را همراه نوار هشدار قرمز شناور «این مطلب پیش‌نویس است و برای عموم قابل مشاهده نیست.» می‌بینند

دسته و برچسب پیش‌نویس نمی‌شوند.

چکیده

متن کوتاه و ساده برای معرفی مطلب. اگر «توضیح برای موتورهای جستجو» در ویرایش مطلب خالی باشد، متن چکیده به‌عنوان توضیح متا منتشر می‌شود. فراخوانی در پوسته: %excerpt.

محتوا

بخش اصلی صفحه اختصاصی مطلب. از نوار ابزار بالای ویرایشگر، چینش و ظاهر دلخواه (قالب‌بندی متن، تصویر، رسانه) قابل تنظیم است؛ کلید نمایش تمام‌صفحه و کلید ویرایش کد HTML نیز در دسترس است. فراخوانی در پوسته: %content.

تصویر شاخص

با کلیک روی مربع تصویر، پنجره «مدیریت تصاویر» باز می‌شود و امکان انتخاب یا بارگذاری تصویر وجود دارد. از تصویر شاخص، یک نسخه بندانگشتی با پسوند -thumb.jpg و حداکثر ۱۰۰ پیکسل به‌طور خودکار ساخته می‌شود تا در مواردی که به اندازه اصلی نیاز نیست، با حجم کمتر استفاده شود. فراخوانی در پوسته: %img و %src و %thumb.

دسته‌بندی و برچسب

هر مطلب می‌تواند چند دسته و چند برچسب داشته باشد (بخش ۶).

قالب نمایش مطلب

به‌طور پیش‌فرض، مطلب با post.html و دسته/برچسب با category.html پوسته نمایش داده می‌شود. با این ردیف می‌توان برای هر محتوا، قالب دیگری از میان فایل‌های html پوسته انتخاب کرد؛ مثلاً یک کپی از post.html با نام post-contact.html که فرم تماس دارد و بخش دیدگاه‌هایش حذف شده، برای مطلب «تماس با ما».

نام قالب آزاد است (post-about.html، 123.html و…). قالب دلخواه می‌تواند از قبل توسط طراح پوسته ساخته شده باشد یا مدیر سایت خودش آن را در پوشه pages پوسته اضافه کند. اگر قالب انتخابی موجود نباشد، صفحه خطای «پرونده پوسته یافت نشد» نمایش داده می‌شود.

وضعیت دیدگاه

حالترفتار
پس از تأیید (پیش‌فرض)دیدگاه عموم دریافت و پس از تأیید مدیر یا سردبیر منتشر می‌شود؛ دیدگاه اعضا بلافاصله منتشر می‌شود
آنی (O)دیدگاه عموم بلافاصله منتشر می‌شود؛ مدیر/سردبیر پس از انتشار می‌تواند بازبینی، تأیید یا حذف کند
فقط اعضا (M)تنها اعضای سایت حق درج دیدگاه دارند؛ بلافاصله منتشر می‌شود
غیرفعال (C)دیدگاهی دریافت نمی‌شود و فرم دیدگاه‌ها نیز نمایش داده نمی‌شود

دیدگاه کاربران سایت (مدیر، سردبیر، نویسنده) همیشه بلافاصله منتشر می‌شود.

سئوی مطلب

سه ردیف «عنوان، توضیح و کلیدواژه‌ها برای موتورهای جستجو»:

مطالب مشابه

اگر پوسته فعال از این امکان پشتیبانی کند (theme_similar_posts: yes)، ردیفی برای انتخاب دستی مطالب مرتبط هر مطلب نمایش داده می‌شود؛ انتخاب دسته یا برچسب هم مجاز است. این موارد با شناسه، در داده‌های مطلب با عنوان similar_posts ذخیره می‌شوند.

مشخصه‌های اضافی مطلب

اگر پوسته، فیلدهای اختصاصی مطلب تعریف کرده باشد (theme_vars)، ردیف‌های آن‌ها در این فرم ظاهر می‌شود؛ مثلاً «پیش‌عنوان» یا «پیش‌متن». مقادیر در داده‌های مطلب ذخیره و در پوسته با نام همان فیلد فراخوانی می‌شوند.

قابلیت فروشگاهی مطلب

در صورتی که فروشگاه در تنظیمات سایت فعال شده باشد، ردیفی برای تعیین فروشگاهی بودن مطلب نمایش داده می‌شود. مطلب غیرفروشگاهی، بهایی ندارد. مطلب فروشگاهی سه نوع دارد:

نوعردیف‌هارفتار پس از خرید
کالابها + واحدتحویل فیزیکی؛ «واحد» در سبد خرید و صورت‌حساب درج می‌شود (مثل عدد، متر، کیلوگرم). اگر واحد تعیین نشود، کالا شمارش‌ناپذیر تلقی و امکان انتخاب چند واحد در فرم سفارش وجود نخواهد داشت
محتوابها + محتوای قابل دریافتفایل در اختیار خریدار قرار می‌گیرد (توضیح زیر)
خدمتبها + خدمت الکترونیکیک خدمت الکترونیکی اجرا می‌شود (توضیح زیر)

محتوای قابل دریافت: نشانی فایلی که باید پس از خرید در اختیار مخاطب قرار گیرد؛ نشانی باید معتبر و روی سایت موجود باشد و نباید نشانی کامل سایت در آن وارد شود. مثلاً اگر test.pdf در پوشه pdfs است:

/pdfs/test.pdf

پس از خرید موفق، این فایل در یک نشانی رمزشده با اعتبار محدود و در چارچوب نشست خریدار، در صفحه رسید در اختیار او قرار می‌گیرد؛ نشانی اصلی فایل روی سایت نمایش داده نمی‌شود و حتی نام اصلی فایل هنگام بارگیری تغییر می‌کند و برای خریدار مشخص نخواهد بود.

خدمت الکترونیک: کدی به زبان PHP که پس از تراکنش موفق خریدار — در لحظه تأیید پرداخت و پیش از هدایت به صفحه رسید — یک‌بار اجرا می‌شود. کاربرد: فروش اشتراک، فعال‌سازی سرویس یا فراخوانی یک سرویس وب پس از پرداخت. نکات:

$o['order_data']['service_response']= store_post_json('http://example.com/api/',
['user_email'=>$o['order_customer']['email'],'user_value'=>123,'api_key'=>123456],true);

داده‌های سفارش در بخش «سفارش‌ها» قابل مشاهده است.

بهای مطلب

مقدار عددی بهای مطلب فروشگاهی؛ تعیین آن ضروری است و در غیر این صورت مطلب قابلیت فروشگاهی نخواهد داشت. برای مطالب غیرفروشگاهی صفر است. فراخوانی در پوسته: %price؛ دکمه خرید با %buy.

زمان ایجاد مطلب

همزمان با اولین ذخیره، زمان سرور (میلادی) در post_created ثبت می‌شود و در ویرایش‌های بعدی ثابت می‌ماند. فراخوانی در پوسته: %created و نیز %date و %pdate و %htime.

زمان ویرایش مطلب

با هر بار ذخیره مطلب، زمان ویرایش آن ذیل ستون post_modified در پایگاه داده مطالب، به‌روز می‌شود. فراخوانی در پوسته: %modified.

برای تعیین تاریخ دلخواه یا هر تغییر دیگری در مشخصات مطالب، می‌توانید پایگاه داده را مستقیماً ویرایش کنید: از بخش «مدیریت پرونده»، کلید ویرایش ردیف فایل data/posts.sqlite را بزنید و در نوار دستور، مثلاً برای مطلب شناسه ۱۰ با تاریخ ۱۴۰۵/۵/۱۰ ساعت ۹ صبح:

UPDATE posts SET post_created='2026-08-01 09:00' WHERE post_id=10;

تاریخ میلادی، درون ' ' و دقیقاً با این قالب و بدون فاصله اضافی وارد شود. اگر شناسه مطلب را نمی‌دانید، در صفحه ویرایش مطلب قابل مشاهده است. سایر ستون‌های جدول هم به همین شکل قابل ویرایش‌اند.

نویسنده مطلب

همزمان با ذخیره، شناسه کاربر واردشده به مطلب اختصاص می‌یابد و در ویرایش‌های بعدی ثابت می‌ماند. نام و نشانی معرفی نویسنده از برگه کاربرها خوانده می‌شود (بخش ۸) و در پوسته با %author_name و %author_url و %author_link فراخوانی می‌شود.

۶. دسته‌ها و برچسب‌ها

دسته‌بندی مطلب

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

برچسب مطلب

مطالب با برچسب مشترک، مشابه دسته‌ها در یک گروه قابل نمایش هستند.
برچسب‌ها اساساً کلمات یا عبارات شاخص هستند و می‌توانند برای توصیف محتوایی که در مطلب پوشش داده می‌شود، استفاده شوند. در حالی که دسته‌ها گسترده‌تر و سلسله مراتبی هستند، برچسب‌ها اصطلاحات ساده‌ای هستند که محتوای یک مطلب را منعکس می‌کنند. بر خلاف دسته بندی ها، برچسب ها سلسله مراتبی نیستند.

دسته‌ها و برچسب‌ها

مطالب با دسته یا برچسب مشترک، در یک گروه و به‌صورت بایگانی قابل مرورند. هر دو در یک جدول ذخیره می‌شوند و خواص مشترکی دارند؛ تفاوت در ماهیت آن‌هاست:

برای دسته یا برچسبی که صرفاً برای طبقه‌بندی و مدیریت لازم است و نباید روی سایت دیده شود، نشانی یکتا را # ذخیره کنید (بخش ۵).

حذف دسته یا برچسب (مدیر/سردبیر) به‌طور خودکار شناسه آن را از دسته‌بندی و برچسب‌های همه مطالب پاک می‌کند.

اگر پوسته فعال تصویر شاخص دسته/برچسب را پشتیبانی کند (theme_categories_img / theme_tags_img)، در فرم ایجاد و ویرایش آن‌ها ردیف تصویر شاخص نیز نمایش داده می‌شود.

۷. دیدگاه‌ها

دیدگاه‌های بازدیدکنندگان ذیل مطالب دریافت و در پایگاه دیدگاه‌ها ثبت می‌شود. وضعیت سیاست دریافت هر مطلب، در فرم ویرایش مطلب تنظیم می‌شود (بخش ۵).

وضعیت هر دیدگاه

وضعیتشرحنمایش روی سایت
در انتظار تأیید (۰)دریافت شده و منتظر تأیید یا حذف استخیر
منتشرشده (۱)روی سایت منتشر شده ولی هنوز بازبینی نشده (حالت «آنی»)بله
تأییدشده (۲)بازبینی و تأیید شده استبله

عملیات

جستجوی دیدگاه‌ها

با پیشوندهای زیر یا جستجوی ساده در متن:

وضعیت:تأیید نشده        وضعیت:تأیید شده        وضعیت:تأیید نشده
نام:نام‌دیدگاه‌دهنده     شناسه:25               مطلب:12

رأی دیدگاه‌ها

بازدیدکنندگان می‌توانند به دیدگاه‌ها رأی مثبت یا منفی بدهند؛ شمارش در پایگاه رأی دیدگاه‌ها نگهداری و در پوسته با دکمه‌های مثبت/منفی کنار هر دیدگاه نمایش داده می‌شود.

۸. کاربران

کاربران سایت، همکاران انتشار و نگهداری‌اند (بخش ۲) و فقط مدیر سایت می‌تواند آن‌ها را ایجاد و حذف کند.

ایجاد و ویرایش کاربر

تغییر رمز شخصی

هر کاربر با واردکردن رمز فعلی و رمز جدید، رمز خود را تغییر می‌دهد. رمز جدید حداقل ۵ نویسه است.

حذف کاربر

فقط توسط مدیر و به‌جز خود او.

۹. پوسته‌ها

پوسته تنظیم نشده است.

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

نصب

روشالزامپس از نصب
دریافت از مخزن پوسته‌هااتصال سرور به وب‌سایت رسمی (curl)نصب و فعال‌سازی خودکار
بارگذاری فایل ZIP پوستهفعال بودن ماژول Zipنصب و فعال‌سازی خودکار
بارگذاری پوشه پوسته با FTP یا مدیریت پرونده—فعال‌سازی دستی از بخش «پوسته»

پوسته‌ای که قبلاً نصب شده باشد، دوباره نصب نمی‌شود. جزئیات فنی نصب و فعال‌سازی: راهنمای «طراحی پوسته»، بخش ۱.

فعال‌سازی و حذف

با تغییر پوسته، محتوا و مطالب سایت دست‌نخورده می‌ماند و فقط ظاهر سایت عوض می‌شود. تنظیمات هر پوسته در theme.json همان پوسته ذخیره می‌شود؛ بنابراین با بازگشت به پوسته قبلی، تنظیمات آن مطابق وضعیت قبل فعال می‌شود.

حذف پوسته، آن را به پوشه trash منتقل می‌کند (بازیافت‌پذیر) و در صورت فعال بودن آن پوسته، سایت تا فعال‌سازی پوسته دیگر پیام «پوسته‌ای تنظیم نشده است» نشان می‌دهد.

تنظیمات نمایش پوسته

تمام متغیرهایی که پوسته در theme.json تعریف کرده است (رنگ مضمون، تصویر نشان، فهرست‌ها، متن‌ها و…) در این برگه نمایش داده می‌شود و قابل تنظیم است. نوع هر ردیف (رنگ، تصویر، فهرست و…) را طراح پوسته تعیین کرده و تغییرات در فایل پوسته ذخیره می‌شود. مشخصات اعلامی پوسته (نام، نسخه، توضیح، نشانی) در همین برگه نمایش داده می‌شود ولی قابل ویرایش نیست.

شرح کامل متغیرها و انواع آن‌ها: راهنمای «طراحی پوسته»، بخش ۳.

۱۰. فروشگاه

با فعال کردن قابلیت فروشگاه در تنظیمات سایت، می‌توان مطالب را به‌صورت کالا، محتوای قابل دریافت یا خدمت به فروش گذاشت (بخش ۵) و پایگاه سفارش‌ها ساخته می‌شود.

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

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

⚠ توجه: در تنظیمات فروشگاه، صرفاً متن نمایشی واحد پول تعیین می‌شود و تبدیل واحد برای تراکنش‌های قبلی یا ایجاد تطابق با الزامات روش پرداخت انجام نمی‌شود.
بنابراین در تغییر مقدار پیش‌فرض «تومان» ممکن است نیاز باشد اسکریپت درگاه نیز ویرایش شود.

روش‌های پرداخت

افزودن یک راهکار پرداخت با بارگذاری افزونه انجام نمی‌شود؛ فقط کافی است مدیر سایت فرم تنظیم روش پرداخت را تکمیل کند:

ردیفشرح
عنواننام روش پرداخت که به مشتری نمایش داده می‌شود
توضیحاتتوضیح کنار انتخاب روش در فرم سفارش
مقادیرپارامترهای لازم برای فعال‌سازی درگاه، مثل شناسه پذیرنده یا توکن؛ قالب هر پارامتر: «نام,پیش‌فرض,برچسب;» و چند پارامتر پشت هم
اسکریپت ارجاعکد PHP کوتاه که مشتری را به درگاه می‌رساند یا برای واریز بانکی، اطلاعات لازم را نمایش می‌دهد
اسکریپت برگشتکد PHP کوتاه که پس از بازگشت از درگاه، صحت پرداخت را تأیید و سفارش را نهایی می‌کند

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

اگر سرویس پرداخت مورد نظر شما در میان درگاه‌های آماده نیست، موضوع را از فرم «درخواست پشتیبانی از درگاه پرداخت» در وب‌سایت موتور مطرح کنید.

تأیید گواهی‌های SSL (STORE_SSL_VERIFY): فراخوانی درگاه‌ها به‌طور پیش‌فرض با تأیید گواهی SSL انجام می‌شود. اگر هاست شما انباره گواهی‌های قدیمی داشته باشد، این فراخوانی با خطای SSL شکست می‌خورد و پیام خطا در صفحه رسید می‌آید. راه‌حل درست، به‌روزرسانی گواهی‌های سرور است؛ در صورت فراهم نبودن این امکان، می‌توان تأیید گواهی‌های امن را در ابتدای index.php غیرفعال کرد.

سفارش‌ها

۱۱. آمار و وقایع

شمار بازدید مطلب

تعداد بازدید یکتای هر مطلب، در ردیف شمار بازدید (پیشخوان مطالب) نمایش داده می‌شود و در پوسته با %visit فراخوانی می‌شود. قواعد شمارش:

شمار بازدید سایت

به ازای هر بازدیدکننده جدید — یا تکراری که بعد از حدود سی دقیقه دوباره مراجعه کرده باشد — یک واحد به شمار بازدید روز، ماه، سال و مجموع کل اضافه می‌شود. اگر بازدیدکننده از موتور جستجو ارجاع شده باشد، به شمار ارجاع از جستجو هم یکی اضافه می‌شود. دریافت هر صفحه از سایت، به شمار بازدید اضافه می‌شود و تفاوتی میان صفحه اصلی و صفحات داخلی نیست. شمار بازدید مجموع کل مطالب، دسته‌ها و برچسب‌ها هم برای هر عنوان مجزا محاسبه می‌شود. این اطلاعات به تفکیک در data/countor.json ذخیره می‌شود (۳۰ روز و ۶ ماه آخر).

وقایع اخیر

برخی از تغییرات و رویدادهای سایت (ورودها، مطالب جدید، تراکنش‌ها، پیام‌های فرم تماس و…) با زمان، شناسه اینترنتی (آی‌پی) و شرح مورد، در data/wotor.log ذخیره می‌شود. ۲۵ ردیف آخر در پیشخوان نمایش داده می‌شود. حذف این فایل، وقایع را بازنشانی می‌کند (فقط مدیر). اگر حجم فایل بیش از ۲ مگابایت شود، ردیف‌های قدیمی به‌طور خودکار در فایل فشرده GZip با نامی مشابه wotor.[1].log.gz نگهداری می‌شوند.

۱۲. مدیریت پرونده و تصاویر

این بخش با دو نگاه در ناحیه مدیریت عرضه می‌شود و تفاوت اصلی آن‌ها در سطح دسترسی است:

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

در هر دو نگاه، تصاویر با آیکون بندانگشتی مرور می‌شوند و در همان‌جا نسخه بندانگشتی تصاویر جدید ساخته می‌شود. بارگذاری فایل غیرتصویری (مثل pdf) و همه عملیات زیر، فقط برای مدیر است:

حذف فایل‌ها بازیافت‌پذیر است: به پوشه trash منتقل می‌شوند و از همان‌جا می‌توان حذف دائمی کرد. پوشه‌های data و themes و خود trash از حذف محافظت می‌شوند. تصاویر حذف‌شده، بندانگشتی‌شان هم پاک می‌شود.

ویرایشگر پرونده

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

⚠ هشدار: ویرایش اشتباه فایل‌های موتور می‌تواند سایت را از کار بیندازد. پیش از ویرایش فایل‌های حیاتی، پشتیبان بگیرید.

ویرایشگر پایگاه داده

با کلید ویرایش ردیف هر فایل *.sqlite، ویرایشگری SQL در اختیار شماست که دستور را اجرا و نتایج را جدول‌بندی می‌کند. کاربردها و نمونه‌ها:

UPDATE posts SET post_created='2026-08-01 09:00' WHERE post_id=10;   ← تاریخ دلخواه مطلب
UPDATE users SET user_pass='...' WHERE user_id=2;                    ← بازنشانی رمز (بخش ۱)

اگر فایل SQLite را بیرون از ناحیه مدیریت ویرایش کرده‌اید و بعد از آپلود خطای مجوز نوشتن دیدید، مجوز نوشتن فایل را اصلاح کنید (راهنمای «خطاها»). جزئیات بیشتر درباره ساختار پایگاه‌ها: پیوست ب و راهنمای «طراحی پوسته».

۱۳. پشتیبان‌گیری

همه محتوای سایت فایل است: پایگاه‌های داده در data، تصاویر در images، پوسته‌ها در themes. بنابراین پشتیبان‌گیری همان کپی‌برداری از فایل‌هاست و به فرآیند یا قالب خاصی نیاز ندارد؛ بازگردانی هم معکوس همان کپی است. همین ویژگی، انتقال سایت به هاست دیگر را به کپی یک پوشه تبدیل می‌کند — موتور عملاً قابل حمل است.

روش ۱ — کنترل‌پنل میزبانی (توصیه‌شده برای سایت‌های حجیم): در cPanel از Backup ← Download a Full Account Backup و در DirectAdmin از بخش مشابه استفاده کنید. فشرده‌سازی توسط خود سرور و خارج از PHP انجام می‌شود و برای حجم بالا کارآمدتر است.

روش ۲ — مدیریت پرونده ناحیه مدیریت: محتوا یا پوشه‌های اصلی را انتخاب و با گزینه zip فشرده کنید، فایل را دریافت و سپس از سرور حذف کنید. توجه: فشرده‌سازی با PHP برای تعداد و حجم زیاد فایل کند است و در ساعات کم‌بازدید انجام شود. فایل zip باقی‌مانده روی سرور، علاوه بر اشغال فضا ریسک امنیتی دارد — پس از دریافت حتماً حذف شود.

روش ۳ — FTP: دریافت کامل پوشه ریشه سایت با هر سرویس‌گیرنده FTP.

توصیه‌ها: پیش از تغییر پوسته یا نصب افزونه، و به‌صورت دوره‌ای (بر اساس حجم تغییرات، مثلاً ماهانه) پشتیبان بگیرید. پشتیبان را فقط روی همان سرور نگه ندارید — یک نسخه در رایانه شخصی یا فضای ابری داشته باشید.

۱۴. پوشه داده‌ها (data)

پایگاه‌ها و تنظیمات سایت در پوشه data و کنار index.php نگهداری می‌شود. فایل .htaccess داخل این پوشه، دسترسی مستقیم وب به محتوای آن را مسدود می‌کند. فهرست کامل فایل‌ها و کاربرد هر یک: پیوست ب.

جابجایی پوشه داده‌ها

برای امنیت بیشتر می‌توانید مسیر پوشه داده را به دلخواه و حتی خارج از پوشه سایت تغییر دهید. در ابتدای index.php مقدار ثابت DATA_FOLDER را تغییر دهید — مثلاً به نام دیگری داخل ریشه سایت ('wotor-data') یا به مسیری بیرون از ریشه مثل '../wotor-data' که به هیچ‌وجه از طریق وب قابل دسترس نیست.

برای این کار، پوشه را همراه همه فایل‌هایش به مقصد جدید منتقل کنید و هم‌زمان ثابت را در index.php به‌روز کنید؛ در غیر این صورت موتور فرآیند راه‌اندازی را از نو پیش می‌گیرد. پس از تغییر، نشانی واقعی پوشه در پیشخوان مدیریت در اختیار بخش‌های مدیریت پرونده و ویرایش پایگاه‌ها قرار می‌گیرد و همه عملکردها با مسیر جدید کار می‌کنند.

۱۵. سطح امنیت و محدودیت‌های شناخته‌شده

موتور برای سادگی و سبکی، برخی سطوح امنیتی را عمداً در حداقل نگه داشته است. این موارد را بدانید و در صورت نیاز با اقدامات مکمل جبران کنید:

موردوضعیتتوصیه
ذخیره رمزها با درهم‌ساخت MD5 و بدون نمکعمدیرمزهای قوی و طولانی انتخاب کنید؛ با نشت فایل کاربران، رمزهای ساده قابل بازیابی‌اند
کپچای ساده چهاررقمی و بدون محدودیت تلاش ورودعمدینشانی مدیریت را از پیش‌فرض ctrl تغییر دهید
ایمیل فقط از طریق تابع mail() هاستبدون SMTPکارکرد ارسال ایمیل را آزمایش کنید؛ در صورت مشکل، راه‌های جایگزین بازنشانی رمز (بخش ۱) را بشناسید
اعتماد به هدر X-Forwarded-For برای تشخیص آی‌پیبرای هاست پشت CDNشمار بازدید یکتا و محدودیت سفارش روزانه را نمی‌توان مطلق دانست؛ برای آمار دقیق متکی به آن نباشید
اسکریپت ناحیه مدیریت از سرور رسمی بارگذاری می‌شودCDN موتوردر صورت قطعی یا فیلتر شدن این نشانی، مدیریت از کار می‌افتد؛ در چنین حالتی فایل را روی سایت خود جایگزین کنید
نمایش خطاهای PHP در ناحیه مدیریتبرای عیب‌یابیرفتار طبیعی است؛ در محیط عمومی، نمایش خطا معمولاً توسط هاست خاموش است
اجرای کد PHP از طریق پوسته (theme_php) و اسکریپت‌های درگاه پرداختامکان طراحی پیشرفتهپوسته و افزونه را فقط از منبع مورد اعتماد نصب کنید؛ نصب هر یک معنایش اجرای کد روی سایت شماست
اتصال به‌روزرسانی خودکار بدون تأیید سخت‌گیرانه گواهیبرای سازگاری هاست‌هاامضای فایل دریافتی (MD5) بررسی می‌شود؛ در صورت تردید، به‌روزرسانی دستی انجام دهید

پیوست الف — جدول پیوندی مدیریت، پایگاه و پوسته

این جدول نشان می‌دهد هر ردیف ناحیه مدیریت، در کدام ستون پایگاه ذخیره می‌شود و با کدام کلیدواژه در پوسته فراخوانی می‌شود. مرجع کامل کلیدواژه‌ها: راهنمای «طراحی پوسته».

ردیف در ناحیه مدیریتجای ذخیرهکلیدواژه پوسته
نام سایتsetting.json ← sitename%sitename %sitelink %siteurl
سئوی سایت (۳ ردیف)setting.json ← mtitle,mdescription,mkeywords%mtitle %mdescription %mkeywords (صفحه اصلی)
نشانی بخش مدیریتsetting.json ← login_url—
عنوان مطلب/دسته/برچسبposts.post_title%title %post_title %link
نشانی یکتاposts.post_url%url %href %post_url
چکیدهposts.post_excerpt%excerpt %post_excerpt
محتوای مطلبposts.post_content%content
تصویر شاخصposts.post_img%img %src %thumb
دسته‌های مطلبposts.post_category%category_links %category_names
برچسب‌های مطلبposts.post_tags%tag_links %tag_names
قالب نمایش مطلبposts.post_template— (تعیین فایل رندر)
وضعیت انتشار (انتشار/پیش‌نویس)posts.post_type (P/D)— (403 یا نوار هشدار پیش‌نویس)
وضعیت دیدگاه مطلبposts.post_commenting (C/O/M/خالی)%comment_display_class
سئوی مطلب (۳ ردیف)posts.post_data ← meta%mtitle %mdescription %mkeywords (صفحه مطلب)
مطالب مشابهposts.post_data ← similar_postsحلقه با i="similar"
بهای مطلبposts.post_price%price %buy %has_price
واحد کالاposts.post_data ← store_unitSTORE.catalog[...][3]
محتوای قابل دریافتposts.post_data ← store_file— (پیوند در صفحه رسید)
خدمت الکترونیکposts.post_data ← store_service— (اجرای سمت سرور)
نویسنده مطلبposts.post_author ← users%author_name %author_url %author_link
زمان ایجاد / ویرایشposts.post_created / post_modified%date %pdate %htime %created %modified
مشخصه‌های اضافی مطلب (theme_vars)posts.post_data%نام‌فیلد
شمار بازدید مطلبpost_rates.post_visit%visit
رأی‌های مطلبpost_rates.post_votes%votes
دیدگاه‌ها (متن، نام، وضعیت، تاریخ)comments.*بارگیری با جاوااسکریپت (پیوست الف راهنمای پوسته)
رأی دیدگاه‌هاcomment_rates.*همان
سفارش‌هاorders.*STORE و صفحه رسید
تنظیمات نمایش پوستهtheme.json ← متغیرها%نام‌متغیر
نشانی معرفی کاربرusers.user_url%author_url %author_link

پیوست ب — فایل‌های پوشه data

پس از راه‌اندازی سایت، این فایل‌ها در پوشه data ایجاد می‌شوند:

فایلکاربرد
.htaccessبا محتوای Require all denied — تضمین عدم دسترسی وب به محتویات پوشه
setting.jsonتنظیمات کلی سایت: نام سایت، نشانی بخش مدیریت، پوسته فعال، سئوی سایت، تنظیمات فروشگاه و روش‌های پرداخت، فهرست افزونه‌ها
countor.jsonشمارنده بازدیدها: روز، ماه، سال، ارجاع از جستجو و بازدیدکنندگان برخط
wotor.logگزارش وقایع ناحیه مدیریت به‌صورت تاریخچه؛ پس از ۲ مگابایت به فایل فشرده GZip چرخش می‌کند
captcha.0-9.ttfقلم ارقام کم‌حجم برای ساخت تصویر کد امنیتی
users.sqliteداده‌های کاربران سایت (نام، ایمیل، رمز، نقش، نشانی معرفی)
posts.sqliteداده‌های مطالب، دسته‌ها و برچسب‌ها (همه در یک جدول با تمایز post_type: P مطلب منتشرشده، C دسته، T برچسب، D پیش‌نویس)
comments.sqliteدیدگاه‌های ذیل مطالب (شامل پاسخ‌های تودرتو و وضعیت انتشار هر دیدگاه)
post_rates.sqliteشمار بازدید یکتا و رأی‌های هر مطلب
comment_rates.sqliteشمار رأی مثبت و منفی هر دیدگاه
orders.sqliteفقط در صورت فعال بودن فروشگاه — اطلاعات سفارش‌های فروشگاهی سایت

علاوه بر این‌ها، فایل‌های متعلق به پوسته‌ها (مثل newsletter.log نمونه‌ای که theme_php می‌سازد) هم در همین پوشه ثبت می‌شوند. ساختار جدول مطالب (برای ویرایش مستقیم SQL):

CREATE TABLE posts (
  "post_id" INTEGER, "post_url" TEXT, "post_title" TEXT, "post_type" TEXT,
  "post_category" TEXT, "post_tags" TEXT, "post_img" TEXT, "post_excerpt" TEXT,
  "post_template" TEXT, "post_author" INTEGER, "post_price" INTEGER,
  "post_commenting" TEXT, "post_created" TEXT, "post_modified" TEXT,
  "post_data" TEXT, "post_content" TEXT, PRIMARY KEY("post_id"));

موتور به پوشه‌های images (تصاویر مطالب) و themes (پوسته‌ها) هم در ریشه سایت نیاز دارد و در صورت نیاز به پوشه trash (حذف بازیافت‌پذیر) ایجاد می‌کند.