ناحیه مدیریت روی مرورگر و در نشانی پیشفرض /ctrl/ در دسترس است. اگر نشانی سایت example.com باشد، نشانی مدیریت example.com/ctrl است.
از قابلیتهای موتور، این است که ناحیه مدیریت در نشانی ثابتی محدود نشده است. در تنظیمات سایت، ردیف «نشانی بخش مدیریت» را با عبارت دلخواه جایگزین کنید:
/ مجاز است؛ مثل users/login.themes، images، data).نشانی مدیریت در 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 بارگذاری کنید و یکبار وارد مدیریت شوید؛ افزونه بهطور خودکار شناسایی و فعال میشود. هر افزونه شامل دو فایل ضروری است:
index.php — روی سرور اجرا میشود و میتواند در تمام صفحات یا ناحیه مدیریت مؤثر باشد.script.js — مربوط به ناحیه مدیریت است و میتواند بخشی به آن اضافه کند.هر افزونه در پوشهای همنام خودش قرار میگیرد؛ مثل 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 که پس از تراکنش موفق خریدار — در لحظه تأیید پرداخت و پیش از هدایت به صفحه رسید — یکبار اجرا میشود. کاربرد: فروش اشتراک، فعالسازی سرویس یا فراخوانی یک سرویس وب پس از پرداخت. نکات:
exit یا die) تا ادامه عملکرد موتور — ذخیره دادهها و نمایش رسید — اجرا شود.$o در دسترس است و پس از اجرا، $o['order_data'] بهروزرسانی میشود.$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
بازدیدکنندگان میتوانند به دیدگاهها رأی مثبت یا منفی بدهند؛ شمارش در پایگاه رأی دیدگاهها نگهداری و در پوسته با دکمههای مثبت/منفی کنار هر دیدگاه نمایش داده میشود.
کاربران سایت، همکاران انتشار و نگهداریاند (بخش ۲) و فقط مدیر سایت میتواند آنها را ایجاد و حذف کند.
< > " ' / | % : @ و tab مجاز نیستند.%author_url و %author_link فراخوانی میشود.هر کاربر با واردکردن رمز فعلی و رمز جدید، رمز خود را تغییر میدهد. رمز جدید حداقل ۵ نویسه است.
فقط توسط مدیر و بهجز خود او.
پوسته همان قالب سایت است که محتوای سایت در آن قرار میگیرند.
برای نمایش محتوای سایت، نصب و فعال کردن یک پوسته ضروری است.
از طریق قسمت «پوسته» در بخش مدیریت سایت، مدیر یا سردبیر سایت این امکان را دارد تا پوسته دلخواهی را فعال کند.
تعدای پوسته در مخزن وبسایت موتور وجود دارد که می توان مورد دلخواهی را از میان آنها انتخاب کرد و سپس روی سایت فعال کرد.
همچنین این قابلیت در نظر گرفته شده است تا از طریق کلید بارگذاری پوسته، فایل فشرده یک پوسته را روی سایت نصب کرد.
| روش | الزام | پس از نصب |
|---|---|---|
| دریافت از مخزن پوستهها | اتصال سرور به وبسایت رسمی (curl) | نصب و فعالسازی خودکار |
| بارگذاری فایل ZIP پوسته | فعال بودن ماژول Zip | نصب و فعالسازی خودکار |
| بارگذاری پوشه پوسته با FTP یا مدیریت پرونده | — | فعالسازی دستی از بخش «پوسته» |
پوستهای که قبلاً نصب شده باشد، دوباره نصب نمیشود. جزئیات فنی نصب و فعالسازی: راهنمای «طراحی پوسته»، بخش ۱.
با تغییر پوسته، محتوا و مطالب سایت دستنخورده میماند و فقط ظاهر سایت عوض میشود. تنظیمات هر پوسته در theme.json همان پوسته ذخیره میشود؛ بنابراین با بازگشت به پوسته قبلی، تنظیمات آن مطابق وضعیت قبل فعال میشود.
حذف پوسته، آن را به پوشه trash منتقل میکند (بازیافتپذیر) و در صورت فعال بودن آن پوسته، سایت تا فعالسازی پوسته دیگر پیام «پوستهای تنظیم نشده است» نشان میدهد.
تمام متغیرهایی که پوسته در theme.json تعریف کرده است (رنگ مضمون، تصویر نشان، فهرستها، متنها و…) در این برگه نمایش داده میشود و قابل تنظیم است. نوع هر ردیف (رنگ، تصویر، فهرست و…) را طراح پوسته تعیین کرده و تغییرات در فایل پوسته ذخیره میشود. مشخصات اعلامی پوسته (نام، نسخه، توضیح، نشانی) در همین برگه نمایش داده میشود ولی قابل ویرایش نیست.
شرح کامل متغیرها و انواع آنها: راهنمای «طراحی پوسته»، بخش ۳.
با فعال کردن قابلیت فروشگاه در تنظیمات سایت، میتوان مطالب را بهصورت کالا، محتوای قابل دریافت یا خدمت به فروش گذاشت (بخش ۵) و پایگاه سفارشها ساخته میشود.
نحوه نمایش سبد خرید و متنهای آن، به طراحی پوسته برمیگردد؛ موتور تنها متغیرهای لازم را بهصورت جاوااسکریپت به صفحات اضافه میکند. تغییرات در نمایش و عملکرد سبد خرید، با ویرایش اسکریپت پوسته انجام میشود.
⚠ توجه: در تنظیمات فروشگاه، صرفاً متن نمایشی واحد پول تعیین میشود و تبدیل واحد برای تراکنشهای قبلی یا ایجاد تطابق با الزامات روش پرداخت انجام نمیشود.
بنابراین در تغییر مقدار پیشفرض «تومان» ممکن است نیاز باشد اسکریپت درگاه نیز ویرایش شود.
افزودن یک راهکار پرداخت با بارگذاری افزونه انجام نمیشود؛ فقط کافی است مدیر سایت فرم تنظیم روش پرداخت را تکمیل کند:
| ردیف | شرح |
|---|---|
| عنوان | نام روش پرداخت که به مشتری نمایش داده میشود |
| توضیحات | توضیح کنار انتخاب روش در فرم سفارش |
| مقادیر | پارامترهای لازم برای فعالسازی درگاه، مثل شناسه پذیرنده یا توکن؛ قالب هر پارامتر: «نام,پیشفرض,برچسب;» و چند پارامتر پشت هم |
| اسکریپت ارجاع | کد PHP کوتاه که مشتری را به درگاه میرساند یا برای واریز بانکی، اطلاعات لازم را نمایش میدهد |
| اسکریپت برگشت | کد PHP کوتاه که پس از بازگشت از درگاه، صحت پرداخت را تأیید و سفارش را نهایی میکند |
اسکریپتهای ارجاع و برگشت چند درگاه متداول از قبل آماده شدهاند و در صفحه انتخاب درگاه در ناحیه مدیریت، با یک کلیک فرم را تکمیل میکنند؛ کاربر فقط مقادیر شخصی مثل شناسه پذیرنده یا توکن را وارد میکند. این اسکریپتها بهصورت متنی در setting.json ذخیره و هنگام اجرا فراخوانی میشوند.
اگر سرویس پرداخت مورد نظر شما در میان درگاههای آماده نیست، موضوع را از فرم «درخواست پشتیبانی از درگاه پرداخت» در وبسایت موتور مطرح کنید.
تأیید گواهیهای SSL (STORE_SSL_VERIFY): فراخوانی درگاهها بهطور پیشفرض با تأیید گواهی SSL انجام میشود. اگر هاست شما انباره گواهیهای قدیمی داشته باشد، این فراخوانی با خطای SSL شکست میخورد و پیام خطا در صفحه رسید میآید. راهحل درست، بهروزرسانی گواهیهای سرور است؛ در صورت فراهم نبودن این امکان، میتوان تأیید گواهیهای امن را در ابتدای
index.phpغیرفعال کرد.
P)، ناموفق (E) یا ناتمام. مدیر/سردبیر میتواند یادداشت ثبت و وضعیت را دستی تغییر دهد./receipt/شماره/) عمومی است؛ هر که نشانی آن را داشته باشد وضعیت سفارش را میبیند و در صورت پرداخت موفق، پیوند دریافت فایلهای خرید در آن درج میشود.تعداد بازدید یکتای هر مطلب، در ردیف شمار بازدید (پیشخوان مطالب) نمایش داده میشود و در پوسته با %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 و کنار 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_unit | STORE.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 ایجاد میشوند:
| فایل | کاربرد |
|---|---|
.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 (حذف بازیافتپذیر) ایجاد میکند.