وقتی وبلاگ درخواستی دریافت میکند، ابتدا مسیر درخواست با مسیر مناسب تطبیق داده میشود (برای مثال مسیر post برای /hello-world). سپس دادههای موردنیاز دریافت و فایل قالب Twig تعیینشده برای آن مسیر (post.twig) رندر میشود.
در این فایل میتوانید قالبهای دیگر را وارد کنید یا از وراثت قالبها استفاده کنید. همچنین برای دریافت دادههای بیشتر میتوانید Data API را فراخوانی کنید.
ما از Twig 3.0 برای قالب بندی استفاده می کنیم. این یک زبان قدرتمند با تعداد زیادی برچسب، فیلتر و توابع داخلی است. Twig همچنین دارای اسناد خوب و آسان برای دنبال کردن است، که یکی از دلایلی بود که ما Twig را نسبت به سایر زبانهای قالب انتخاب کردیم. اگر تا به حال از آن استفاده نکرده اید، به صفحه Twig برای طراحان قالب مراجعه کنید، و ایده ای از نحوه کار آن خواهید داشت. در اصل، HTML با قدرت های فوق العاده است.
این پوشه حاوی فایل های قالب است. انواع مختلفی از فایل های قالب وجود دارد
index.twig post.twig_)_footer.twigroute-. ببینید مسیرهای سفارشی زیرroute-authors.twigcomponent-rich-link.twigهنگام رندر کردن قالبهای Twig، دادهها را به عنوان آبجکت به فایل قالب شما ارسال میکنیم. شما از این داده ها برای ایجاد یک رابط کاربری زیبا استفاده خواهید کرد.
4 شیء اصلی در HB وجود دارد: Blog ، Post ، Tag ، و Author. این اشیاء در صفحه Data API توضیح داده شده است.
_blog_lang<html lang="{{ _lang.code }}">_configconfig.yaml) به عنوان یک شی_featured_post_post_tag_author_brandingهر مسیر دارای متغیرهای مختلفی است. ما هر متغیر را با _ پیشوند می کنیم تا با متغیرهایی که در داخل فایل های پوسته تعریف می کنید در تضاد نباشد (بدیهی است که نباید متغیرهای خود را در قالب Twig پیشوند _ قرار دهید)
از شما خواسته میشود که چند متغیر در پوسته خود قرار دهید تا چند چیز کار کنند.
_head</head>. ما به طور خودکار برچسب های SEO، پیوند styles.css و code_head را که توسط وبلاگ نویس تنظیم شده است اضافه می کنیم._foot</body>. ما مجموعه code_foot توسط وبلاگ نویس را قرار می دهیم_comments_comment_count (اختیاری)_newsletterارسال همه متغیرها (به جز _lang) از طریق فیلتر template برای نمایش آنها به عنوان الگو کاملاً ضروری است.
{{ _head | template }}{{ _head | template }} برابر است با {{ include(template_from_string(_head)) }} در Twig. ما فیلتر سفارشی template را تعریف کردیم تا نوشتن آن را برای شما آسانتر کنیم، زیرا اغلب در قالبهای HB استفاده میشود.
ما چند توابع و فیلترهای سفارشی Twig را برای سهولت نوشتن الگوها ارائه می دهیم.
data - تابعی برای فراخوانی Data API. واکشی دادهها را در زیر ببینید.{% set posts = data(endpoint="posts", filter="author.slug=user") %}icon - تابعی برای دریافت نماد.{{ icon('bootstrap', 'arrow-down', 20, 20) }}تعریف عملکرد: icon(iconLibrary, iconName, width, height)
- (arrow-down) از هم جدا می شوند.-regular را به نمادهای معمولی اضافه کنید (calendar-regular)-solid را به نمادهای جامد اضافه کنید (calendar-solid)github)-solid را به نمادهای جامد اضافه کنید (archive-solid)-outline را به طرح کلی نمادها اضافه کنید (archive-outline)در زیر هود، ما از کتابخانه منبع باز php-svg-icons استفاده می کنیم. اگر نیاز به افزودن کتابخانههای نمادهای بیشتری دارید، لطفاً یک PR به آنجا ارسال کنید.
asset_url - فیلتری برای پیوند دارایی ها{{ 'script.js' | asset_url }}<script src="{{ 'script.js' | asset_url }}"></script>
// changes to:
<script src="https://blog.example.com/assets/script.js?v=12931923993"></script>asset - فیلتری برای چاپ مستقیم دارایی ها (فقط برای دارایی های متنی مانند SVG){{ 'beauty.svg' | asset }}pagination_page_url - فیلتری برای تبدیل شماره صفحه به کامل URL<a href="{{ _pagination.page_prev | pagination_page_url }}">Previous Page</a>lang - فیلتری برای ترجمه ها. بیشتر بدانید در بین المللی شدن.lang_by_number - ببینید رشته های شرطی بر اساس یک عدد.language_variant_url - ببینید تغییر زبانtoc - فیلتری برای تولید فهرست مطالب از رشته HTML . {{ _post.content | toc }}به طور پیش فرض، تمام عناوین در فهرست مطالب گنجانده شده است. شما می توانید سطوح را به صورت زیر تنظیم کنید:
{{ _post.content | toc('2,3') }}تفاوت بین توابع و فیلترها می تواند در Twig کاملاً گیج کننده باشد. قانون کلی ما استفاده از توابع برای محاسبه چیزها (data و icon) و استفاده از فیلترها هنگام اعمال تبدیل است (asset_url ، asset ، و غیره).
از تابع data برای واکشی داده ها از Data APIاستفاده کنید.
<!-- Fetch data -->
{% set recent_posts = data(endpoint="posts", sort="published_at DESC", limit="5") %}
<!-- Render UI -->
<div id="recent-posts">
{% for post in recent_posts.data %} {% include '_recent-post-card.twig' with post %} {% endfor %}
</div>از آرگومان با نام endpoint برای تنظیم نقطه پایانی API استفاده کنید. شما می توانید تمام پارامترهای دیگر را فقط با ارسال آنها به عنوان آرگومان های نامگذاری شده به تابع data Twig تنظیم کنید (مثلاً: sort="published_at DESC").
دو راه برای اضافه کردن مسیرهای سفارشی وجود دارد:
route-{route}.twig به پوشه templates مسیرهای سفارشی را تعریف کنند.گزینه اول قویتر است و راه آسانتری را برای تنظیم خودکار متغیرهای ورودی _posts (با فیلتر کردن)، _tag ، _author و غیره ارائه میکند تا بتوانید بدون تماس با Data API به آنها دسترسی داشته باشید. اما، به عنوان یک توسعه دهنده پوسته، باید از گزینه دوم استفاده کنید.
برای مثال، فرض کنید تصمیم گرفتید که پوسته شما صفحهای را میخواهد که همه نویسندگان وبلاگ را فهرست کند. می توانید یک route-authors.twig را به پوشه templates اضافه کنید. اگر وبلاگ درخواستی به /authors دریافت کند، این الگو به صورت خودکار ارائه می شود.