ساخت و مدیریت قالب ها در لاراول
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 4 دقیقه

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

در این مقاله می خواهیم یک پکیج جالب و کاربردی لاراول به اسم laravel-theme رو بررسی کنیم. این یک پکیج پایه است که مدیریت قالب ها (تم ها) در لاراول رو پشتیبانی میکنه. به شما اجازه میده تا view ها و asset های خودتون رو در پوشه های مجزا بسازید و گسترش قالب ها رو پشتیبانی میکنه! و این عالیه :)

ویژگی ها :

  • View ها و Asset ها بصورت مجزا در پوشه قالب قرار می گیرند
  • وراثت قالب ها: هر قالب رو گسترش بدید و بصورت سلسله مراتبی قالب بسازید (مثل سبک وردپرس)
  • ادغام Orchestra/Asset برای فراهم کردن مدیریت وابستگی های Asset
  • قالب های جدید رو با کمترین اصلاحی شامل کنید (Include)
  • قالب ها قابل توزیع هستند! یک پکیج قالب تک فایلی بسازید و روی هر اپلیکیشن لاراولی نصب کنید
  • با استفاده از دستورات کنسول, قالب ها رو کنترل کنید

نصب و راه اندازی

چگونه کار می کند؟

خیلی سادست, شما فقط یک پوشه برای هر قالب در مسیر resources/views می سازید و تمام view های خودتون رو جداگانه نگه می دارید. همین موضوع برای asset ها اتفاق میافته: یک پوشه برای هر قالب در مسیر public می سازید. قالب فعال رو انتخاب می کنید و کار تمام است. سایر بخش های اپلیکیشن شما theme-agnostic باقی میمونه که یعنی وقتی شما ('View::make('index شما از طریق پوشه ی قالب انتخاب شده به index.blade.php دسترسی پیدا می کنید. همینطور در مورد asset ها اتفاق میافته. 

طریقه نصب

با استفاده از دستور زیر در کنسول پکیج رو نصب کنید :

composer require "igaster/laravel-theme"

برای لاراول 5.0 و 5.1 از نسخه ی 1.0 پکیج و برای لاراول 5.2 و 5.3 از نسخه ی 1.1 استفاده کنید. ورژن 2 به بعد پکیج هم مخصوص لاراول 5.4 به بعد است.

بعد از نصب پکیج باید در مسیر app/config/app.php کد زیر رو در آرایه Providers اضافه کنید :

Igaster\LaravelTheme\themeServiceProvider::class,

در همون فایل کد زیر رو به آرایه aliases بیافزایید :

'Theme' => Igaster\LaravelTheme\Facades\Theme::class,

کار نصب تمام شد. درصورت تمایل میتونید فایل پیکربندی رو به اپلیکیشن منتشر کنید :

php artisan vendor:publish --provider="Igaster\LaravelTheme\themeServiceProvider"

حالا میتونید برای پروژه لاراولی قالب بسازید و مدیریتشون کنید.

ساخت قالب

دو روش معادل برای تعریف یک قالب وجود دارد. شما میتونید اونی رو که براتون مناسب تره انتخاب کنید.

پیکربندی قالب با یک فایل theme.json

نکته : شما میتونید با استفاده از دستور theme:create در کنسول برای ساخت یک قالب استفاده کنید. این ها قدم های دستی هستند :

در مسیر اصلی view ها یک پوشه جدید ساخته و فایل theme.json رو داخلش بسازید و پیکربندی رو  داخلش بنویسید :

{
  "name"        : "THEME_NAME",
  "asset-path"  : "ASSET_PATH",
  "extends"     : "PARENT_THEME"
}

نکات مهم :

  • THEME_NAME : نام قالب شماست. میتونه هر string باشه.
  • ASSET_PATH : زیرمسیر پوشه public هست. شما باید این رو هم بسازید!
  • PARENT_THEME : نام قالب والد هست. اگر یک قالب مستقل می سازید, این رو null قرار بدین.
  • همچنین میتونید پیکربندی اضافی به فایل json بیافزایید. با استفاده از کدهای
  • ('Theme:getSetting('key و ('Theme:setSetting('key','value میتونید به تنظیمات دسترسی داشته باشید.
  • چرا ما مسیر view ها رو قرار نمیدیم؟ چون مسیر فعلی هست! فقط پوشه فعلی رو تغییر نام بدید و همه چیز به خوبی کار میکنه.

پیکربندی یک قالب در فایل config/themes.php 

ممکنه شما بخواهید تنظیمات قبلی رو بازنویسی کنید (یا قالب جدید تعریف کنید) داخل فایل  config/themes.php کافیه قالب خودتون رو به آرایه themes اضافه کنید. فرمت برای هر قالب خیلی سادست :

// Select a name for your theme
'theme-name' => [

    /*
    |--------------------------------------------------------------------------
    | Theme to extend. Defaults to null (=none)
    |--------------------------------------------------------------------------
    */
    'extends'       => 'theme-to-extend',

    /*
    |--------------------------------------------------------------------------
    | The path where the view are stored. Defaults to 'theme-name' 
    | It is relative to 'themes_path' ('/resources/views' by default)
    |--------------------------------------------------------------------------
    */
    'views-path'    => 'path-to-views',
    
    /*
    |--------------------------------------------------------------------------
    | The path where the assets are stored. Defaults to 'theme-name' 
    | It is relative to laravels public folder (/public)
    |--------------------------------------------------------------------------
    */
    'asset-path'    => 'path-to-assets',

    /*
    |--------------------------------------------------------------------------
    | Custom configuration. You can add your own custom keys.
    | Use Theme::getSetting('key') & Theme::setSetting('key', 'value') to access them
    |--------------------------------------------------------------------------
    */
    'key'           => 'value', 
],

تمام تنظیمات اختیاری هستند و میتونند نادیده گرفته بشوند. مثال داخل فایل پیکربندی رو چک کنید...

تعریف قالب ها

تعریف یک قالب کاملا اختیاری هست.

تا وقتی که با تنظیمات پیش فرض مشکلی نداشته باشید, نیازی به ساخت فایل پیکربندی ندارید! اگر قالب شما هیچ جا هم ثبت نشه, وقتی که فعالش کنید, تنظیمات پیش فرض برایش قرار داده میشه.

برای مثال اگر کد ('Theme::set('my-theme رو قرار دادید و شما فایل theme.json نساختید یا my-theme رو در فایل کانفیگ قرار ندادید, مقادیر پیش فرض به صورت زیر تعیین می شود :

views = THEMES_ROOT_PATH/my-theme
assets = public/my-theme

تنظیمات پیکربندی سفارشی

شما میتونید پیکربندی خودتون رو به یک قالب اضافه کنید (چه در theme.json چه در فایل config/themes.php) 

این یک مثال theme.json است که پیکربندی ها اضافه شده :

{
  "name"        : "myTheme",
  "asset-path"  : "myTheme",
  "views-path"  : "myTheme",
  "extends"     : null,
  "thumbs-size"  : 150,
  "sidebar-position" : "right"
}

همچنین در runtime میتونید به این تنظیمات دسترسی داشته باشید :

Theme::getSetting('key','default'); // read current theme's configuration value for 'key'
Theme::setSetting('key','value');    // assign a key-value pair to current theme's configuration

توجه کنید که تنظیمات کش می شوند و برای تغییر باید کش رو رفرش کنید.

برای مطالعه بیشتر به مستندات مراجعه فرمایید.

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
3 از 1 رای

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید