وب‌سایت موتور چه طور کار می‌کند؟

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


خلاصه اینکه :
یک برچسب یا tag اچ‌تی‌ام‌ال به مرورگر می‌گوید که این نوشته را چه طور نمایش دهد. چه قلمی، چه رنگی، کجا و...
اما به کمک وب‌سایت موتور، برچسب‌ها نقش بیشتری پیدا می‌کنند.
مثلاً با یک برچسب به موتور بگویید که چند مطلب اخیر را انتخاب کن و مثلاً نام آنها را نمایش بده. <ITEMS>%title</ITEMS>

حالا نوبت مرورگر است که هر نام را در یک بند نشان دهد. <ITEMS><p>%title</p></ITEMS>
و خروجی مرورگر مشابه زیر خواهد بود.

نمونه مطلب۱
نمونه مطلب۲
نمونه مطلب۳


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

وب‌سایت موتور چه طور کار می‌کند؟
دسترسی به پایگاه داده، محدود به موتور وب‌سایت است و موتور تنها برچسب‌های اچ‌تی‌ام‌ال را تفسیر می‌کند.



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

به علاوه، وب‌سایت موتور، متکی به یک شبکه تحویل محتوای ابداعی است.
در مدل تحویل محتوای وب‌سایت موتور، گاه پرونده‌های با محتوای غیر متنی، روی سرورهای متفاوت به مرورگر ارائه می‌شوند. البته این شبکه تحویل هنوز کاملاً هوشمند نیست و سرورهای متعددی را هم شامل نمی‌شود.





تعریف‌های بنیادی
توجه: موارد زیر صرفاً برای سکوی وب‌سایت موتور تعریف شده و به طور کلی قابل تعمیم و اطلاق نیستند.

موتورِ وب سایت (Website Motor)
نرم‌افزاری که عهده‌دار به نمایش درآوردن محتوای سایت، ارائه پاسخ‌های معتنابه در قبال درخواست‌های بازدیدکنندگان و برون‌داد پرونده‌های سایت است، موتور سایت تعریف می‌شود.

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

پایگاه داده (DataBase)
محتویات متنی، نوشته‌ها، تنظیمات و تقریباً همه چیز سایت به جز پرونده‌ها، بانک اطلاعاتی دادِگان سایت را تشکیل می‌دهند. دسترسی به این بخش محدود شده است و عملیات مربوط صرفاً از طریق مفسر موتور سایت امکان پذیر است.
از جمله محاسن این محدودیت کاهش احتمال نفوذپذیری سایت خواهد بود؛ چرا که هر کد و برنامه‌ای برای اجرا الزاماً باید سازگار با مفسر باشد.
فن‌آوری به کار رفته در موتور، SQLite است و پرونده‌های مربوط در پوشه wotor/data روی خود سایت ذخیره می‌شود که ضمن تأمین سرعت بالاتر، پرتابل بودن سایت را نیز در بر دارد. به این معنا که، تنها محتوای پرونده‌های سایت برای انتقال، تهیه نسخه پشتیبان یا بازیابی، بسنده می‌کند.

سامانه مدیریت محتوا (CMS)
برای انتشار محتوا، شخصی‌سایت سایت و به طور کلی مدیریت سایت، یک سامانه طراحی شده است که با آدرسی مشابه yoursite.com/ctrl روی سایت شما در دسترس خواهد بود.
با راه‌اندازی سایت، این بخش فعال شده و اطلاعات دسترسی در اختیار مدیر سایت قرار می‌گیرد.
در سامانه مدیریت محتوای وب‌سایت موتور، علاوه بر موارد لازم جهت تنظیم و انتشار محتوا و فراداده جهت موتورهای جستجو، مدیریت ایمیل‌ها، پرونده‌ها، تنظیم و تغییر دامنه، تعویض و ویرایش پوسته یا طراحی، امکان تعریف و اختصاص پرونده اچ‌تی‌ام‌ال دلخواه را برای هر مطلب یا دسته در نظر گرفته شده است. مثلاً به راحتی تعیین می‌کنید که برای نمایش مطلب فلان یا بایگانی مطالب دسته فلان، پرونده اچ‌تی‌ام‌ال فلان مورد استفاده قرار گیرد.

ریشه سایت (root)
پوشه اصلی سایت شما که مستقیماً با آدرس سایت شما از طریق وب در دسترس است، ریشه سایت تعریف می‌شود.
مثلاً اگر تصویری با نام test.png اینجا ذخیره کنید با آدرس yoursite.com/test.png روی وب در دسترس است. توجه کنید که در نشانی‌های سایت حروف بزرگ و کوچک با هم متفاوت است و برای مثال yoursite.com/TEST.Png روی سایت شما موجود نیست و منجر به خطای 404 خواهد شد.
توجه: بهتر است برای جلوگیری از خطای احتمالی، از کاربرد حروف غیر انگلیسی استاندارد در نام پرونده‌های خود اجتناب کنید.

پوسته سایت یا قالب سایت (Theme)
مجموعه پرونده‌هایی که برای نمایش سایت شما مورد استفاده قرار می‌گیرد، پوسته سایت شما را تشکیل می‌دهند.
یک پوسته به طور معمول شامل پرونده‌هایی مثل تصاویر، قلم‌ها، سبک‌ها (css)، کدنوشته‌های جاوا (js) و البته html است.
برای استفاده از قابلیت‌های موتور لازم است پوشه‌ای با نام pages نیز در پوسته وجود داشته باشد و شامل قالب صفحات لازم باشد.

قالب یا قالب صفحات سایت (Template)
برای نمایش صفحه اصلی، صفحه خطا، صفحه مطلب و هر صفحه‌ای روی سایت باید قالبی وجود داشته باشد. این قالب‌ها در پوشه‌ای با نام‌ pages روی ریشه سایت ذخیره شده و محتوای آن مورد تفسیر موتور قرار می‌گیرد.

دسته ساختاری (Structure)
دسته‌هایی که توسط طراح پوسته تعریف می‌شود و اغلب برای بخش‌های خاص از سایت با نام‌هایی مثل «لغزانه صفحه اصلی»، «مطب ثابت پانویس» و... تعیین می‌شود.

قاعده (در یک دسته ساختاری) (Rule)
مجموعه خصلت‌هایی که به یک دسته ساختاری منتسب می‌شود، قاعده تعریف می‌شود.
به طور مثال طراح برای دسته‌ای که نام آن را «موارد نمادک‌دار» در نظر گرفته است قاعده "+icon-content" را تعریف می‌کند تا مطالبی که به این دسته تخصیص می‌یابند از قابلیت انتخاب نمادک برخوردار، ولی فاقد محتوا و صفحه اختصاصی باشند. دیگر خصلت‌های معمول «تصویر image»، «محتوا content»، «کالا product»، «نویسنده author»، «عنوان فرعی caption» است.

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




خلاصه راهنمای آشنایی با نحوه برچسب‌گذاری وب‌سایت موتور

به طور مثال برای اینکه حداکثر 2 مورد از مطالبی که در «دسته1» روی پایگاه داده ذخیره شده است را به تصادف انتخاب کرده و تصویر، پیوند و خلاصه مطلب مربوط به هر کدام را درج کنیم؛ کافی است مشابه تصویر زیر عمل کنیم.

انتخاب تصادفی حداکثر 2 مورد از مطالب دسته1 و درج تصویر، پیوند و خلاصه برای هر یک

موارد سراسری

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

%SITENAME 	نام سایت
%SITEURL	نشانی سایت
%SITELINK	پیوند به سایت
%MTITLE	فراعنوان (meta title) سایت یا صفحه
%MDESCRIPTION توضیح سایت یا صفحه
%MKEYWORDS	کلیدواژه‌های سایت یا صفحه

همچنین موارد زیر قابل شخصی‌سازی هستند.

%DATE% تاریخ میلادی
%PDATE% تاریخ شمسی
%HDATE% تاریخ قمری

مثال:

%PDATE%		چهار‌شنبه ۱۳۹۷/۰۱/۲۹ ۱۳:۰۰
%PDATE(Y/m/d)%		۱۳۹۷/۰۱/۲۹
%HDATE(l d F Y)%		الاربعاء  ١ شعبان ١٤٣٩
%HDATE%		١ شعبان ١٤٣٩

برای تصحیح روز در تقویم قمری می‌توانید از مقدار ویژه Hijri_calendar_correction استفاده کنید مثلاً برای یک روز جلو بردن عبارت را تعیین کنید.

Hijri_calendar_correction=1 

تعریف مقادیر ویژه از طریق بخش «ابزارها» قسمت «تنظیم‌های طراحی» برگه «مقادیر ویژه» در دسترس است.

متن‌ یا نوشته‌ (در پوسته)

موارد متنی این امکان فراهم می‌کند تا به سهولت متن بخشی از پوسته سایت از طریق سامانه مدیریت قابل ویرایش باشد. این متن می‌تواند در هر بخشی از صفحات سایت ظاهر شود. همچنین موارد متنی، علاوه بر پرونده‌های اچ‌تی‌ام‌ال پوشه pages در هر پرونده css یا js که نام آن با custom شروع شود، قابل استفاده است.
مثلاً برای نمونه، پرونده custom.css می‌تواند شامل برخی تنظیمات شود که مدیر سایت به سرعت و سهولت بتواند تغییراتی در سایت اعمال کند. این نوع پرونده‌ها با سردادۀ بدون قابلیت ذخیره نهان یا Cache به مرورگر عرضه می‌شود.

فراخوانی سراسری

%Tشماره متن%

مثال:

%T3%	متن سوم
%T3_%	متن-سوم
%T3@%	پیوند دسته- در صورتی که نوع T3 «دسته» تعریف شده باشد.
%T3#%	شماره دسته- در صورتی که نوع T3 «دسته» تعریف شده باشد.

متن‌ها در سامانه مدیریت

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

T4 | P | نمونه محتوای تصویر

تعریف متن‌ها در مینی وتور

در هریک از ردیف‌های بخش text در پرونده theme.json امکان درج یک متن وجود دارد.
لازم است به ترتیب نام متن، نوع و مقدار پیش‌فرض درج شود. مقدار پیش‌فرض در مینی وتور به منزله محتوای متن، و در هنگام نصب پوسته مورد استفاده قرار می‌گیرد. مثال:

["نمونه متن کد رنگ","C","8080FF"]

توجه:
رعایت ترتیب ردیف‌های موارد متنی لازم است.

مطلب (Post)

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

نشانی وب

صفحه اختصاصی هر مطلب به هر یک از سه صورت زیر قابل دسترس است.

/شناسه مطلب/نام-مطلب/
/شناسه مطلب/
/نام-مطلب/

مثال:

/103/عنوان-نمونه/
/103/
/عنوان-نمونه/

قالب

پیش‌فرض: /pages/post.html
یا پرونده تعیین شده در مشخصات مطلب

فراخوانی در صفحه اختصاصی

i="post"

فراخوانی در تمامی صفحات

i="post/شناسه مطلب"

مثال

i="post/103"

مقادیر سراسری در صفحه اختصاصی:

%post_title	عنوان مطلب
%post_link	پیوند مطلب
%post_category_index	شناسه (اولین)  دسته مطلب 
%post_category_link	پیوند (اولین) دسته
%post_Category	دسته-مطلب
%post_category	دسته مطلب

دسته (Category)

می‌توان تعدادی از مطالب را به یک نام مشترک منتسب کرد. این نام که امکان فراخوانی مطالب با آن فراهم می‌شود، دسته تعریف می‌شود.

دسته‌های ساختاری (Structure)

دسته‌های ساختاری متناسب با قالب و مضمون سایت، توسط طراح پوسته تعریف شده‌اند و قابلیت‌های بیشتری نسبت به دسته‌ها دارد. دسته‌هایی ساختاری اغلب برای بخش‌های خاص از سایت با نام‌هایی مثل «لغزانه صفحه اصلی»، «مطب ثابت پانویس» و... تعیین می‌شود و امکان بازتعریف آن از طریق بخش تنظیمات طراحی فراهم است.
این دسته‌ها قاعده‌پذیر هستند به این معنا که می‌توان مجموعه خصلت‌هایی را به آن‌ها نسبت داد. مثلاً خصلت +product برای یک دسته ساختاری، امکان تعیین قیمت کالا، نام و واحد شمارش، موجودی و... را به مطالب منتسب به آن دسته اضافه می‌کند.
دیگر خصلت‌های معمول «تصویر image»، «محتوا content»، «نمادک icon «نویسنده author»، «عنوان فرعی caption» است. قاعده پیش‌فرض یک دسته ساختاری به صورت زیر می‌باشد.

+image+content-icon-product-author-caption

نشانی وب

/نام-دسته/شماره-صفحه/

مثال:

/دسته-نمونه/
/دسته-نمونه/2/

قالب

 پیش‌فرض: /pages/category.html
 یا مورد تعیین شده در بخش ویرایش‌ دسته‌ها

فراخوانی در صفحه اختصاصی

i="category"

صفحه‌بندی در صفحه اختصاصی

%paging(category)

فراخوانی در تمامی صفحات

دسته‌ها:
	i="شماره دسته"
	i="نام دسته"
	i="نام-دسته"
مثال:
	i="1"
	i="دسته نمونه"
	i="دسته-1"
دسته‌های ساختاری:
i="Sشماره دسته ساختاری" مثال: i="S3"

صفحه‌بندی در تمامی صفحات

%paging(category/مقدار تعیین شده i)

مقادیر سراسری در صفحه اختصاصی

%category_index	شناسه ترتیبی دسته
%category_name	نام دسته
%category_desc	توضیح دسته
%Category_name	نام-دسته
%category_page	شماره صفحه جاری
%category_link	پیوند

فراخوانی سراسری

%Cشماره دسته%

مثال

نام دسته دوم: %C2%
نام-دسته-دوم: %C2_%
پیوند به دسته دوم: %C2@%

تعریف دسته‌ها در سامانه مدیریت

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

برای مثال

S1|دسته ساختاری یک|+icon

تعریف دسته‌ها در مینی وتور

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

توجه:
با تغییر دسته‌بندی‌ها،مطالب نوشته شده سایت حذف نمی‌شوند ولی چون اختصاص دسته‌ها ترتیبی انجام می‌شود، ممکن است دسته‌های منتسب به مطالب تغییر کند.
به کمک تعیین limit، می‌توان صفحه دلخواهی از موارد یک دسته را در هر صفحه از سایت فراخوانی کرد. (به توضیحات limit نگاه کنید.)

فهرست (LIST)

مجموعه چند پیوند کلیک‌پذیر که اغلب به صورت یک منو در بالای صفحات به نمایش درمی‌آید، فهرست تعریف می‌شود.
در یک فهرست، هر پیوند (link) که به داخل، خارج یا جایی در همان صفحه از سایت اشاره می‌کند.
مثال:

 /دسته-نمونه/   که به صفحه «دسته نمونه» باز می‌شود.
 /درباره-ما/     که به مطلب «درباره ما» باز می‌شود.

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

تعریف فهرست‌ها در سامانه مدیریت

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

L2|فهرست‌ پانویس 

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

تعریف فهرست‌ها در مینی وتور

در پرونده theme.json ذیل بخش lists فهرست‌ها یا منوهای نمونه برای سایت تعریف می‌شود.
لازم است در هر ردیف ابتدا نام فهرست و سپس نام پیوند و نشانی آن وارد شود.

فراخوانی فهرست‌ها

در تمامی صفحات به یک شکل صورت می‌گیرد.

<LIST i="شماره ترتیبی دسته شروع از یک" type="dropdown یا simple" activator="a یا li" />

نمایش فهرست شماره یک تو در تو

<LIST i="1" />
<!-- L1 فهرست‌ بالای صفحات -->
<li><a class="active" href="/">صفحه اصلی</a></li>
<li class="dropdown"><a class="dropdown-toggle" href="/دسته-1/" data-toggle="dropdown" >دسته 1</a>
    <ul class="dropdown-menu">
        <li><a href="/دسته-11/" >دسته 11</a></li>
        <li class="dropdown"><a class="dropdown-toggle" href="/دسته-12/" data-toggle="dropdown" >دسته 12</a>
            <ul class="dropdown-menu">
                <li><a href="/دسته-121/" >دسته 121</a></li>
            </ul>
        </li>
    </ul>
</li>
<li class="dropdown"><a class="dropdown-toggle" href="/دسته-12/" data-toggle="dropdown" >دسته 12</a>
<ul class="dropdown-menu"><li><a href="/دسته-121/" >دسته 121</a></li></ul></li><li><a href="/101/">نمونه مطلب</a></li>
<!-- /L1 فهرست‌ بالای صفحات -->

نمایش فهرست شماره یک ساده (بدون نمایش زیر دسته‌ها)

<LIST i="1" type="simple" />
<!-- L1 فهرست‌ بالای صفحات -->
<li><a href="/">صفحه اصلی</a></li>
<li><a class="active" href="/دسته-1/">دسته 1</a></li>
<li><a href="/دسته-12/">دسته 12</a></li>
<li><a href="/101/">نمونه مطلب</a></li>
<!-- /L1 فهرست‌ بالای صفحات -->
<li><a class="active" href="/">صفحه اصلی</a></li>
<LIST i="1" type="simple" activator="li"/>

به طور خودکار به پیوند فعال در فهرست class="active" اختصاص می‌یابد.
مثل

<li class="active"><a href="/">صفحه اصلی</a></li>

برچسب (Tag)

نشانی وب

/tag/نام-برچسب/شماره-صفحه/

مثال:

/tag/برچسب-نمونه/
/tag/برچسب-نمونه/2/

قالب

/pages/tag.html

فراخوانی در صفحه اختصاصی

i="tag"

صفحه‌بندی در صفحه اختصاصی

%paging(tag)

فراخوانی در تمامی صفحات

i="tag/نام-برچسب"

صفحه‌بندی در تمامی صفحات

%paging(tag/نام-برچسب)

مقادیر سراسری در صفحه اختصاصی

%tag_link
%tag_title

جستجو (Search)

نشانی وب url

/?search=عبارت+جستجو&page=شماره صفحه

مثال:

/?search=%D8%B9%D8%A8%D8%A7%D8%B1%D8%AA&page=2
/?search=عبارت
/?search=عبارت&page=2

قالب

/pages/search.html

فراخوانی در صفحه اختصاصی

i="search"

صفحه‌بندی در صفحه اختصاصی

%paging(search)

فراخوانی در تمامی صفحات

i="search/عبارت+جستجو/"
i="search/عبارت جستجو/"
i="search/%D8%B9%D8%A8%D8%A7%D8%B1%D8%AA%20%D8%AC%D8%B3%D8%AA%D8%AC%D9%88/"

مثال

i="search/کلمه"
i="search/%DA%A9%D9%84%D9%85%D9%87/"

صفحه‌بندی در تمامی صفحات

%paging(search/عبارت+جستجو)
%paging(search/عبارت جستجو)
%paging(search/%D8%B9%D8%A8%D8%A7%D8%B1%D8%AA%20%D8%AC%D8%B3%D8%AA%D8%AC%D9%88)

مقادیر سراسری در صفحه اختصاصی

%search_query	عبارت جستجو
%search_page	شماره صفحه جاری
%search_pages	شمار صفحات
%search_finds	تعداد یافته
%search_info	عبارت جستجو+ متن تعاملی search_result_for

موارد (ITEMS)

مواردی از مطالب سایت را مطابق ضابطه تعریف شده انتخاب می‌کند.
ITEMS در تمامی صفحات قابل استفاده است و برای هر صفحه نیز امکان خاصی دارد.

<ITEMS i="شناسه فراخوانی" limit="محدوده" type="نوع" interleave="اضافه‌گذاری"> %متن و نشانه‌ها </ITEMS>

ساده‌ترین استفاده به صورت زیر و برای انتخاب آخرین 10 مطلب منتشر شده است.
در این مثال %index با شماره ردیف پر می‌شود.

<ITEMS>%index</ITEMS>

<!-- LAST POSTS    -->
1
2
3
4
5
6
7
8
9
10
<!-- /LAST POSTS -->

برای انتخاب 2 مورد از آخرین مطالب منتشره در دسته 1 که شناسه یک دارد هر سه روش زیر قابل استفاده است.
در این مثال %title با عنوان مطلب پر می‌شود.

<ITEMS i="1" limit="2">%title</ITEMS>
<ITEMS i="دسته 1" limit="2">%title</ITEMS>
<ITEMS i="دسته-1" limit="2">%title</ITEMS>
<-- CATEGORY /دسته 1  i="1" limit="2"  -->
عنوان نمونه5
عنوان نمونه3
<!-- /CATEGORY /دسته 1  -->

برای نمایش صفحه‌بندی، عبارت مشابه زیر تعریف شده است. به صورتی که محتوای پرانتز باید مطابق مقدار تعیین شده i در اینجا i="1" باشد.

%paging(1)

مثال زیر مطلب شماره 108 انتخاب می‌کند. در این حالت limit ثابت یک و تعریف آن بی‌تأثیر است.

<ITEMS i="post/108" >%id</ITEMS>

<-- POST/108  i="post/108"  -->
108
<!-- /POST/108  -->

<ITEMS i="search/عبارت جستجو" limit="3">%link</ITEMS>

عبارت وارد شده جستجو و حداکثر 3 مورد انتخاب و %link آنها به نمایش در می‌آید.

<-- SEARCH / عبارت جستجو  i="search/عبارت جستجو" limit="3"  -->
<a href="/113/مطلب-13" title="مطلب 13" >مطلب 13</a>
<a href="/117/مطلب-17" title="مطلب 17" >مطلب 17</a>
<!-- /SEARCH / عبارت جستجو  -->

<ITEMS i="tag/برچسب 1" limit="3">%link</ITEMS>

<!-- TAG /برچسب 1  i="tag/برچسب 1" limit="13"  -->
<a href="/100/نمونه-طراحی-سایت" title="نمونه طراحی سایت" >نمونه طراحی سایت</a>
<!-- /TAG /برچسب 1 -->

<ITEMS i="top_comments" limit="2">%comntno</ITEMS>
<!-- Top Comments  i="top_comments" limit="2"  -->
5 دیدگاه
3 دیدگاه
<!-- /Top Comments -->

کلمه دیدگاه به نمایش درآمده در این مثال، یک متن تعاملی است که از طریق تنظیمات پوسته قابل ویرایش است.
برای اینکه تنها عدد نمایش درآید از Comntno به جای comntno استفاده کنید.

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

<ITEMS i="related_posts" limit="10">%title</ITEMS>
نمونه سایت طراحی
نمونه طراحی سایت
طراحی سایت طراحی

<ITEMS i="top_visits" limit="3">%thumb</ITEMS>
<!-- Top Visits  i="top_visits" limit="3"  -->
<img src="/?thumb=images%2Fdemo%2F4.jpg" alt="عنوان6" />
<img src="/?thumb=images%2Fdemo%2F7.jpg" alt="نمونه طراحی سایت" />
<img src="/?thumb=images%2Fdemo%2F9.jpg" alt="طراحی سایت" />
<!-- /Top Visits -->

<ITEMS i="top_visits" limit="3">%title: %visit</ITEMS>

<!-- Top Visits  i="top_visits" limit="3"  -->
طراحی سایت: 21
طراحی سایت: 18
طراحی سایت: 11
<!-- /Top Visits -->

توجه:
موارد زیر فاقد نشانی، قالب و امکان صفحه‌بندی هستند.

دسته ساختاری i="Sشماره  دسته ساختاری"    i="S2"
پربادیدها  i="top_visits"
پربحث‌ترین‌ها    i="top_comments"
مطالب مرتبط   i="related_posts"
همه مطالب   i="all_posts"   i="" یا i="0" یا i="all_posts" یا بدون تعریف
order="new" پیش‌فرض
ترتیب نمایش از تازه‌ترین مطلب
order="old"
ترتیب نمایش ازقدیمی‌ترین مطلب 

order="random"
ترتیب تصادفی مطالب

توجه:
ملاک زمان مطلب، زمان ایجاد مطلب است و نه زمان ویرایش.

نوع caption
در صورتی که موردی در نتیجه ITEMS یافت نشود، نمایش داده نمی‌شود و در صورت موجود بودن تنها یک بار به نمایش در می‌آید.
مثال:

<ITEMS i="5" type="caption">متن توضیح در صورت بودن موارد</ITEMS>

تنها زمانی که دسته 5 تعریف شده و موردی برای نتیجه نمایش وجود داشته باشد، عبارت «متن توضیح در صورت بودن موارد» به نمایش در‌ می‌آید.

اضافه‌گذاری (Interleave)

به کمک تنظیم Interleave، امکان افزودن تعداد متن دلخواه در ردیف دلخواه مهیا می‌شود.
مثال:

<ITEMS i="" limit="10" interleave="right;left;center" >
    class="%interleave1%interleave2%interleave3"
</ITEMS>
<!-- LAST POSTS   i="" limit="10" interleave="right;left;center"   -->
    class="right"
    class="left"
    class="center"
    class="right"
    class="left"
    class="center"
    class="right"
    class="left"
    class="center"
    class="right"
<!-- /LAST POSTS -->

 <ITEMS i="" limit="10" interleave="right,2;left,3" >
    %index %interleave1 %interleave2 %id
</ITEMS>

<!-- LAST POSTS   i="" limit="10" interleave="right,2;left,3"   -->
    1   214
    2 right  213
    3  left 212
    4 right  112
    5   100
    6 right left 103
    7   106
    8 right  107
    9  left 108
    10 right  109
<!-- /LAST POSTS -->
 <ITEMS i="" limit="10" interleave="right;left" >
    %index %interleave1 %interleave2 %id
</ITEMS>

<!-- LAST POSTS   i="" limit="10" interleave="right;left"   -->
    1 right  214
    2  left 213
    3 right  212
    4  left 112
    5 right  100
    6  left 103
    7 right  106
    8  left 107
    9 right  108
    10  left 109
<!-- /LAST POSTS -->
<ITEMS i="" limit="10" interleave="right,2" >
    %index %interleave1 %id
</ITEMS>

<!-- LAST POSTS   i="" limit="10" interleave="right,2"   -->
    1  214
    2 right 213
    3  212
    4 right 112
    5  100
    6 right 103
    7  106
    8 right 107
    9  108
    10 right 109
<!-- /LAST POSTS -->
<ITEMS i="" limit="10" interleave="right,2" >
    %index ‌  
</ITEMS>


<!-- LAST POSTS   i="" limit="10" interleave="right,2"   -->
    1 ‌  
    2 ‌  right
    3 ‌  
    4 ‌  right
    5 ‌  
    6 ‌  right
    7 ‌  
    8 ‌  right
    9 ‌  
    10 ‌  right
<!-- /LAST POSTS -->
<ITEMS i="" limit="10" interleave="right;left;center,4" >
    class="%interleave1%interleave2 %interleave3"
</ITEMS>
<!-- LAST POSTS   i="" limit="10" interleave="right;left;center,4"   -->
    class="right "
    class="left "
    class=" "
    class="right center"
    class="left "
    class=" "
    class="right "
    class="left center"
    class=" "
    class="right "
<!-- /LAST POSTS -->


<ITEMS i="" limit="10" interleave="right,1;left,3;center,2" >
    class="%interleave1%interleave2 %interleave3"
</ITEMS>
<!-- LAST POSTS   i="" limit="10" interleave="right,1;left,3;center,2"   -->
    class="right "
    class=" center"
    class="left "
    class="right center"
    class=" "
    class="left center"
    class="right "
    class=" center"
    class="left "
    class="right center"
<!-- /LAST POSTS -->

توجه:
برای خاموش کردن توضیحات قبل و بعد، می‌بایست مقدار help به صورت help="off" تنظیم شود.
مثلاً:

|<ITEMS i="1" limit="15" interleave="" help="off" >%id</ITEMS>|
|100108116124132140148156164172180188196|

تعیین محدوده برای موارد

9 مورد شروع از دومین مورد (مورد 2 تا مورد 11)

limit="2,9"

9 مورد اول

limit=",9"

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

limit="2,"

اولین تا پنج مورد (5 مورد)

limit="5"

توجه:
موارد زیر معادل هستند.

limit="" ~ limit="10" ~  limit=",10" ~  limit="1,10"

مثال:

<ITEMS i="" limit="3,5" order="old" >
    %index  %id
</ITEMS>

<!-- LAST POSTS   i="" limit="3,5" order="old"   -->
    1   103
    2   104
    3   105
    4   106
    5   107
<!-- /LAST POSTS -->
<ITEMS i="1" limit="3,1" order="old" >
    %index  %id
</ITEMS>
<!-- CATEGORY /دسته اول   i="1" limit="3,1" order="old"   -->
    1   112
<!-- /CATEGORY /دسته اول -->
<ITEMS i="2"  type="caption" >
    Caption text where Items not empty  
</ITEMS>

<!-- CATEGORY /دسته دوم   i="2"  type="caption"   -->
    Caption text where Items not empty  
<!-- /CATEGORY /دسته دوم -->
<ITEMS i="2" limit="2">
    Caption text where Items not empty  
</ITEMS>
<!-- CATEGORY /دسته دوم   i="2" limit="3"  -->
    Caption text where Items not empty  
    Caption text where Items not empty  
    Caption text where Items not empty  
<!-- /CATEGORY /دسته دوم -->

موارد قابل استفاده در ITEMS

%Index  ردیف از صفر
%index  ردیف
%id شناسه مطلب مثل 105
%title  عنوان مطلب
%excerpt    خلاصه مطلب
%visit  شمار بازدید
%caption    عنوان فرعی- در صورت تعریف خصلت +caption در دسته ساختاری منسوب
%author  نویسنده- در صورت تعریف خصلت +author در دسته ساختاری منسوب
%Icon    نمادک - تنها نام مثل fa fa-flask
%icon   نمادک  مثل <i class="fa fa-flask"></i>
%content    محتوای مطلب
%class_active    برگردان class="ative" برای مورد جاری
%active  برگردان ative برای مورد جاری
%img    تصویر شاخص مطلب     مثل <img src="/images/demo/9.jpg" alt="نمونه مطلب 8" />
%thumb  تصویر بندانگشتی از تصویر شاخص مطلب مثل <img src="/?thumb=images%2Fdemo%2F9.jpg" alt="نمونه مطلب 8" />
%mthumb تصویر بندانگشتی بزرگ از تصویر شاخص مطلب مثل <img src="/?thumb=images%2Fdemo%2F9.jpg&s=m" alt="نمونه مطلب 8" /> 
%tthumb تصویر بندانگشتی کوچک از تصویر شاخص مطلب مثل <img src="/?thumb=images%2Fdemo%2F9.jpg&s=t" alt="نمونه مطلب 8" />
%src    منبع تصویر   مثل /images/demo/9.jpg
%tsrc   منبع تصویر بندانگشتی    مثل /?thumb=images%2Fdemo%2F9.jpg
%href   نشانی مطلب مثل /105/نمونه-مطلب-8   
%link   پیوند مطلب مثل <a href="/105/نمونه-مطلب-8" title="نمونه مطلب 8" >نمونه مطلب 8</a>
%date    تاریخ ایجاد مطلب  مثل ۱۳۹۶/۱۰/۱۱
%time    زمان ایجاد مطلب    مثل ۱۱:۱۰
%day     روز هفته ایجاد مطلب مثل دو‌شنبه  
%sdate   تاریخ متنی مثل ۱۱ دی ۹۶   
%htime   زمان انسانی       مثل 3 ماه پیش  
%ctg_link   پیوند دسته‌بندی اصلی 
%Category   نام-دسته‌بندی-مطلب 
%category   نام دسته‌بندی مطلب 
%ctgs_links پیوندهای دسته‌بندی مطلب
%Categories نام-دسته‌بندی‌های-مطلب    
%categories نام دسته‌بندی‌های مطلب
%taglinks   پیوند برچسب‌ها
%tags   برچسب‌ها
%comntno     شمار نظرات مثل 4 دیدگاه   
%Comntno     شمار عددی نظرات        مثل 4    

در صورت تعریف خصلت +product در دسته ساختاری منسوب

%price   بهای کالا مثل:  13,000
%Price   بهای عددی کالا مثل: 13000   
%total  موجودی کالا   
%Total  موجودی عددی   
%unit   واحد کالا

فرم دریافت دیدگاه

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

 <div id="comment_form">
        <p class="%comment.impact">%comment.result</p>
        <form id="myForm" action="#comment_form" method="POST" >
            <input  type="text" name="comment[name]" placeholder="نام شما" value="%comment[name]">
            <input  type="email" name="comment[email]" placeholder="e-mail@example.com" value="%comment[email]" />
            <textarea  name="comment[message]" rows="4" placeholder="متن پیام" required >%comment[message]</textarea>
            <button type="submit"> ثبت پیام</button>
        </form>
    </div>

 
  
  <script type="text/javascript">
    $('#myForm').submit(function(e){
        e.preventDefault();
        $.ajax({
               type: 'POST',           
               data: $("#myForm").serialize(),
               dataType: 'json',
               success: function(data){
                   if(data['impact']=='success'){
                        alert(data['result']);
                   }else if(data['impact']=='error'){
                        alert(data['result']);
                   }
               }
        });  
    });  
  </script>
  

در مثال زیر با توجه به اینکه type برابر caption تعریف شده است، محتوای درونی تنها زمانی که دیدگاه وجود داشته باشد، به نمایش در خواهد آمد.

 
<COMMENTS type="caption">
    نظرات
</COMMENTS>
 
 

در مثال زیر دیدگاه‌های ذیل یک مطلب به نمایش در خواهد آمد. همان طور که در توضیح فرم دیدگاه اشاره شد، نام و تعداد متغییرهای این بخش دلخواه و هم نام با فرم دریافت خواهد بود. تنها message باید الزماً در فرم به عنوان متن پیام، مورد استفاده قرار گیرد.

 
 <COMMENTS>
    %name %htime %message
</COMMENTS>
 

موارد قابل استفاده در COMMENTS

 
%id شناسه دیدگاه
%index  ردیف دیدگاه
%Index  ردیف دیدگاه از صفر
%approved       وضعیت تأیید دیدگاه
%date   تاریخ دریافت دیدگاه
%htime  زمان انسانی دریافت دیدگاه
%time   زمان دریافت دیدگاه
%message    متن پیام
 

فرم تماس

<div id="contact_form">
    <p class="%contact.impact">%contact.result</p>
    <form action="#contact_form" method="POST"> 
        <input type="text" name="contact[author]" placeholder="نام شما" value="%contact[author]" required />  
        <input  dir="ltr"  type="email" name="contact[email]"  placeholder="email" value="%contact[email]" required />  
        <textarea name="contact[message]" rows="5"  placeholder="متن ییام" >%contact[message]</textarea> 
        <button type="submit" >ارسال</button>
    </form>     
</div>

توجه کنید که نام و تعداد ردیف‌های فرم، دلخواه است؛ ولی ارسال باید به صورت یک آرایه با نام contact و به صورت POST انجام شود.
در حالت برگشت موفق %contact.impact برابر success و %contact.result به مقدار contact_msg_sent خواهد بود.
در حالت خطا نیز %contact.impact برابر error و %contact.result به مقدار contact_msg_failed مبدل می‌شود. همچنین مقدار تمام موارد ارسالی، با همان نام، برگشت داده می‌شود.
مقدار impact امکان مناسبی برای استفاده در css یا جاوااسکریپت است. contact_msg_sent و contact_msg_failed متن تعاملی تعریف شده‌اند و تعیین متن دلخواه برای آنها از طریق سامانه کنترل فراهم است.
در حالتی که ارسالی انجام نشده است نیز %contact.impact برابر none و result رشته بدون مقدار خواهد بود.

impact: none,error,success
result: contact_msg_sent,contact_msg_failed

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

ارسال فرم از طریق Ajax

در این صورت مقادیر impact و result، در قالب JSON بازگشت داده می‌شوند.

برای مثال:

<form id="myForm" action="/" method="post">
    <input type="text" name="contact[author]" placeholder="نام شما" required>
    <input type="email" name="contact[email]" placeholder="email" required>
    <textarea name="contact[message]" placeholder="متن ییام" required></textarea>
    <input type="submit" value="ارسال" />
 </form>
 
  
  <script type="text/javascript">
  $('#myForm').submit(function(e){
    e.preventDefault();
    $.ajax({
           type: 'POST',           
           data: $("#myForm").serialize(),
           dataType: 'json',
           success: function(data){
               if(data['impact']=='success'){
                    alert(data['result']);
               }else if(data['impact']=='error'){
                    alert(data['result']);
               }
           }
    });    
});
</script>
  
  
  

ایجاد فرم سفارشی

برای دریافت اطلاعات از کاربر سایت، مثلاً فرم ثبت نام خبرنامه یا نظر سنجی و... می‌توانید یک فرم دلخواه تنظیم کنید.
فرم دلخواه حالت کلی و مشابه فرم تماس است و در هر صفحه‌ای از سایت قابل استفاده است.
نام فرم، پیام موفق، پیام خطا را از طریق برگه «مقادیر ویژه» تعبیه شده در قسمت «تنظیم‌های پوسته» تعریف می‌شود. در صورت تمایل به ایمیل شدن فرم دریافتی در سایت به ایمیل دلخواه می‌توانید mailto را مقدار‌دهی کنید.
برای ثبت در یک پرونده متنی در پوشه logs نیز تعیین log=on توصیه می‌شود.
لازم به ذکر است در صورتی که ارسال با ایمیل تعیین نشود، الزاماً ثبت متنی فعال خواهد بود.
همچنین تعریف چندین فرم نیز با نام آنها و با ویرگول مثل forms =form1,form2,form3 انجام می‌شود.
همچنین امکان استفاده از Ajax نیز مشابه فرم تماس فراهم است و result و impact در پاسخ در قالب JSON بازگشت داده می‌شود.

مثال زیر یک فرم سفارشی با نام register را نشان می‌دهد.

forms = register
forms.register.success = ثبت نام شما با موفقیت انجام شد.
forms.register.error = خطا در ثبت نام
forms.register.mailto=aaa@bbbb.ccc
forms.register.log=on
 
 
    <p class="%register.impact">%register.result</p>
    <form method="POST">    
        نام: <input type="text" name="register[name]" value="%register[name]" required />  
        email:<input  dir="ltr"  type="email" name="register[email]" value="%register[email]" required />   
        <button type="submit" >ارسال</button>
    </form>
 

سبد خرید

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

cart.html

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

checkout.html

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

receipt.html

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

مثال‌هایی برای آشنایی با نحوه عملکرد سبد خرید

توجه: نوشته‌ای که شناسه آن به سبد ارسال می‌شود، باید عضو یک دسته ساختاری با قاعده +product باشد. یعنی باید کالا باشد. در غیر این صورت محتوای سبد تغییر نخواهد کرد.

 
نمایش سبد خرید جاری
/?cart

ایجاد یک سبد خرید محتوی یک واحد از کالا با شناسه 105 
/?cart=105

افزودن یک واحد کالای با شناسه 105 به سبد خرید جاری
/?cart=105&do=add



ایجاد یک سبد خرید محتوی یک واحد از کالا با شناسه 105 و یک واحد از کالا با شناسه101
/?cart=105,101


ایجاد یک سبد خرید محتوی یک واحد از کالا با شناسه 105 و 3 واحد از کالا با شناسه101
/?cart=105-1,101-3



افزودن 3 واحد کالای با شناسه 105 و 3 واحد از کالا با شناسه101 به سبد خرید جاری
/?cart=105-3,101-2&do=add


به روز کردن محتوای سبد خرید جاری بدون نمایش صفحه مربوط
برای انجام موفق عبارت OK برگشت داده خواهد  شد.
/?cart=105-3,101-2&do=update

ایجاد یک سبد خرید محتوی یک واحد از کالا با شناسه 105 
 و همزمان نمایش صفحه دریافت اطلاعات پرداخت (بدون نمایش صفحه مربوط به سبد خرید)
/?cart=105&do=checkout

نمایش صفحه دریافت اطلاعات پرداخت (نهایی کردن خرید)
/?cart=checkout


صفحه رسید پرداخت
/receipt/

 

سبد خرید

 
<CART>
    <tr id="wm_invoice_prod_%index" data="%pid">
        <td>%link</td>
        <td>%unit_price</td>
        <td>%quantity</td>
        <td>%unit</td>
        <td>%subtotal</td>
    </tr>
</CART>
قابل پرداخت:  %grand_total  تومان

موارد قابل استفاده در سبد خرید

%Index  ردیف از صفر
%index  ردیف
%pid    شناسه کالا
%link   پیوند کالا
%unit_price بهای واحد کالا
%unit   واحد شمارش کالا مثل دستگاه
%quantity   تعداد سفارش از کالا
%subtotal   مبلغ مجموع برای این کالا (قیمت × تعداد)
%min    حداقل مجاز خرید از کالا
%max    حداکثر مجاز خرید از کالا

%grand_total    مجموع کل قابل پرداخت


مقادیر بازگشتی، مشابه فرم سفارشی:
%info   توضیح خرید
%impact تأثیر یا نتیجه خرید
%download_links پیوند به پرونده فروخته شده