<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss">
<channel>
<title>آموزشی - DlePlugin — قالب و افزونه حرفه‌ای دیتالایف انجین</title>
<link>https://dleplugin.ir/</link>
<language>fa</language><item>
<title>ساختار قالب دیتالایف انجین: راهنمای کامل فایل‌های TPL</title>
<link>https://dleplugin.ir/blog/blog-tutorials/26-dle-template-structure-guide.html</link>
<pdalink>https://dleplugin.ir/blog/blog-tutorials/26-dle-template-structure-guide.html</pdalink>
<guid>https://dleplugin.ir/blog/blog-tutorials/26-dle-template-structure-guide.html</guid>
<pubDate>08:29:57 +0330 چهارشنبه، 28 مرداد 1405</pubDate>
<category>index</category>

<content:encoded><![CDATA[<p>قالب دیتالایف انجین موتور قالب سبکی دارد: نه حلقه‌ای در کار است و نه شرط تودرتو. هر فایل <code>.tpl</code> یک قطعه HTML است که موتور، تگ‌های داخلش را با داده جایگزین می‌کند. همین سادگی باعث می‌شود بیشتر مشکلات قالب‌نویسی از یک چیز بیاید: <strong>ندانستن اینکه هر فایل چند بار رندر می‌شود.</strong></p> <h2>نقشه‌ی فایل‌ها</h2> <p>یک قالب کامل داخل <code>templates/نام-قالب/</code> قرار می‌گیرد. فایل‌های اصلی و محل رندرشان:</p> <table> <thead> <tr><th>فایل</th><th>کجا رندر می‌شود</th><th>چند بار</th></tr> </thead> <tbody> <tr><td><code>main.tpl</code></td><td>پوسته‌ی کل صفحه — از <code>&lt;html&gt;</code> تا <code>&lt;/html&gt;</code></td><td>یک بار</td></tr> <tr><td><code>shortstory.tpl</code></td><td>کارت مطلب در فهرست‌ها (صفحه اصلی، دسته، جستجو، آرشیو)</td><td>به ازای هر مطلب</td></tr> <tr><td><code>fullstory.tpl</code></td><td>صفحه‌ی کامل یک مطلب</td><td>یک بار</td></tr> <tr><td><code>relatednews.tpl</code></td><td>یک آیتم از فهرست «مطالب مرتبط»</td><td><strong>به ازای هر آیتم</strong></td></tr> <tr><td><code>comments.tpl</code></td><td>یک نظر</td><td>به ازای هر نظر</td></tr> <tr><td><code>addcomments.tpl</code></td><td>فرم ثبت نظر</td><td>یک بار</td></tr> <tr><td><code>static.tpl</code></td><td>صفحات ثابت</td><td>یک بار</td></tr> <tr><td><code>modules/*.tpl</code></td><td>هرجا با <code>{include}</code> صدا زده شود</td><td>به تعداد صدا زدن</td></tr> </tbody> </table> <p>ستون آخر مهم‌ترین ستون این جدول است. به آن برمی‌گردیم.</p> <h2>main.tpl — اسکلت صفحه</h2> <p>این تنها فایلی است که تگ‌های <code>&lt;head&gt;</code> و ساختار کلی صفحه در آن نوشته می‌شود. تگ‌های کلیدی‌اش:</p> <pre><code>{headers} متاتگ‌ها، عنوان صفحه و لینک‌های canonical که خود دیتالایف می‌سازد https://dleplugin.ir/templates/DLEMarket مسیر پوشه‌ی قالب — همیشه به‌جای مسیر دستی از این استفاده کنید {content} خروجی اصلی هر صفحه (فهرست مطالب، مطلب کامل، فرم‌ها و …) {speedbar} مسیر راهنما (breadcrumb) {navigation} صفحه‌بندی {info} پیام‌های سیستمی {login} بلوک ورود / پروفایل کاربر {AJAX} اسکریپت‌های لازم دیتالایف — بدون آن نظرات و سبد خرید کار نمی‌کنند</code></pre> <p><code>{AJAX}</code> را همیشه درست پیش از <code>&lt;/body&gt;</code> بگذارید. اگر حذفش کنید، هیچ خطایی نمی‌بینید؛ فقط بخش‌های آژاکسی بی‌صدا از کار می‌افتند.</p> <h3>گنجاندن ماژول‌ها</h3> <pre><code>{include file="modules/topmenu.tpl"} {include file="https://dleplugin.ir/templates/DLEMarket/css/styles.css"}</code></pre> <p>همین تگ برای CSS و JS هم کار می‌کند و محتوا را به‌صورت درون‌خطی وارد نمی‌کند، بلکه لینک استاندارد می‌سازد و پارامتر نسخه (<code>cache_id</code>) را خودش اضافه می‌کند. این یعنی اگر CSS را دستی با <code>&lt;link&gt;</code> اضافه کنید، از مکانیزم نسخه‌گذاری خارج می‌شوید و مرورگر کاربر تا مدت‌ها نسخه‌ی قدیمی را نشان می‌دهد.</p> <h2>شرط‌های قالب</h2> <p>دیتالایف چند شرط ساده در اختیار می‌گذارد که در همه‌ی فایل‌های TPL کار می‌کنند:</p> <pre><code>[available=main] فقط در صفحه‌ی اصلی [/available] [not-available=showfull] همه‌جا به‌جز صفحه‌ی مطلب کامل [/not-available] [group=5] فقط برای گروه کاربری ۵ (مهمان) [/group] [not-group=5] برای همه به‌جز مهمان‌ها [/not-group]</code></pre> <p>نام بخش‌ها همان مقدار پارامتر <code>do</code> در آدرس است: <code>main</code>، <code>showfull</code>، <code>cat</code>، <code>search</code>، <code>static</code>، <code>register</code>، <code>feedback</code> و مانند آن. چند بخش را با <code>|</code> جدا کنید:</p> <pre><code>[available=search|feedback|static] &lt;!-- این صفحه‌ها نوار کناری ندارند --&gt; [/available]</code></pre> <p>یک نکته که وقت زیادی از قالب‌نویس‌ها می‌گیرد: این شرط‌ها <strong>تودرتو کار نمی‌کنند</strong>. اگر منطق پیچیده لازم دارید، آن را به دو بلوک جدا بشکنید یا در PHP حلش کنید.</p> <h2>اشتباهی که تقریباً همه یک بار مرتکب می‌شوند</h2> <p>به ستون «چند بار» در جدول بالا برگردیم. <code>relatednews.tpl</code> برای <em>هر آیتم</em> رندر می‌شود و خروجی همه‌ی آیتم‌ها به هم چسبانده شده و جای <code>{related-news}</code> در <code>fullstory.tpl</code> می‌نشیند.</p> <p>حالا فرض کنید <code>relatednews.tpl</code> را این‌طور نوشته باشید:</p> <pre><code>&lt;!-- ❌ غلط --&gt; &lt;div class="related"&gt; &lt;h3&gt;مطالب مرتبط&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="{link}"&gt;{title}&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/div&gt;</code></pre> <p>نتیجه: اگر پنج مطلب مرتبط داشته باشید، پنج کادر و پنج بار عنوان «مطالب مرتبط» می‌بینید. کاربر فکر می‌کند سایت خراب است و گوگل هم پنج <code>h3</code> تکراری در یک صفحه می‌بیند.</p> <p>شکل درست این است که فایل آیتم فقط آیتم باشد و کادر به <code>fullstory.tpl</code> منتقل شود:</p> <pre><code>&lt;!-- ✅ relatednews.tpl --&gt; &lt;li&gt;&lt;a href="{link}"&gt;&lt;span class="cat"&gt;{category}&lt;/span&gt;{title limit="90"}&lt;/a&gt;&lt;/li&gt;</code></pre> <pre><code>&lt;!-- ✅ fullstory.tpl --&gt; [related-news] &lt;div class="related"&gt; &lt;h3&gt;مطالب مرتبط&lt;/h3&gt; &lt;ul&gt;{related-news}&lt;/ul&gt; &lt;/div&gt; [/related-news]</code></pre> <p>شرط <code>[related-news]…[/related-news]</code> کادر را وقتی هیچ مطلب مرتبطی وجود ندارد کاملاً حذف می‌کند — وگرنه یک کادر خالی با عنوان روی صفحه می‌ماند.</p> <p>همین الگو برای <code>comments.tpl</code> هم برقرار است: هر نظر یک بار رندر می‌شود، پس عنوان «نظرات» و کادر بیرونی باید در <code>fullstory.tpl</code> باشد، نه داخل فایل نظر.</p> <h2>تگ‌های محدودکننده‌ی طول</h2> <p>برای کوتاه کردن متن در کارت‌ها از پارامتر <code>limit</code> استفاده کنید. دیتالایف تگ‌های HTML را قبل از برش تمیز می‌کند، پس خطر بسته‌نشدن تگ ندارید:</p> <pre><code>{short-story limit="200"} {title limit="90"} {text limit="150"}</code></pre> <p class="xlink">اگر قالبی که می‌سازید فارسی است، پیش از دست‌بردن در CSS یک بار <a href="/blog/blog-tutorials/29-dle-rtl-theme-guide.html">هفت تله‌ی راست‌به‌چپ‌سازی قالب</a> را ببینید؛ چند مورد از آن‌ها درست در همین فایل‌ها اتفاق می‌افتند.</p> <h2>تصویر شاخص</h2> <p>دیتالایف تصویر جداگانه‌ای برای «تصویر شاخص» ندارد؛ به‌جایش تصاویر داخل متن را می‌شمارد:</p> <pre><code>{image-1} آدرس اولین تصویر متن {image-2} دومین تصویر [image-1] … [/image-1] اگر تصویر اول وجود داشت [not-image-1] … [/not-image-1] اگر نداشت</code></pre> <p>پس اگر می‌خواهید کارت‌های فهرست همیشه تصویر داشته باشند، عادت کنید اولین عنصر خلاصه‌ی هر مطلب یک تصویر باشد. در غیر این صورت با <code>[not-image-1]</code> یک تصویر پیش‌فرض بگذارید تا شبکه‌ی کارت‌ها به هم نریزد.</p> <p class="xlink">ساختار درست فایل‌ها نیمی از کار است؛ نیمه‌ی دیگر این است که همین ساختار سریع رندر شود — <a href="/blog/blog-tutorials/28-dle-core-web-vitals.html">بهینه‌سازی Core Web Vitals در قالب دیتالایف</a>.</p> <h2>چند قاعده‌ی عملی</h2> <ul> <li>هیچ‌وقت مسیر قالب را دستی ننویسید؛ همیشه <code>https://dleplugin.ir/templates/DLEMarket</code>. اگر کاربر قالب را در پوشه‌ای دیگر کپی کند، مسیرهای دستی می‌شکنند.</li> <li>ماژول‌های تکراری (هدر، فوتر، منو، نوار کناری) را در <code>modules/</code> جدا کنید. تکرار مارک‌آپ در چند فایل TPL یعنی هر تغییر باید چند جا اعمال شود.</li> <li>بعد از هر تغییر در CSS یا JS، مقدار <code>cache_id</code> را در <code>engine/data/config.php</code> عوض کنید یا از پنل مدیریت کش را پاک کنید؛ وگرنه مرورگر نسخه‌ی قدیمی را نگه می‌دارد.</li> <li>پیش از تحویل قالب، صفحه‌ی جستجو، صفحه‌ی ۴۰۴ و صفحه‌ی خطای دسترسی را هم ببینید. این سه صفحه معمولاً تا اولین بازدید واقعی کاربر دیده نمی‌شوند.</li> </ul> <h2>جمع‌بندی</h2> <p>اگر فقط یک چیز از این مطلب نگه دارید، همان ستون «چند بار» جدول اول باشد. تفاوت یک قالب تمیز با قالبی که مدام سرهم‌بندی می‌شود، در همین است که هر مارک‌آپ در سطح درستی از ساختار قرار گرفته باشد: کادر بیرونی در فایلی که یک بار رندر می‌شود، و آیتم در فایلی که به تعداد داده‌ها تکرار می‌شود.</p> <div class="xread"><b>بیشتر بخوانید</b><ul> <li><a href="/blog/blog-tutorials/29-dle-rtl-theme-guide.html">راست‌به‌چپ‌سازی قالب دیتالایف: هفت تله‌ای که کار را خراب می‌کند</a></li> <li><a href="/blog/blog-tutorials/28-dle-core-web-vitals.html">بهینه‌سازی Core Web Vitals در قالب دیتالایف: LCP، CLS و INP</a></li> <li><a href="/blog/blog-tutorials/35-why-datalife-engine-vs-wordpress.html">چرا دیتالایف انجین؟ مقایسه‌ی صادقانه با وردپرس و بقیه‌ی CMSها</a></li> </ul></div>]]></content:encoded>
</item><item>
<title>چرا دیتالایف انجین؟ مقایسه‌ی صادقانه با وردپرس و بقیه‌ی CMSها</title>
<link>https://dleplugin.ir/blog/blog-tutorials/35-why-datalife-engine-vs-wordpress.html</link>
<pdalink>https://dleplugin.ir/blog/blog-tutorials/35-why-datalife-engine-vs-wordpress.html</pdalink>
<guid>https://dleplugin.ir/blog/blog-tutorials/35-why-datalife-engine-vs-wordpress.html</guid>
<pubDate>13:41:01 +0330 سه شنبه، 27 مرداد 1405</pubDate>
<category>index</category>

<content:encoded><![CDATA[<p>هر بار که کسی می‌خواهد یک سایت خبری یا محتوایی راه بیندازد، اولین پیشنهادی که می‌شنود وردپرس است. این پیشنهاد اشتباه نیست — وردپرس چیزی حدود چهل درصد وب را می‌گرداند و اکوسیستمش بی‌رقیب است. اما «پرکاربردترین» همیشه به معنی «مناسب‌ترین» نیست.</p> <p>دیتالایف انجین از ابتدا برای یک کار مشخص ساخته شد: <strong>سایت‌های محتوامحور با ترافیک بالا</strong>. این تمرکز، هم بزرگ‌ترین برگ برنده‌اش است و هم بزرگ‌ترین محدودیتش. در ادامه هر دو را بدون تعارف بررسی می‌کنیم.</p> <h2>۱. سرعت و مصرف منابع</h2> <p>مهم‌ترین تفاوت اینجاست. وردپرس یک هسته‌ی عمومی است که با افزونه به شکل دلخواه درمی‌آید؛ هر افزونه یعنی چند کوئری دیتابیس و چند فایل PHP بیشتر در هر بار بارگذاری صفحه. یک سایت خبری معمولی وردپرسی، بعد از نصب افزونه‌های سئو، کش، امنیت، گالری و فرم تماس، به‌راحتی به بیش از پنجاه کوئری در هر صفحه می‌رسد.</p> <p>دیتالایف انجین همان قابلیت‌ها را در هسته دارد: دسته‌بندی چندسطحی، فیلد اضافه، نظرات درختی، امتیازدهی، پیام خصوصی، گروه‌های کاربری، جستجوی داخلی، نقشه‌ی سایت و RSS. چون همه‌ی این‌ها یک‌جا نوشته شده‌اند، تعداد کوئری‌ها و فایل‌های بارگذاری‌شده در هر درخواست به‌مراتب کمتر است.</p> <p>به این اضافه کنید سیستم کش چندلایه‌ای که در خود هسته تعبیه شده و بدون هیچ افزونه‌ی اضافه‌ای کار می‌کند. نتیجه‌ی عملی: سایتی که روی وردپرس به سرور اختصاصی نیاز پیدا می‌کند، معمولاً روی دیتالایف با یک هاست اشتراکی خوب یا یک VPS ارزان هم می‌چرخد.</p> <h3>یعنی وردپرس کند است؟</h3> <p>نه لزوماً. وردپرسِ درست تنظیم‌شده با کش کامل صفحه، CDN و افزونه‌های کم هم سریع می‌شود. حرف این است که در وردپرس سرعت چیزی است که باید <em>ساخته شود</em>؛ در دیتالایف چیزی است که <em>پیش‌فرض</em> است.</p> <p class="xlink">سریع‌بودنِ پیش‌فرض به این معنا نیست که کاری لازم نیست؛ <a href="/blog/blog-tutorials/28-dle-core-web-vitals.html">راهنمای Core Web Vitals</a> نشان می‌دهد باقی راه چیست.</p> <h2>۲. امنیت و سطح حمله</h2> <p>آمار سال‌های اخیر یک الگوی روشن دارد: اکثریت قاطع نفوذها به سایت‌های وردپرسی از خود هسته نمی‌آید، بلکه از <strong>افزونه‌ها و قالب‌های شخص ثالث</strong> می‌آید. هر افزونه‌ای که نصب می‌کنید یک نویسنده‌ی دیگر، یک چرخه‌ی بروزرسانی دیگر و یک احتمال آسیب‌پذیری دیگر به سایت شما اضافه می‌کند.</p> <p>در دیتالایف انجین، چون بخش بزرگی از نیازها در هسته پاسخ داده می‌شود، تعداد کدهای شخص ثالث روی سایت به‌طور طبیعی کمتر است. هسته هم تجاری و بسته است و توسط یک تیم مشخص نگهداری و بروزرسانی می‌شود.</p> <p>نکته‌ی منصفانه: بسته‌بودن کد به‌خودی‌خود امنیت نمی‌آورد. مزیت واقعی، «کمتر بودن قطعات» است، نه پنهان بودن کد.</p> <h2>۳. موتور قالب</h2> <p>قالب دیتالایف HTML ساده است به‌علاوه‌ی چند تگ مثل <code>{title}</code> و <code>[category]</code>. هیچ PHP‌ای داخل قالب نوشته نمی‌شود.</p> <p>این یعنی یک طراح فرانت‌اند بدون دانستن PHP می‌تواند کل ظاهر سایت را بسازد، و یعنی خطای یک قالب هرگز به یک اجرای کد ناخواسته تبدیل نمی‌شود. در مقابل، قالب‌های وردپرس PHP کامل‌اند: قدرت بیشتر، ریسک بیشتر.</p> <p class="xlink">موتور قالب دیتالایف را در <a href="/blog/blog-tutorials/26-dle-template-structure-guide.html">راهنمای کامل فایل‌های TPL</a> به‌تفصیل باز کرده‌ایم.</p> <h2>۴. آنچه در هسته آماده است</h2> <table> <thead> <tr><th>قابلیت</th><th>دیتالایف انجین</th><th>وردپرس</th></tr> </thead> <tbody> <tr><td>سیستم کش</td><td>در هسته</td><td>افزونه</td></tr> <tr><td>نظرات درختی با امتیاز و گزارش تخلف</td><td>در هسته</td><td>افزونه</td></tr> <tr><td>گروه‌های کاربری با دسترسی تفکیکی</td><td>در هسته</td><td>افزونه</td></tr> <tr><td>پیام خصوصی بین کاربران</td><td>در هسته</td><td>افزونه</td></tr> <tr><td>فیلدهای اضافه برای مطلب</td><td>در هسته</td><td>افزونه</td></tr> <tr><td>نقشه‌ی سایت و متاتگ</td><td>در هسته</td><td>افزونه</td></tr> <tr><td>واترمارک و تغییر اندازه‌ی خودکار تصویر</td><td>در هسته</td><td>افزونه</td></tr> <tr><td>مطالب مرتبط و برچسب</td><td>در هسته</td><td>افزونه</td></tr> <tr><td>فروشگاه اینترنتی کامل</td><td>افزونه</td><td>افزونه (ووکامرس)</td></tr> <tr><td>صفحه‌ساز بصری</td><td>—</td><td>افزونه</td></tr> </tbody> </table> <h2>۵. پنل مدیریت</h2> <p>پنل دیتالایف برای یک کار طراحی شده: انتشار محتوا. فرم افزودن مطلب همه‌چیز را در یک صفحه با چند تب می‌گذارد — متن، دسته، تصویر، سئو، دسترسی و زمان‌بندی. برای تحریریه‌ای که روزی چند ده مطلب منتشر می‌کند، این تفاوت در سرعت کار واقعاً حس می‌شود.</p> <p>در عوض، پنل وردپرس امروز مدرن‌تر و بصری‌تر است و ویرایشگر بلوکی‌اش برای ساخت صفحات چیدمان‌دار ابزار بهتری است.</p> <h2>۶. مقایسه با جوملا و دروپال</h2> <p><strong>جوملا</strong> جایی میان وردپرس و دروپال ایستاده: انعطاف بیشتری از وردپرس دارد ولی یادگیری‌اش سخت‌تر است و جامعه‌اش کوچک‌تر شده. برای سایت خبری، هیچ مزیت روشنی نسبت به دیتالایف ندارد.</p> <p><strong>دروپال</strong> از همه‌ی این‌ها قدرتمندتر است و برای ساختارهای داده‌ای پیچیده و سایت‌های سازمانی بزرگ انتخاب درستی است. اما هزینه‌اش هم واقعی است: توسعه گران‌تر، نیروی متخصص کمیاب‌تر و سرور سنگین‌تر. برای یک مجله‌ی آنلاین یا سایت خبری، دروپال بیش از حد است.</p> <p><strong>سیستم‌های هدلس</strong> (مثل Strapi یا Ghost با فرانت اختصاصی) برای تیم‌هایی که توسعه‌دهنده‌ی فرانت دارند عالی‌اند، ولی برای صاحب سایتی که می‌خواهد خودش محتوا مدیریت کند، پیچیدگی غیرضروری می‌آورند.</p> <h2>۷. کجا دیتالایف انتخاب <em>درستی</em> است</h2> <ul> <li>سایت خبری، مجله‌ی آنلاین یا وبلاگ پرترافیک</li> <li>سایت دانلود و آرشیو فایل</li> <li>انجمن‌محور یا هر سایتی که کاربر ثبت‌نام می‌کند و نظر می‌گذارد</li> <li>وقتی بودجه‌ی سرور محدود است ولی ترافیک بالاست</li> <li>وقتی می‌خواهید ظاهر سایت کاملاً اختصاصی باشد و کد قالب تمیز بماند</li> </ul> <h2>۸. کجا نباید سراغش رفت</h2> <p>اینجا صادق باشیم، چون انتخاب اشتباه بعداً گران تمام می‌شود:</p> <ul> <li><strong>فروشگاه بزرگ با هزاران محصول متغیر</strong> — ووکامرس در این زمین سال‌ها جلوتر است.</li> <li><strong>وقتی به ده‌ها افزونه‌ی آماده و رایگان نیاز دارید</strong> — اکوسیستم دیتالایف بسیار کوچک‌تر است و بیشتر منابعش هم روسی است.</li> <li><strong>وقتی تیم شما فقط وردپرس بلد است</strong> — هزینه‌ی یادگیری و نگهداری را دست‌کم نگیرید.</li> <li><strong>پروژه‌های بدون بودجه</strong> — لایسنس دیتالایف تجاری است، برخلاف وردپرس که رایگان و متن‌باز است.</li> <li><strong>ساختار داده‌ای پیچیده و چندنوعی</strong> — اینجا دروپال یا یک فریم‌ورک اختصاصی مناسب‌تر است.</li> </ul> <p class="xlink">اگر تصمیمتان را گرفته‌اید، فهرست <a href="/index.php?do=shop&amp;type=plugin">افزونه‌های آماده‌ی دیتالایف</a> و <a href="/blog/blog-tutorials/30-dle-post-install-checklist.html">چک‌لیست تنظیمات پس از نصب</a> نقطه‌ی شروع خوبی هستند.</p> <h2>جمع‌بندی</h2> <p>دیتالایف انجین «وردپرسِ بهتر» نیست؛ ابزار متفاوتی برای کار متفاوتی است. اگر محصول شما محتواست و معیار موفقیتتان سرعت بارگذاری، پایداری زیر ترافیک و هزینه‌ی سرور است، دیتالایف با کمترین دردسر همان چیزی را می‌دهد که در وردپرس باید با چند افزونه و کلی تنظیم ساخته شود.</p> <p>و اگر به فروشگاه، صفحه‌ساز بصری یا اکوسیستم عظیم افزونه نیاز دارید، صادقانه بهتر است سراغ وردپرس بروید. انتخاب درست، انتخابی است که با نیاز پروژه بخواند — نه با محبوبیت.</p> <div class="xread"><b>بیشتر بخوانید</b><ul> <li><a href="/blog/blog-tutorials/30-dle-post-install-checklist.html">چک‌لیست تنظیمات دیتالایف انجین پس از نصب: ۱۸ کاری که باید انجام دهید</a></li> <li><a href="/blog/blog-tutorials/26-dle-template-structure-guide.html">ساختار قالب دیتالایف انجین: راهنمای کامل فایل‌های TPL</a></li> <li><a href="/blog/blog-tutorials/23-seven-dle-speed-mistakes.html">هفت اشتباه رایج که سرعت سایت دیتالایف شما را می‌گیرد</a></li> </ul></div>]]></content:encoded>
</item><item>
<title>آدرس‌های سئوپسند در دیتالایف ۲۰: پیکربندی کامل و بدون محتوای تکراری</title>
<link>https://dleplugin.ir/blog/blog-tutorials/27-dle-seo-friendly-urls.html</link>
<pdalink>https://dleplugin.ir/blog/blog-tutorials/27-dle-seo-friendly-urls.html</pdalink>
<guid>https://dleplugin.ir/blog/blog-tutorials/27-dle-seo-friendly-urls.html</guid>
<pubDate>08:29:57 +0330 سه شنبه، 27 مرداد 1405</pubDate>
<category>index</category>

<content:encoded><![CDATA[<p>ساختار آدرس از آن دسته تصمیم‌هایی است که یک بار گرفته می‌شود و سال‌ها با سایت می‌ماند. عوض کردنش بعد از ایندکس شدن، یعنی ریدایرکت، افت موقت رتبه و مدتی سردرگمی خزنده‌ها. بنابراین ارزشش را دارد که همان اول درست انجام شود.</p> <h2>مرحله‌ی صفر: mod_rewrite</h2> <p>پیش از هر تنظیمی مطمئن شوید بازنویسی آدرس روی سرور فعال است. فایل <code>.htaccess</code> در ریشه‌ی سایت باید این بلوک را داشته باشد:</p> <pre><code>DirectoryIndex index.php &lt;IfModule mod_rewrite.c&gt; RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] &lt;/IfModule&gt;</code></pre> <p>روی nginx معادلش یک <code>try_files</code> است:</p> <pre><code>location / { try_files $uri $uri/ /index.php?$args; }</code></pre> <p>اگر این مرحله انجام نشود، فعال کردن آدرس سئوپسند در پنل فقط باعث می‌شود کل سایت ۴۰۴ بدهد.</p> <h2>فعال‌سازی در پنل</h2> <p>پنل مدیریت ← تنظیمات اسکریپت ← تنظیمات آدرس‌ها. گزینه‌ی «استفاده از آدرس‌های سئوپسند» را روشن کنید. این گزینه در فایل پیکربندی معادل <code>allow_alt_url</code> است.</p> <p>در همان بخش، حالت آدرس مطلب را انتخاب می‌کنید. سه الگوی رایج:</p> <table> <thead><tr><th>الگو</th><th>نمونه</th><th>مناسب برای</th></tr></thead> <tbody> <tr><td>دسته + شناسه + نام</td><td><code>/blog/blog-tutorials/23-post-name.html</code></td><td>سایت‌های محتوایی با دسته‌بندی معنادار</td></tr> <tr><td>شناسه + نام</td><td><code>/23-post-name.html</code></td><td>وقتی مطلب ممکن است بین دسته‌ها جابه‌جا شود</td></tr> <tr><td>تاریخ + نام</td><td><code>/2026/08/post-name.html</code></td><td>سایت‌های خبری با آرشیو زمانی</td></tr> </tbody> </table> <p>توصیه‌ی عملی: اگر مطالب شما احتمال دارد بعداً دسته‌بندی‌شان عوض شود، الگوی بدون دسته را انتخاب کنید. هر بار جابه‌جایی دسته در الگوی اول یعنی تغییر آدرس و نیاز به ریدایرکت.</p> <h2>rules.json — جایی که ساختار واقعاً تعریف می‌شود</h2> <p>در دیتالایف ۲۰ قواعد مسیریابی از هسته جدا شده و در <code>engine/data/rules.json</code> نگهداری می‌شود. هر قاعده سه بخش دارد:</p> <pre><code>"showfull": [ "/{category}/{newsid}-{news_name}.html", "/index.php?newsid={newsid}", "/{category:[^.]+}/{newsid:\d+}-{news_name:.*}.html" ]</code></pre> <ol> <li><strong>الگوی ساخت</strong> — دیتالایف با این الگو لینک‌های داخل سایت را می‌سازد.</li> <li><strong>آدرس داخلی</strong> — درخواست در نهایت به این شکل ترجمه می‌شود.</li> <li><strong>الگوی تطبیق</strong> — عبارت باقاعده‌ای که آدرس ورودی با آن سنجیده می‌شود.</li> </ol> <p>اگر خواستید ساختار دلخواه بسازید، هر سه بخش باید هم‌خوان بمانند. مثلاً برای حذف پسوند <code>.html</code> از آدرس مطالب:</p> <pre><code>"showfull": [ "/{category}/{newsid}-{news_name}", "/index.php?newsid={newsid}", "/{category:[^.]+}/{newsid:\d+}-{news_name:[^/]*}" ]</code></pre> <p>سه هشدار جدی پیش از دست زدن به این فایل:</p> <ul> <li><strong>پشتیبان بگیرید.</strong> یک ویرگول جا افتاده کل سایت را از کار می‌اندازد، چون JSON نامعتبر قابل تجزیه نیست.</li> <li>الگوی تطبیق را آن‌قدر باز نگذارید که با مسیرهای دیگر تداخل کند. <code>{news_name:.*}</code> بدون پسوند، آدرس دسته‌ها را هم می‌بلعد.</li> <li>بعد از ویرایش، کش سیستم را پاک کنید تا قواعد دوباره خوانده شوند.</li> </ul> <h2>تداخل نام دسته با پوشه‌های واقعی</h2> <p>این مورد را کمتر جایی می‌نویسند و دقیقاً همان چیزی است که ساعت‌ها وقت می‌گیرد: اگر نام مستعار یک دسته با نام یک پوشه‌ی واقعی روی سرور یکی باشد، وب‌سرور پوشه را سرو می‌کند و درخواست هرگز به دیتالایف نمی‌رسد.</p> <p>نام‌های پرخطر: <code>uploads</code>، <code>templates</code>، <code>engine</code>، <code>backup</code>، <code>language</code>، <code>public</code>. اگر دسته‌ای با نام <code>templates</code> ساختید و صفحه‌اش ۴۰۳ یا فهرست فایل نشان داد، مشکل همین است. راه‌حل: نام مستعار دسته را عوض کنید (مثلاً <code>themes</code>).</p> <p class="xlink">آدرس‌دهی درست شما را وارد نتایج می‌کند؛ برای گرفتن فضای بیشتر در همان نتایج می‌توانید بخش پرسش و پاسخ ساختاریافته هم به مطالب اضافه کنید — <a href="/plugins/31-simple-faq-plugin.html">افزونه پرسش و پاسخ (Simple FAQ)</a>.</p> <h2>جلوگیری از محتوای تکراری</h2> <p>بعد از فعال کردن آدرس سئوپسند، هر صفحه از دو مسیر در دسترس می‌ماند: مسیر تازه و مسیر قدیمی <code>index.php?newsid=…</code>. برای گوگل این یعنی دو نسخه از یک صفحه.</p> <h3>۱. تگ canonical</h3> <p>دیتالایف تگ canonical را در خروجی <code>{headers}</code> می‌سازد. کافی است در <code>main.tpl</code> از این تگ استفاده کرده باشید و آن را با متاتگ‌های دستی جایگزین نکنید.</p> <h3>۲. صفحه‌بندی</h3> <p>صفحات دوم به بعد فهرست‌ها معمولاً محتوای منحصربه‌فردی ندارند. در تنظیمات متاتگ‌ها، عنوان صفحات بعدی را با شماره‌ی صفحه متمایز کنید تا عنوان‌های یکسان تولید نشود.</p> <h3>۳. نسخه‌ی چاپی و آرشیو</h3> <p>اگر صفحه‌ی چاپ و آرشیوهای تاریخی برایتان ترافیک ارگانیک نمی‌آورند، در <code>robots.txt</code> ببندیدشان:</p> <pre><code>User-agent: * Disallow: /index.php?mod=print Disallow: /*print:page Disallow: /*do=lastcomments Disallow: /*do=search Disallow: /*action=mobile Sitemap: https://example.com/sitemap.xml</code></pre> <h2>انتقال از ساختار قدیمی</h2> <p>اگر سایت شما قبلاً ایندکس شده و حالا ساختار را عوض می‌کنید، ریدایرکت ۳۰۱ اجباری است — نه اختیاری. دیتالایف بخش «مدیریت ریدایرکت‌ها» را در پنل دارد که برای تعداد محدود آدرس مناسب است.</p> <p>برای انتقال گسترده، قاعده‌ی سراسری در <code>.htaccess</code> کارآمدتر است. نمونه‌ی انتقال از الگوی بدون دسته به الگوی با دسته:</p> <pre><code>RewriteCond %{QUERY_STRING} ^newsid=([0-9]+)$ RewriteRule ^index.php$ /index.php?newsid=%1 [R=301,L]</code></pre> <p>و چند قاعده‌ی بهداشتی که بهتر است از روز اول داشته باشید:</p> <pre><code># حذف www RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L] # اجبار HTTPS RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]</code></pre> <p class="xlink">آدرس‌دهی تنها یک تکه از سئوی فنی است؛ بقیه‌ی تنظیم‌های لازم در <a href="/blog/blog-tutorials/30-dle-post-install-checklist.html">چک‌لیست تنظیمات پس از نصب</a> جمع شده است.</p> <h2>بعد از انتقال چه کنید</h2> <ol> <li>نقشه‌ی سایت را از پنل بازسازی کنید و در سرچ کنسول دوباره ثبت کنید.</li> <li>گزارش «پوشش» سرچ کنسول را دو تا سه هفته پیگیری کنید؛ افزایش موقت خطاها طبیعی است.</li> <li>لینک‌های داخلی را به آدرس‌های تازه به‌روز کنید. ریدایرکت کار می‌کند، ولی لینک مستقیم بهتر است.</li> <li>ریدایرکت‌ها را حداقل یک سال نگه دارید. حذف زودهنگام یعنی از دست دادن اعتبار لینک‌های خارجی.</li> </ol> <h2>جمع‌بندی</h2> <p>ساختار آدرس را قبل از انتشار محتوا نهایی کنید، ساده و پایدار نگهش دارید و به الگویی که هر بار جابه‌جایی دسته آدرس را عوض می‌کند تن ندهید. اگر مجبور به تغییر شدید، ریدایرکت ۳۰۱ کامل و نقشه‌ی سایت تازه، تفاوت بین یک افت دو هفته‌ای و یک افت شش ماهه است.</p> <div class="xread"><b>بیشتر بخوانید</b><ul> <li><a href="/blog/blog-tutorials/30-dle-post-install-checklist.html">چک‌لیست تنظیمات دیتالایف انجین پس از نصب: ۱۸ کاری که باید انجام دهید</a></li> <li><a href="/blog/blog-tutorials/28-dle-core-web-vitals.html">بهینه‌سازی Core Web Vitals در قالب دیتالایف: LCP، CLS و INP</a></li> <li><a href="/plugins/31-simple-faq-plugin.html">افزونه پرسش و پاسخ (Simple FAQ)</a></li> </ul></div>]]></content:encoded>
</item><item>
<title>بهینه‌سازی Core Web Vitals در قالب دیتالایف: LCP، CLS و INP</title>
<link>https://dleplugin.ir/blog/blog-tutorials/28-dle-core-web-vitals.html</link>
<pdalink>https://dleplugin.ir/blog/blog-tutorials/28-dle-core-web-vitals.html</pdalink>
<guid>https://dleplugin.ir/blog/blog-tutorials/28-dle-core-web-vitals.html</guid>
<pubDate>08:29:57 +0330 دوشنبه، 26 مرداد 1405</pubDate>
<category>index</category>

<content:encoded><![CDATA[<p>وقتی از «سرعت سایت» حرف می‌زنیم معمولاً منظورمان یک عدد کلی است. اما آنچه گوگل واقعاً می‌سنجد سه معیار مشخص است و هرکدام علت متفاوتی دارد. خبر خوب برای کاربران دیتالایف: بخش بزرگی از امتیاز از دست رفته در سطح <strong>قالب</strong> قابل جبران است، نه سرور.</p> <table> <thead><tr><th>معیار</th><th>چه چیزی را می‌سنجد</th><th>هدف</th></tr></thead> <tbody> <tr><td><strong>LCP</strong></td><td>زمان نمایش بزرگ‌ترین عنصر صفحه</td><td>زیر ۲.۵ ثانیه</td></tr> <tr><td><strong>CLS</strong></td><td>میزان جابه‌جایی ناگهانی عناصر هنگام بارگذاری</td><td>زیر ۰.۱</td></tr> <tr><td><strong>INP</strong></td><td>تأخیر پاسخ به تعامل کاربر</td><td>زیر ۲۰۰ میلی‌ثانیه</td></tr> </tbody> </table> <h2>LCP — بزرگ‌ترین عنصر صفحه</h2> <p>در قالب‌های دیتالایف، عنصر LCP تقریباً همیشه یکی از این دوتاست: تصویر بنر بالای صفحه، یا تیتر اصلی مطلب.</p> <h3>فونت را زودتر برسانید</h3> <p>اگر تیتر شما عنصر LCP است، تا وقتی فونت نرسیده متن رندر نمی‌شود. سه کار لازم است:</p> <pre><code>&lt;link rel="preload" href="https://dleplugin.ir/templates/DLEMarket/fonts/Vazirmatn-400.woff2" as="font" type="font/woff2" crossorigin&gt; &lt;link rel="preload" href="https://dleplugin.ir/templates/DLEMarket/fonts/Vazirmatn-800.woff2" as="font" type="font/woff2" crossorigin&gt;</code></pre> <pre><code>@font-face { font-family: 'Vazirmatn'; src: url('../fonts/Vazirmatn-400.woff2') format('woff2'); font-weight: 400; font-display: swap; /* متن با فونت جایگزین نمایش داده می‌شود تا فونت اصلی برسد */ }</code></pre> <ul> <li>فقط وزن‌هایی را preload کنید که واقعاً بالای صفحه استفاده می‌شوند. preload کردن شش وزن، پهنای باند را از چیزی می‌گیرد که به آن نیاز فوری دارید.</li> <li>فونت را <strong>محلی</strong> میزبانی کنید. هر دامنه‌ی خارجی یعنی یک DNS lookup و یک دست‌دادن TLS اضافه.</li> <li>فرمت <code>woff2</code> کافی است. <code>ttf</code> و <code>eot</code> برای مرورگرهایی است که دیگر وجود ندارند و فقط حجم اضافه‌اند.</li> </ul> <h3>تصویر بالای صفحه را lazy نکنید</h3> <p>این اشتباه بسیار رایج است: <code>loading="lazy"</code> روی همه‌ی تصاویر گذاشته می‌شود، از جمله تصویر بنر. نتیجه این است که مرورگر بارگذاری مهم‌ترین تصویر صفحه را <em>عقب می‌اندازد</em> و LCP بدتر می‌شود.</p> <pre><code>&lt;!-- تصویر بالای صفحه --&gt; &lt;img src="..." width="1200" height="630" fetchpriority="high"&gt; &lt;!-- تصاویر پایین‌تر --&gt; &lt;img src="..." width="400" height="225" loading="lazy" decoding="async"&gt;</code></pre> <h3>CSS حیاتی را بالا نگه دارید</h3> <p>ترتیب <code>{include}</code> ها در <code>main.tpl</code> اهمیت دارد. استایل‌های مربوط به هدر و بخش بالای صفحه باید زودتر از استایل‌های صفحه‌های داخلی بارگذاری شوند. اگر فایل CSS بزرگی دارید که فقط در صفحه‌ی محصول لازم است، آن را با شرط قالب جدا کنید:</p> <pre><code>[available=showfull] {include file="https://dleplugin.ir/templates/DLEMarket/css/product.css"} [/available]</code></pre> <h2>CLS — جهش چیدمان</h2> <p>CLS آزاردهنده‌ترین معیار برای کاربر است: می‌خواهد روی چیزی کلیک کند و در همان لحظه صفحه جابه‌جا می‌شود. سه منبع اصلی در قالب‌های دیتالایف:</p> <h3>۱. تصاویر بدون ابعاد</h3> <p>هر <code>&lt;img&gt;</code> باید <code>width</code> و <code>height</code> داشته باشد. مرورگر از روی این دو، نسبت تصویر را حساب می‌کند و جای خالی را از قبل رزرو می‌کند. اندازه‌ی نمایشی را CSS تعیین می‌کند:</p> <pre><code>img { max-width: 100%; height: auto; }</code></pre> <p>در کارت‌های فهرست که تصاویر با ابعاد متفاوت می‌آیند، به‌جای ابعاد ثابت از <code>aspect-ratio</code> استفاده کنید:</p> <pre><code>.card__thumb { aspect-ratio: 16 / 9; overflow: hidden; } .card__thumb img { width: 100%; height: 100%; object-fit: cover; }</code></pre> <h3>۲. بنرها و تبلیغات</h3> <p>جای بنر را با ارتفاع کمینه از قبل رزرو کنید، حتی وقتی بنری وجود ندارد:</p> <pre><code>.banner-slot { min-height: 250px; }</code></pre> <h3>۳. محتوای آژاکسی</h3> <p>بلوک‌هایی مثل شمارنده‌ی سبد خرید یا نظرات که بعد از بارگذاری صفحه پر می‌شوند، باید فضایشان از قبل رزرو شده باشد. یک اسکلت (skeleton) با همان ابعاد محتوای نهایی، هم CLS را صفر می‌کند و هم تجربه‌ی بهتری می‌سازد.</p> <h2>INP — پاسخ به تعامل</h2> <p>INP جایگزین FID شده و سخت‌گیرانه‌تر است: کل تأخیر بین کلیک کاربر و دیده شدن نتیجه را می‌سنجد. مقصر معمولاً جاوااسکریپت است.</p> <ul> <li><strong>اسکریپت‌ها را با <code>defer</code> بارگذاری کنید.</strong> اسکریپت بدون <code>defer</code> در <code>&lt;head&gt;</code> کل تجزیه‌ی HTML را متوقف می‌کند.</li> <li><strong>jQuery اضافی بار نکنید.</strong> دیتالایف خودش jQuery را لود می‌کند؛ نسخه‌ی دوم فقط حجم و تداخل است.</li> <li><strong>رویدادهای پرتکرار را throttle کنید.</strong> شنونده‌ی <code>scroll</code> یا <code>resize</code> که در هر فراخوانی محاسبه‌ی سنگین انجام دهد، مستقیم به INP آسیب می‌زند.</li> <li><strong>انیمیشن را روی <code>transform</code> و <code>opacity</code> بسازید.</strong> انیمیشن روی <code>width</code>، <code>height</code>، <code>top</code> یا <code>margin</code> در هر فریم چیدمان را دوباره محاسبه می‌کند.</li> </ul> <p class="xlink">اگر هنوز به این مرحله نرسیده‌اید، اول <a href="/blog/blog-tutorials/23-seven-dle-speed-mistakes.html">هفت اشتباه رایجی که سرعت سایت دیتالایف را می‌گیرد</a> را مرور کنید؛ بیشتر سایت‌ها با همان هفت مورد نصف راه را می‌روند.</p> <h2>سمت سرور: کارهایی که یک بار انجام می‌شوند</h2> <p>اینها مربوط به قالب نیستند اما مکمل کار هستند:</p> <table> <thead><tr><th>کار</th><th>کجا</th></tr></thead> <tbody> <tr><td>فعال کردن کش دیتالایف</td><td>پنل ← تنظیمات اسکریپت ← بهینه‌سازی</td></tr> <tr><td>فشرده‌سازی Gzip / Brotli</td><td>پیکربندی وب‌سرور</td></tr> <tr><td>هدر <code>Cache-Control</code> برای فایل‌های ثابت</td><td><code>.htaccess</code> یا nginx</td></tr> <tr><td>تبدیل تصاویر به WebP</td><td>پنل ← تنظیمات آپلود</td></tr> <tr><td>HTTP/2 یا HTTP/3</td><td>وب‌سرور</td></tr> </tbody> </table> <p>نمونه‌ی هدر کش برای فایل‌های ثابت:</p> <pre><code>&lt;IfModule mod_expires.c&gt; ExpiresActive On ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" ExpiresByType font/woff2 "access plus 1 year" ExpiresByType image/webp "access plus 6 months" &lt;/IfModule&gt;</code></pre> <p>کش یک‌ساله فقط وقتی امن است که آدرس فایل‌ها نسخه‌دار باشد. دیتالایف این کار را با پارامتر <code>cache_id</code> انجام می‌دهد — به شرطی که فایل‌ها را با <code>{include}</code> اضافه کرده باشید و نه با تگ <code>&lt;link&gt;</code> دستی.</p> <p class="xlink">بخشی از این تنظیم‌ها داخل فایل‌های قالب انجام می‌شود؛ اگر مطمئن نیستید هر تگ در کدام فایل رندر می‌شود، <a href="/blog/blog-tutorials/26-dle-template-structure-guide.html">راهنمای ساختار فایل‌های TPL</a> را ببینید.</p> <h2>چطور اندازه بگیرید</h2> <p>PageSpeed Insights یک آزمایش آزمایشگاهی است و همیشه با تجربه‌ی واقعی کاربران یکی نیست. برای تصمیم‌گیری، بخش «داده‌های واقعی کاربران» همان گزارش یا گزارش Core Web Vitals در سرچ کنسول معتبرتر است. همیشه روی موبایل بسنجید؛ اختلاف امتیاز موبایل و دسکتاپ معمولاً چشمگیر است.</p> <h2>جمع‌بندی</h2> <p>ترتیب کار را از پرتأثیر به کم‌تأثیر بچینید: اول ابعاد تصاویر و رزرو فضای بنر (CLS تقریباً رایگان درست می‌شود)، بعد بارگذاری فونت و اولویت تصویر بالای صفحه (LCP)، و در آخر بازبینی جاوااسکریپت (INP). این ترتیب بیشترین نتیجه را با کمترین ریسک می‌دهد.</p> <div class="xread"><b>بیشتر بخوانید</b><ul> <li><a href="/blog/blog-tutorials/23-seven-dle-speed-mistakes.html">هفت اشتباه رایج که سرعت سایت دیتالایف شما را می‌گیرد</a></li> <li><a href="/blog/blog-tutorials/26-dle-template-structure-guide.html">ساختار قالب دیتالایف انجین: راهنمای کامل فایل‌های TPL</a></li> <li><a href="/blog/blog-tutorials/30-dle-post-install-checklist.html">چک‌لیست تنظیمات دیتالایف انجین پس از نصب: ۱۸ کاری که باید انجام دهید</a></li> </ul></div>]]></content:encoded>
</item><item>
<title>راست‌به‌چپ‌سازی قالب دیتالایف: هفت تله‌ای که کار را خراب می‌کند</title>
<link>https://dleplugin.ir/blog/blog-tutorials/29-dle-rtl-theme-guide.html</link>
<pdalink>https://dleplugin.ir/blog/blog-tutorials/29-dle-rtl-theme-guide.html</pdalink>
<guid>https://dleplugin.ir/blog/blog-tutorials/29-dle-rtl-theme-guide.html</guid>
<pubDate>08:29:57 +0330 یکشنبه، 25 مرداد 1405</pubDate>
<category>index</category>

<content:encoded><![CDATA[<p>راست‌به‌چپ کردن یک قالب در نگاه اول کار ساده‌ای است: <code>dir="rtl"</code> روی <code>&lt;html&gt;</code> و تمام. صفحه برمی‌گردد، متن‌ها درست می‌شوند و همه‌چیز مرتب به نظر می‌رسد. مشکل‌ها بعداً پیدا می‌شوند — معمولاً وقتی مشتری آنها را پیدا می‌کند.</p> <h2>قاعده‌ی طلایی: ویژگی‌های منطقی</h2> <p>پیش از هر چیز، عادت نوشتن را عوض کنید. CSS مدرن ویژگی‌هایی دارد که به‌جای «چپ و راست»، «شروع و پایان» را می‌فهمند و خودشان با جهت صفحه هماهنگ می‌شوند:</p> <table> <thead><tr><th>به‌جای</th><th>بنویسید</th></tr></thead> <tbody> <tr><td><code>margin-left</code></td><td><code>margin-inline-start</code></td></tr> <tr><td><code>margin-right</code></td><td><code>margin-inline-end</code></td></tr> <tr><td><code>padding-left</code></td><td><code>padding-inline-start</code></td></tr> <tr><td><code>border-right</code></td><td><code>border-inline-end</code></td></tr> <tr><td><code>left: 0</code></td><td><code>inset-inline-start: 0</code></td></tr> <tr><td><code>text-align: left</code></td><td><code>text-align: start</code></td></tr> </tbody> </table> <p>اگر قالب را از ابتدا با اینها بنویسید، بخش بزرگی از کار راست‌به‌چپ‌سازی اصلاً پیش نمی‌آید. حالا برویم سراغ چیزهایی که با این روش هم حل نمی‌شوند.</p> <h2>۱. ترنسفورم‌ها برنمی‌گردند</h2> <p><code>transform</code> هیچ نسخه‌ی منطقی ندارد. <code>translateX(-100%)</code> در RTL هم دقیقاً همان مقدار را به همان سمت می‌برد. نتیجه: منوی کشویی موبایل که باید از راست بیاید، از چپ می‌آید و اسلایدرها برعکس حرکت می‌کنند.</p> <pre><code>/* ❌ در راست‌به‌چپ برعکس عمل می‌کند */ .drawer { transform: translateX(-100%); } /* ✅ جهت را صریح مشخص کنید */ [dir="rtl"] .drawer { transform: translateX(100%); }</code></pre> <p>برای اسلایدرهای آماده، معمولاً گزینه‌ی <code>rtl: true</code> در پیکربندی وجود دارد. اول آن را بررسی کنید؛ دستکاری CSS اسلایدر آخرین راه‌حل است.</p> <h2>۲. سرریز افقی از عناصر مخفی</h2> <p>ترفند قدیمی پنهان کردن عناصر با بردن‌شان به بیرون صفحه، در RTL معنایش عوض می‌شود:</p> <pre><code>/* ❌ در راست‌به‌چپ باعث اسکرول افقی کل صفحه می‌شود */ .sr-only { position: absolute; left: -9999px; } /* ✅ روش امن و استاندارد */ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }</code></pre> <p>اگر روی موبایل نوار اسکرول افقی می‌بینید و منبعش را پیدا نمی‌کنید، این را اول بررسی کنید.</p> <h2>۳. متن لاتین وسط متن فارسی</h2> <p>نام برند، نسخه، آدرس ایمیل یا کد — هر متن لاتینی که داخل جمله‌ی فارسی بیاید، ممکن است به‌خاطر الگوریتم دوجهته‌ی یونیکد جابه‌جا دیده شود. مخصوصاً وقتی با علامت یا عدد ترکیب شده باشد.</p> <pre><code>.brand, .ltr { direction: ltr; unicode-bidi: isolate; /* متن را از محیط اطرافش جدا می‌کند */ }</code></pre> <p>برای فیلدهای ورودی که محتوای لاتین می‌گیرند (آدرس، ایمیل، کد تخفیف) همیشه <code>dir="ltr"</code> بگذارید. کاربر هنگام تایپ URL در فیلد راست‌چین، هیچ ایده‌ای ندارد که چه اتفاقی دارد می‌افتد.</p> <h2>۴. اعداد و مبالغ</h2> <p>عدد در متن فارسی راست‌چین می‌ماند اما رقم‌هایش چپ‌به‌راست خوانده می‌شوند. برای جدول‌های مالی این دو نکته را رعایت کنید:</p> <pre><code>.amount { direction: ltr; unicode-bidi: embed; font-variant-numeric: tabular-nums; /* عرض یکسان ارقام، ستون‌ها تراز می‌مانند */ }</code></pre> <p>و جداکننده‌ی هزارگان را در سمت سرور اضافه کنید، نه با CSS. <code>number_format()</code> نتیجه‌ی قابل پیش‌بینی می‌دهد.</p> <h2>۵. آیکن‌های جهت‌دار</h2> <p>فلش «بعدی» در چپ‌به‌راست به راست اشاره می‌کند و در راست‌به‌چپ باید به چپ اشاره کند. آیکن‌های نقل‌قول، انتقال و بازگشت هم همین‌طور. ساده‌ترین راه:</p> <pre><code>[dir="rtl"] .ic-arrow, [dir="rtl"] .ic-chevron { transform: scaleX(-1); }</code></pre> <p>ولی مراقب باشید این قاعده را روی همه‌ی آیکن‌ها اعمال نکنید. آیکن ساعت، ذره‌بین یا سبد خرید نباید آینه شود.</p> <h2>۶. سایه و گرادیان</h2> <p><code>box-shadow</code> و <code>linear-gradient</code> هم منطقی نیستند. سایه‌ای که در LTR زیر و راست عنصر بود، در RTL باید به چپ برود تا منبع نور یکسان به نظر برسد:</p> <pre><code>.card { box-shadow: 6px 6px 18px rgba(0,0,0,.08); } [dir="rtl"] .card { box-shadow: -6px 6px 18px rgba(0,0,0,.08); }</code></pre> <p>اگر سایه‌ی شما متقارن است (<code>0 4px …</code>)، نیازی به این کار نیست — که خودش دلیل خوبی است برای اینکه سایه‌ها را متقارن طراحی کنید.</p> <h2>۷. دسترسی به فایل فونت</h2> <p>این مورد ربطی به CSS ندارد ولی همیشه سر همین گیر می‌افتد: اگر فونت‌ها را در زیرپوشه‌ای از قالب گذاشته‌اید و مرورگر خطای ۴۰۳ می‌دهد، احتمالاً یک <code>.htaccess</code> در مسیر بالاتر دسترسی را بسته است. یک <code>.htaccess</code> در پوشه‌ی فونت‌ها اجازه را برمی‌گرداند:</p> <pre><code>&lt;IfModule mod_authz_core.c&gt; Require all granted &lt;/IfModule&gt; &lt;IfModule !mod_authz_core.c&gt; Order deny,allow Allow from all &lt;/IfModule&gt;</code></pre> <p class="xlink">این هفت تله در لایه‌ی CSS اتفاق می‌افتند؛ برای اینکه بدانید هر قطعه‌ی HTML از کدام فایل قالب می‌آید، <a href="/blog/blog-tutorials/26-dle-template-structure-guide.html">راهنمای ساختار فایل‌های TPL</a> را کنار دستتان بگذارید.</p> <h2>چک‌لیست تحویل</h2> <p>پیش از اینکه قالب راست‌به‌چپ را تحویل بدهید، این‌ها را روی موبایل و دسکتاپ ببینید:</p> <ul> <li>هیچ صفحه‌ای اسکرول افقی ندارد — مخصوصاً صفحه‌ی مطلب با جدول و کد.</li> <li>منوی کشویی موبایل از سمت راست باز می‌شود و پشت‌زمینه‌اش کل صفحه را می‌پوشاند.</li> <li>فلش‌های صفحه‌بندی و اسلایدر به سمت درست اشاره می‌کنند.</li> <li>فیلدهای ایمیل، آدرس و کد، چپ‌چین هستند.</li> <li>جدول‌های عددی تراز ستونی دارند.</li> <li>ایمیل‌های خروجی سایت هم راست‌به‌چپ‌اند — این یکی همیشه فراموش می‌شود.</li> </ul> <h2>جمع‌بندی</h2> <p>راست‌به‌چپ‌سازی خوب یعنی کاربر اصلاً متوجه نشود که قالب در اصل برای جهت دیگری طراحی شده بود. اگر از ابتدا با ویژگی‌های منطقی بنویسید، فقط هفت مورد بالا باقی می‌ماند — و هر هفت‌تا در نیم روز حل می‌شوند.</p> <div class="xread"><b>بیشتر بخوانید</b><ul> <li><a href="/blog/blog-tutorials/26-dle-template-structure-guide.html">ساختار قالب دیتالایف انجین: راهنمای کامل فایل‌های TPL</a></li> <li><a href="/blog/blog-tutorials/28-dle-core-web-vitals.html">بهینه‌سازی Core Web Vitals در قالب دیتالایف: LCP، CLS و INP</a></li> <li><a href="/plugins/33-clean-html-plugin.html">افزونه پاک‌سازی HTML مطلب</a></li> </ul></div>]]></content:encoded>
</item><item>
<title>راه‌اندازی فروشگاه فایل روی دیتالایف انجین از صفر</title>
<link>https://dleplugin.ir/blog/blog-tutorials/22-setup-file-shop-on-dle.html</link>
<pdalink>https://dleplugin.ir/blog/blog-tutorials/22-setup-file-shop-on-dle.html</pdalink>
<guid>https://dleplugin.ir/blog/blog-tutorials/22-setup-file-shop-on-dle.html</guid>
<pubDate>12:36:38 +0330 شنبه، 24 مرداد 1405</pubDate>
<category>index</category>

<content:encoded><![CDATA[<p>در این راهنما قدم‌به‌قدم یک فروشگاه فایل روی دیتالایف راه می‌اندازیم. فرض می‌کنیم دیتالایف را نصب کرده‌اید و به پنل مدیریت دسترسی دارید.</p> <h3>گام اول: نصب افزونه</h3> <p>فایل افزونه را در مسیر سایت باز کنید و نصب‌کننده را اجرا نمایید. نصب‌کننده جداول لازم را می‌سازد و نقاط اتصال را به هسته اضافه می‌کند.</p> <p class="xlink">اگر دیتالایف را تازه نصب کرده‌اید، پیش از راه‌اندازی فروشگاه یک بار <a href="/blog/blog-tutorials/30-dle-post-install-checklist.html">چک‌لیست تنظیمات پس از نصب</a> را رد کنید؛ چند مورد امنیتی و کشِ آن مستقیم روی فروشگاه اثر می‌گذارد.</p> <h3>گام دوم: تنظیم درگاه پرداخت</h3> <p>در بخش تنظیمات فروشگاه، مرچنت کد زرین‌پال را وارد کنید. اگر واحد پول سایت شما تومان است، ضریب تبدیل به ریال را روی ۱۰ بگذارید. تا زمانی که سایت آماده نشده، حالت آزمایشی را روشن نگه دارید.</p> <h3>گام سوم: اولین محصول</h3> <p>یک مطلب جدید بسازید، به تب «فروشگاه» بروید، گزینه «این مطلب یک محصول فروشگاه است» را فعال کنید و قیمت را وارد نمایید. سپس فایل محصول را بارگذاری کنید.</p> <div class="xread"><b>بیشتر بخوانید</b><ul> <li><a href="/blog/blog-tutorials/30-dle-post-install-checklist.html">چک‌لیست تنظیمات دیتالایف انجین پس از نصب: ۱۸ کاری که باید انجام دهید</a></li> <li><a href="/blog/blog-tutorials/23-seven-dle-speed-mistakes.html">هفت اشتباه رایج که سرعت سایت دیتالایف شما را می‌گیرد</a></li> <li><a href="/blog/blog-tutorials/35-why-datalife-engine-vs-wordpress.html">چرا دیتالایف انجین؟ مقایسه‌ی صادقانه با وردپرس و بقیه‌ی CMSها</a></li> </ul></div>]]></content:encoded>
</item><item>
<title>چک‌لیست تنظیمات دیتالایف انجین پس از نصب: ۱۸ کاری که باید انجام دهید</title>
<link>https://dleplugin.ir/blog/blog-tutorials/30-dle-post-install-checklist.html</link>
<pdalink>https://dleplugin.ir/blog/blog-tutorials/30-dle-post-install-checklist.html</pdalink>
<guid>https://dleplugin.ir/blog/blog-tutorials/30-dle-post-install-checklist.html</guid>
<pubDate>08:29:57 +0330 شنبه، 24 مرداد 1405</pubDate>
<category>index</category>

<content:encoded><![CDATA[<p>نصب دیتالایف انجین چند دقیقه بیشتر طول نمی‌کشد و همان‌جاست که اغلب کار متوقف می‌شود: سایت بالا آمده، پس ادامه‌اش باشد برای بعد. مشکل این است که «بعد» معمولاً نمی‌آید و شش ماه بعد با یک سایت هک‌شده یا ایمیل‌هایی که هیچ‌وقت به دست کاربر نرسیده‌اند طرف می‌شوید.</p> <p>این هجده مورد را همان روز اول انجام دهید.</p> <h2>امنیت</h2> <h3>۱. مسیر پنل مدیریت را عوض کنید</h3> <p>فایل <code>admin.php</code> را به نام دیگری تغییر دهید و همان نام را در <code>engine/data/config.php</code> در کلید <code>admin_path</code> ثبت کنید. این کار جلوی حمله‌ی هدفمند را نمی‌گیرد، اما ربات‌هایی را که کورکورانه <code>/admin.php</code> را می‌زنند حذف می‌کند — و اینها اکثریت ترافیک مخرب‌اند.</p> <h3>۲. احراز هویت دو مرحله‌ای را فعال کنید</h3> <p>برای همه‌ی حساب‌های مدیر، نه فقط حساب اصلی. پنل ← کاربران ← ویرایش کاربر.</p> <h3>۳. نمایش خطاهای PHP را خاموش کنید</h3> <p>در <code>engine/data/config.php</code> مقدار <code>display_php_errors</code> باید صفر باشد. پیام خطای PHP مسیر فایل‌ها، نام جداول و گاهی بخشی از کوئری را لو می‌دهد.</p> <h3>۴. دسترسی پوشه‌ها را بررسی کنید</h3> <table> <thead><tr><th>مسیر</th><th>دسترسی</th></tr></thead> <tbody> <tr><td><code>engine/data/</code></td><td>۷۵۵ — و از طریق وب بسته</td></tr> <tr><td><code>engine/cache/</code></td><td>۷۷۷ (نیاز به نوشتن دارد)</td></tr> <tr><td><code>uploads/</code></td><td>۷۵۵ با اجرای PHP بسته</td></tr> <tr><td><code>backup/</code></td><td>از طریق وب کاملاً بسته</td></tr> </tbody> </table> <p>و مطمئن شوید <code>.htaccess</code> داخل <code>uploads/</code> اجرای فایل‌های PHP را مسدود می‌کند:</p> <pre><code>&lt;FilesMatch ".([Pp][Hh][Pp]|[Pp][Hh][Tt][Mm][Ll]).?"&gt; &lt;IfModule mod_authz_core.c&gt; Require all denied &lt;/IfModule&gt; &lt;/FilesMatch&gt;</code></pre> <p>این تنها چیزی است که بین یک آپلود آلوده و اجرای کد روی سرور شما ایستاده.</p> <h3>۵. install.php را حذف کنید</h3> <p>اگر بعد از نصب حذفش نکنید، هرکسی می‌تواند نصب را دوباره اجرا کند.</p> <h3>۶. حساب‌های پیش‌فرض و آزمایشی را پاک کنید</h3> <p>هر کاربری که برای تست ساخته‌اید و رمز ساده‌ای دارد، یک در باز است.</p> <h2>عملکرد</h2> <h3>۷. کش را فعال کنید</h3> <p>پنل ← تنظیمات اسکریپت ← بهینه‌سازی. برای سایت‌های پربازدید، کش کامل صفحه بیشترین تأثیر را دارد.</p> <h3>۸. فشرده‌سازی و کش مرورگر را روشن کنید</h3> <p>Gzip یا Brotli در سطح وب‌سرور، و هدر <code>Cache-Control</code> بلندمدت برای CSS، JS، فونت و تصویر.</p> <h3>۹. تبدیل خودکار تصویر به WebP</h3> <p>پنل ← تنظیمات آپلود. کاهش حجم تصاویر معمولاً بزرگ‌ترین برد سرعتی یک سایت محتوایی است.</p> <h3>۱۰. واترمارک و اندازه‌ی بیشینه‌ی آپلود را تعیین کنید</h3> <p>اگر سقف ابعاد تصویر را مشخص نکنید، نویسنده‌ها عکس ۴۰۰۰ پیکسلی مستقیم از دوربین آپلود می‌کنند.</p> <h2>سئو</h2> <h3>۱۱. آدرس‌های سئوپسند</h3> <p>پیش از انتشار محتوا نهایی‌اش کنید. تغییر ساختار بعد از ایندکس شدن، هزینه دارد.</p> <h3>۱۲. عنوان و توضیح متای پیش‌فرض</h3> <p>پنل ← تنظیمات اسکریپت ← متاتگ‌ها. الگوی عنوان صفحات دسته و صفحه‌بندی را طوری تنظیم کنید که عنوان تکراری تولید نشود.</p> <h3>۱۳. نقشه‌ی سایت</h3> <p>از پنل بسازید، در <code>robots.txt</code> معرفی و در سرچ کنسول ثبت کنید. اگر مطالب زیادی دارید، بازسازی خودکار را با کرون زمان‌بندی کنید.</p> <h3>۱۴. robots.txt</h3> <p>مسیرهای بی‌ارزش برای ایندکس را ببندید: جستجوی داخلی، نسخه‌ی چاپ، آخرین نظرات و صفحات پروفایل.</p> <h3>۱۵. HTTPS و نسخه‌ی یکتای دامنه</h3> <p>یک دامنه‌ی اصلی انتخاب کنید (با <code>www</code> یا بدون آن) و بقیه را با ریدایرکت ۳۰۱ به آن بفرستید. آدرس سایت را در تنظیمات دیتالایف هم با همان شکل ثبت کنید.</p> <p class="xlink">دو مورد از این فهرست جای کار بیشتری دارند و هرکدام راهنمای جداگانه دارند: <a href="/blog/blog-tutorials/27-dle-seo-friendly-urls.html">آدرس‌های سئوپسند در دیتالایف ۲۰</a> و <a href="/blog/blog-tutorials/28-dle-core-web-vitals.html">بهینه‌سازی Core Web Vitals</a>.</p> <h2>ارتباطات و نگهداری</h2> <h3>۱۶. ایمیل را با SMTP بفرستید</h3> <p>تابع <code>mail()</code> پیش‌فرض PHP در عمل به اسپم می‌رود. در پنل ← تنظیمات ایمیل، SMTP را با یک سرویس معتبر تنظیم کنید و رکوردهای SPF و DKIM را روی دامنه ثبت کنید. بعد از تنظیم، یک ثبت‌نام آزمایشی انجام دهید و ببینید ایمیل فعال‌سازی واقعاً می‌رسد.</p> <h3>۱۷. کرون را زمان‌بندی کنید</h3> <pre><code>*/15 * * * * /usr/bin/php /path/to/site/cron.php</code></pre> <p>بدون کرون، کارهای زمان‌بندی‌شده مثل انتشار خودکار مطالب، پاک‌سازی کش و ارسال خبرنامه اجرا نمی‌شوند.</p> <h3>۱۸. پشتیبان‌گیری خودکار</h3> <p>پشتیبان دیتابیس <em>و</em> پوشه‌ی <code>uploads/</code>. نسخه‌ی پشتیبان باید جایی خارج از همان سرور نگهداری شود. و مهم‌تر از گرفتن پشتیبان: یک بار بازگردانی‌اش را روی یک محیط آزمایشی امتحان کنید. پشتیبانی که تست نشده، پشتیبان نیست.</p> <h2>گروه‌های کاربری — نکته‌ی پایانی</h2> <p>پیش از باز کردن ثبت‌نام، دسترسی گروه «مهمان» و «کاربر عادی» را مرور کنید. پیش‌فرض‌ها سخاوتمندانه‌اند. مواردی که معمولاً باید محدود شوند:</p> <ul> <li>ارسال مطلب بدون تأیید مدیر</li> <li>استفاده از HTML در نظرات</li> <li>آپلود فایل</li> <li>ارسال پیام خصوصی برای کاربران تازه‌ثبت‌نام‌کرده</li> </ul> <h2>جمع‌بندی</h2> <p>هیچ‌کدام از این هجده مورد بیش از چند دقیقه وقت نمی‌گیرد، ولی مجموعشان تفاوت بین یک سایت حرفه‌ای و یک سایت آسیب‌پذیر است. چک‌لیست را جایی نگه دارید و برای هر سایت تازه‌ای که راه می‌اندازید یک بار از رویش رد شوید.</p> <div class="xread"><b>بیشتر بخوانید</b><ul> <li><a href="/blog/blog-tutorials/27-dle-seo-friendly-urls.html">آدرس‌های سئوپسند در دیتالایف ۲۰: پیکربندی کامل و بدون محتوای تکراری</a></li> <li><a href="/blog/blog-tutorials/28-dle-core-web-vitals.html">بهینه‌سازی Core Web Vitals در قالب دیتالایف: LCP، CLS و INP</a></li> <li><a href="/plugins/33-clean-html-plugin.html">افزونه پاک‌سازی HTML مطلب</a></li> </ul></div>]]></content:encoded>
</item><item>
<title>هفت اشتباه رایج که سرعت سایت دیتالایف شما را می‌گیرد</title>
<link>https://dleplugin.ir/blog/blog-tutorials/23-seven-dle-speed-mistakes.html</link>
<pdalink>https://dleplugin.ir/blog/blog-tutorials/23-seven-dle-speed-mistakes.html</pdalink>
<guid>https://dleplugin.ir/blog/blog-tutorials/23-seven-dle-speed-mistakes.html</guid>
<pubDate>12:36:38 +0330 پنجشنبه، 22 مرداد 1405</pubDate>
<category>index</category>

<content:encoded><![CDATA[<p>سرعت سایت مستقیم روی رتبه و نرخ تبدیل اثر می‌گذارد. این هفت مورد شایع‌ترین دلایل کندی سایت‌های دیتالایف هستند.</p> <h3>۱. کش خاموش است</h3> <p>ساده‌ترین و مؤثرترین تنظیم. در تنظیمات عمومی، کش را روشن کنید و مدت آن را متناسب با نرخ انتشار مطلب تعیین نمایید.</p> <p class="xlink">برای سنجیدن اثر هر تغییر با همان معیارهایی که گوگل اندازه می‌گیرد، <a href="/blog/blog-tutorials/28-dle-core-web-vitals.html">راهنمای بهینه‌سازی Core Web Vitals</a> را کنار این فهرست داشته باشید.</p> <h3>۲. تصاویر بدون تغییر اندازه آپلود می‌شوند</h3> <p>تصویر ۴۰۰۰ پیکسلی برای جایی که ۸۰۰ پیکسل نمایش داده می‌شود، فقط پهنای باند مصرف می‌کند. حداکثر عرض تصویر و ساخت بندانگشتی را در تنظیمات فعال کنید.</p> <h3>۳. افزونه‌های همپوشان</h3> <p>دو افزونه که یک کار را انجام می‌دهند، دو برابر کوئری می‌زنند. فهرست افزونه‌های فعال را مرور کنید.</p> <div class="xread"><b>بیشتر بخوانید</b><ul> <li><a href="/blog/blog-tutorials/28-dle-core-web-vitals.html">بهینه‌سازی Core Web Vitals در قالب دیتالایف: LCP، CLS و INP</a></li> <li><a href="/blog/blog-tutorials/30-dle-post-install-checklist.html">چک‌لیست تنظیمات دیتالایف انجین پس از نصب: ۱۸ کاری که باید انجام دهید</a></li> <li><a href="/blog/blog-tutorials/26-dle-template-structure-guide.html">ساختار قالب دیتالایف انجین: راهنمای کامل فایل‌های TPL</a></li> </ul></div>]]></content:encoded>
</item></channel></rss>