طريقة بسيطة على طراز Laravel لإنشاء فتات الخبز.
هذا المشروع هو النسخة الرسمية من كتاب Laravel Breadcrumbs الأصلي الرائع من تأليف Dave James Miller، ولم يكن من الممكن تحقيقه بدون مجموعة من المساهمين الرائعين في اليوم الأول. شكرا لكم جميعا!
لارافيل | فتات الخبز لارافيل |
---|---|
11.x | 9.x |
10.x | 9.x |
9.x | 9.x |
8.x | 9.x |
7.x | 8.x |
6.x | 8.x |
بالنسبة لإصدارات Laravel الأقدم، قم بالرجوع إلى مشروع GitHub الأصلي. تم عكس جميع العلامات إذا كنت تفضل الرجوع إلى هذه الحزمة، ولكنها لن توفر أي فرق وظيفي.
composer require diglactic/laravel-breadcrumbs
قم بإنشاء ملف يسمى routes/breadcrumbs.php
والذي يبدو كالتالي:
<?php // routes/breadcrumbs.php
// Note: Laravel will automatically resolve `Breadcrumbs::` without
// this import. This is nice for IDE syntax and refactoring.
use Diglactic Breadcrumbs Breadcrumbs ;
// This import is also not required, and you could replace `BreadcrumbTrail $trail`
// with `$trail`. This is nice for IDE type checking and completion.
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
// Home
Breadcrumbs:: for ( ' home ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> push ( ' Home ' , route ( ' home ' ));
});
// Home > Blog
Breadcrumbs:: for ( ' blog ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Blog ' , route ( ' blog ' ));
});
// Home > Blog > [Category]
Breadcrumbs:: for ( ' category ' , function ( BreadcrumbTrail $ trail , $ category ) {
$ trail -> parent ( ' blog ' );
$ trail -> push ( $ category -> title , route ( ' category ' , $ category ));
});
راجع قسم تعريف فتات الخبز لمزيد من التفاصيل.
افتراضيًا، سيتم عرض قائمة مسارات التنقل الخاصة بـ Bootstrap 5. لتغيير ذلك، قم بتهيئة ملف التكوين عن طريق تشغيل هذا الأمر:
php artisan vendor:publish --tag=breadcrumbs-config
ثم افتح config/breadcrumbs.php
وقم بتحرير هذا السطر:
// config/breadcrumbs.php
' view ' => ' breadcrumbs::bootstrap5 ' ,
القيم المحتملة هي:
breadcrumbs::bootstrap5
- Bootstrap 5breadcrumbs::bootstrap4
- Bootstrap 4breadcrumbs::bulma
– بولماbreadcrumbs::foundation6
– الأساس 6breadcrumbs::json-ld
- البيانات المنظمة JSON-LDbreadcrumbs::materialize
- تجسيدbreadcrumbs::tailwind
- Tailwind CSSbreadcrumbs::uikit
– UIkitpartials.breadcrumbs
راجع قسم القوالب المخصصة لمزيد من التفاصيل.
يمكنك أيضًا تحديد طريقة عرض مخصصة في وقت التشغيل.
قم باستدعاء Breadcrumbs::render()
في العرض الخاص بكل صفحة، ثم قم بتمرير اسم مسار التنقل المطلوب استخدامه وأي معلمات إضافية:
{{-- resources/views/home.blade.php --}}
{{ Breadcrumbs :: render ( ' home ' ) } }
{{-- resources/views/categories/show.blade.php --}}
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
راجع قسم Outputing Breadcrumbs للحصول على خيارات الإخراج الأخرى، وراجع Route-Bound Breadcrumbs للحصول على طريقة لربط أسماء مسارات التنقل لتوجيه الأسماء تلقائيًا.
عادةً ما تتوافق مسارات التنقل مع الإجراءات أو أنواع الصفحات. بالنسبة لكل مسار تنقل، يمكنك تحديد اسم وعنوان مسار التنقل وعنوان URL الذي سيتم ربطه به. نظرًا لأنه من المحتمل أن تتغير ديناميكيًا، يمكنك القيام بذلك في الإغلاق، وتمرير أي متغيرات تحتاجها في الإغلاق.
يجب أن توضح الأمثلة التالية:
من المحتمل أن يكون مسار التنقل الأكثر بساطة هو صفحتك الرئيسية، والتي ستبدو كما يلي:
<?php // routes/breadcrumbs.php
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' home ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> push ( ' Home ' , route ( ' home ' ));
});
لإنشاء عنوان URL، يمكنك استخدام أي من طرق Laravel القياسية لإنشاء عنوان URL، بما في ذلك:
url('path/to/route')
( URL::to()
)secure_url('path/to/route')
route('routename')
أو route('routename', 'param')
أو route('routename', ['param1', 'param2'])
( URL::route()
)action('controller@action')
( URL::action()
)'http://www.example.com/'
)سيتم تقديم هذا المثال على النحو التالي:
{{ Breadcrumbs :: render ( ' home ' ) } }
وينتج عن هذا الإخراج:
بيت
هذه صفحة ثابتة أخرى، ولكن مع وجود رابط أصلي قبلها:
<?php // routes/breadcrumbs.php
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' blog ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Blog ' , route ( ' blog ' ));
});
إنه يعمل عن طريق استدعاء الإغلاق لمسار التنقل home
المحدد أعلاه.
سيتم تقديمه على النحو التالي:
{{ Breadcrumbs :: render ( ' blog ' ) } }
وينتج عن هذا الإخراج:
الصفحة الرئيسية / المدونة
لاحظ أن القوالب الافتراضية لا تقوم بإنشاء رابط لآخر مسار تنقل (الرابط الخاص بالصفحة الحالية)، حتى عند تحديد عنوان URL. يمكنك تجاوز ذلك عن طريق إنشاء القالب الخاص بك - راجع القوالب المخصصة لمزيد من التفاصيل.
هذه صفحة تم إنشاؤها ديناميكيًا وتم سحبها من قاعدة البيانات:
<?php // routes/breadcrumbs.php
use App Models Post ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' post ' , function ( BreadcrumbTrail $ trail , Post $ post ) {
$ trail -> parent ( ' blog ' );
$ trail -> push ( $ post -> title , route ( ' post ' , $ post ));
});
سيتم تمرير كائن $post
(ربما نموذج Eloquent، ولكن يمكن أن يكون أي شيء) من العرض:
{{ Breadcrumbs :: render ( ' post ' , $post ) } }
وينتج عن هذا الإخراج:
الصفحة الرئيسية / المدونة / عنوان المشاركة
يمكنك أيضًا ربط استدعاءات الطريقة بـ $trail
. إذا كنت تستخدم PHP 7.4 وما فوق مع دعم وظيفة السهم، فقد تفضل بناء الجملة التالي الأكثر إيجازًا:
Breadcrumbs:: for (
' post ' ,
fn ( BreadcrumbTrail $ trail , Post $ post ) => $ trail
-> parent ( ' blog ' )
-> push ( $ post -> title , route ( ' post ' , $ post ))
);
أخيرًا، إذا كانت لديك فئات متداخلة أو متطلبات خاصة أخرى، فيمكنك استدعاء $trail->push()
عدة مرات:
<?php // routes/breadcrumbs.php
use App Models Category ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' category ' , function ( BreadcrumbTrail $ trail , Category $ category ) {
$ trail -> parent ( ' blog ' );
foreach ( $ category -> ancestors as $ ancestor ) {
$ trail -> push ( $ ancestor -> title , route ( ' category ' , $ ancestor ));
}
$ trail -> push ( $ category -> title , route ( ' category ' , $ category ));
});
بدلا من ذلك، يمكنك إنشاء وظيفة متكررة مثل هذا:
<?php // routes/breadcrumbs.php
use App Models Category ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' category ' , function ( BreadcrumbTrail $ trail , Category $ category ) {
if ( $ category -> parent ) {
$ trail -> parent ( ' category ' , $ category -> parent );
} else {
$ trail -> parent ( ' blog ' );
}
$ trail -> push ( $ category -> title , route ( ' category ' , $ category -> slug ));
});
سيتم تقديم كلاهما على النحو التالي:
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
وينتج عن ذلك:
الصفحة الرئيسية / المدونة / فئة الأجداد / فئة الوالدين / عنوان الفئة
لتخصيص HTML، قم بإنشاء ملف العرض الخاص بك المشابه لما يلي:
{{-- resources/views/partials/breadcrumbs.blade.php --}}
@unless ( $breadcrumbs -> isEmpty () )
< ol class = " breadcrumb " >
@foreach ( $breadcrumbs as $breadcrumb )
@if ( ! is_null ( $breadcrumb -> url ) && ! $loop -> last )
< li class = " breadcrumb-item " >< a href = " {{ $breadcrumb -> url } } " > {{ $breadcrumb -> title } } </ a ></ li >
@else
< li class = " breadcrumb-item active " > {{ $breadcrumb -> title } } </ li >
@endif
@endforeach
</ ol >
@endunless
إذا كنت تريد العمل على قالب مضمن موجود، فقم بتشغيل الأمر التالي:
php artisan vendor:publish --tag=breadcrumbs-views
سيؤدي هذا إلى نسخ كافة القوالب المضمنة في الدليل resources/views/vendor/breadcrumbs/
في مشروعك، مما يسمح لك بإجراء التعديلات مباشرة.
سيتلقى العرض مجموعة تسمى $breadcrumbs
.
كل مسار تنقل عبارة عن كائن يحتوي على المفاتيح التالية:
title
- عنوان مسار التنقلurl
– عنوان URL لمسار التنقل، أو null
إذا لم يتم تقديم أي شيء$data
(راجع البيانات المخصصة)ثم قم بتحديث ملف التكوين الخاص بك باسم العرض المخصص:
// config/breadcrumbs.php
' view ' => ' partials.breadcrumbs ' , // --> resources/views/partials/breadcrumbs.blade.php
بدلًا من ذلك، يمكنك تخطي العرض المخصص واستدعاء Breadcrumbs::generate()
للحصول على مجموعة Breadcrumbs مباشرةً:
@foreach ( Breadcrumbs :: generate ( ' post ' , $post ) as $breadcrumb )
{{-- ... --}}
@endforeach
قم باستدعاء Breadcrumbs::render()
في العرض الخاص بكل صفحة، ثم قم بتمرير اسم مسار التنقل المطلوب استخدامه وأي معلمات إضافية.
{{ Breadcrumbs :: render ( ' home ' ) } }
أو مع المعلمة:
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
لعرض فتات التنقل كبيانات منظمة JSON-LD (عادةً لأسباب تحسين محركات البحث)، استخدم Breadcrumbs::view()
لعرض قالب breadcrumbs::json-ld
بالإضافة إلى القالب العادي. على سبيل المثال:
< html >
< head >
...
{{ Breadcrumbs :: view ( ' breadcrumbs::json-ld ' , ' category ' , $category ) } }
...
</ head >
< body >
...
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
...
</ body >
</ html >
(ملاحظة: إذا كنت تستخدم Laravel Page Speed، فقد تحتاج إلى تعطيل البرنامج الوسيط TrimUrls
.)
لتحديد صورة، قم بإضافتها إلى المعلمة $data
في push()
:
<?php // routes/breadcrumbs.php
use App Models Post ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' post ' , function ( BreadcrumbTrail $ trail , Post $ post ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( $ post -> title , route ( ' post ' , $ post ), [ ' image ' => asset ( $ post -> image )]);
});
(إذا كنت تفضل استخدام البيانات الجزئية أو RDFa، فستحتاج إلى إنشاء قالب مخصص.)
في الاستخدام العادي، يجب عليك استدعاء Breadcrumbs::render($name, $params...)
لعرض فتات التنقل في كل صفحة. إذا كنت تفضل ذلك، يمكنك تسمية مسارات التنقل الخاصة بك بنفس أسماء مساراتك وتجنب هذا التكرار.
تأكد من أن كل مسار من مساراتك له اسم.
<?php // routes/web.php
use Illuminate Support Facades Route ;
// Home
Route:: name ( ' home ' )-> get ( ' / ' , ' HomeController@index ' );
// Home > [Post]
Route:: name ( ' post ' )-> get ( ' /post/{id} ' , ' PostController@show ' );
لمزيد من التفاصيل، راجع المسارات المُسمّاة في وثائق Laravel.
لكل مسار، قم بإنشاء مسار تنقل بنفس الاسم والمعلمات. على سبيل المثال:
<?php // routes/breadcrumbs.php
use App Models Post ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
// Home
Breadcrumbs:: for ( ' home ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> push ( ' Home ' , route ( ' home ' ));
});
// Home > [Post]
Breadcrumbs:: for ( ' post ' , function ( BreadcrumbTrail $ trail , Post $ post ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( $ post -> title , route ( ' post ' , $ post ));
});
لإضافة مسارات التنقل إلى صفحة 404 لم يتم العثور عليها، استخدم الاسم errors.404
:
Breadcrumbs:: for ( ' errors.404 ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Page Not Found ' );
});
استدعاء Breadcrumbs::render()
بدون أي معلمات في ملف التخطيط الخاص بك:
{{-- resources/views/app.blade.php --}}
{{ Breadcrumbs :: render () } }
سيؤدي هذا تلقائيًا إلى إخراج مسارات التنقل المقابلة للمسار الحالي. الأمر نفسه ينطبق على Breadcrumbs::generate()
و Breadcrumbs::view()
:
سنطرح InvalidBreadcrumbException
إذا لم يكن مسار التنقل موجودًا، لتذكيرك بإنشاء واحد. لتعطيل هذا (على سبيل المثال، إذا كان لديك بعض الصفحات التي لا تحتوي على مسارات تنقل)، قم أولاً بتهيئة ملف التكوين، إذا لم تقم بذلك بالفعل:
php artisan vendor:publish --tag=breadcrumbs-config
ثم افتح الملف الذي تم إنشاؤه حديثًا وقم بتعيين هذه القيمة:
// config/breadcrumbs.php
' missing-route-bound-breadcrumb-exception ' => false,
وبالمثل، لمنعه من طرح UnnamedRouteException
إذا لم يكن للمسار الحالي اسم، قم بتعيين هذه القيمة:
// config/breadcrumbs.php
' unnamed-route-exception ' => false,
يستخدم Laravel Breadcrumbs نفس نموذج الربط الذي تستخدمه وحدة التحكم. على سبيل المثال:
<?php // routes/web.php
use Illuminate Support Facades Route ;
Route:: name ( ' post ' )-> get ( ' /post/{post} ' , ' PostController@show ' );
<?php // app/Http/Controllers/PostController.php
use App Http Controllers Controller ;
use App Models Post ;
use Illuminate Contracts View View ;
class PostController extends Controller
{
public function show ( Post $ post ): View // <-- Route bound model is injected here
{
return view ( ' post/show ' , [ ' post ' => $ post ]);
}
}
<?php // routes/breadcrumbs.php
use App Models Post ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' post ' , function ( BreadcrumbTrail $ trail , Post $ post ) { // <-- The same Post model is injected here
$ trail -> parent ( ' home ' );
$ trail -> push ( $ post -> title , route ( ' post ' , $ post ));
});
وهذا يجعل التعليمات البرمجية الخاصة بك أقل تفصيلاً وأكثر كفاءة عن طريق تحميل المنشور من قاعدة البيانات مرة واحدة فقط.
لمزيد من التفاصيل، راجع ربط نموذج المسار في وثائق Laravel.
يقوم Laravel تلقائيًا بإنشاء أسماء مسارات لوحدات التحكم واسعة الحيلة، على سبيل المثال photo.index
، والتي يمكنك استخدامها عند تحديد مسارات التنقل الخاصة بك. على سبيل المثال:
<?php // routes/web.php
use App Http Controllers PhotoController ;
use Illuminate Support Facades Route ;
Route:: resource ( ' photo ' , PhotoController::class);
$ php artisan route:list
+--------+----------+--------------------+---------------+-------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+--------------------+---------------+-------------------------+------------+
| | GET|HEAD | photo | photo.index | PhotoController@index | |
| | GET|HEAD | photo/create | photo.create | PhotoController@create | |
| | POST | photo | photo.store | PhotoController@store | |
| | GET|HEAD | photo/{photo} | photo.show | PhotoController@show | |
| | GET|HEAD | photo/{photo}/edit | photo.edit | PhotoController@edit | |
| | PUT | photo/{photo} | photo.update | PhotoController@update | |
| | PATCH | photo/{photo} | | PhotoController@update | |
| | DELETE | photo/{photo} | photo.destroy | PhotoController@destroy | |
+--------+----------+--------------------+---------------+-------------------------+------------+
<?php // routes/breadcrumbs.php
use App Models Photo ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
// Photos
Breadcrumbs:: for ( ' photo.index ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Photos ' , route ( ' photo.index ' ));
});
// Photos > Upload Photo
Breadcrumbs:: for ( ' photo.create ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' photo.index ' );
$ trail -> push ( ' Upload Photo ' , route ( ' photo.create ' ));
});
// Photos > [Photo Name]
Breadcrumbs:: for ( ' photo.show ' , function ( BreadcrumbTrail $ trail , Photo $ photo ) {
$ trail -> parent ( ' photo.index ' );
$ trail -> push ( $ photo -> title , route ( ' photo.show ' , $ photo ));
});
// Photos > [Photo Name] > Edit Photo
Breadcrumbs:: for ( ' photo.edit ' , function ( BreadcrumbTrail $ trail , Photo $ photo ) {
$ trail -> parent ( ' photo.show ' , $ photo );
$ trail -> push ( ' Edit Photo ' , route ( ' photo.edit ' , $ photo ));
});
لمزيد من التفاصيل، راجع وحدات تحكم الموارد في وثائق Laravel.
(الأسئلة الشائعة ذات الصلة: لماذا لا توجد طريقة Breadcrumbs::resource()؟.)
تعد المعلمة الثانية لـ push()
اختيارية، لذلك إذا كنت تريد مسار تنقل بدون عنوان URL، فيمكنك القيام بما يلي:
$ trail -> push ( ' Sample ' );
في هذه الحالة، $breadcrumb->url
سيكون null
.
تعرض قوالب Bootstrap الافتراضية هذا مع فئة CSS "نشطة"، تمامًا مثل مسار التنقل الأخير، وإلا فإنها ستتحول افتراضيًا إلى نص أسود وليس رمادي والذي لا يبدو صحيحًا.
تقبل طريقة push()
معلمة ثالثة اختيارية، $data
- مصفوفة من البيانات الترابطية العشوائية التي سيتم تمريرها إلى مسار التنقل، والتي يمكنك استخدامها في القالب المخصص الخاص بك.
إذا أردت أن يكون لكل مسار تنقل رمز، على سبيل المثال، فيمكنك القيام بما يلي:
$ trail -> push ( ' Home ' , ' / ' , [ ' icon ' => ' home.png ' ]);
سيتم دمج إدخالات مصفوفة $data
في مسار التنقل كخصائص.
< li >
< a href = " {{ $breadcrumb -> url } } " >
< img src = " /images/icons/ {{ $breadcrumb -> icon } } " >
{{ $breadcrumb -> title } }
</ a >
</ li >
ملاحظة: لا تستخدم title
المفاتيح أو url
، حيث سيتم الكتابة فوقها.
يمكنك تسجيل ردود الاتصال "قبل" و"بعد" لإضافة مسارات التنقل في بداية/نهاية المسار. على سبيل المثال، لإضافة رقم الصفحة الحالية تلقائيًا في النهاية:
<?php // routes/breadcrumbs.php
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: after ( function ( BreadcrumbTrail $ trail ) {
$ page = ( int ) request ( ' page ' , 1 );
if ( $ page > 1 ) {
$ trail -> push ( " Page { $ page }" );
}
});
للحصول على مسار التنقل الأخير للصفحة الحالية، استخدم Breadcrumb::current()
. على سبيل المثال، يمكنك استخدام هذا لإخراج عنوان الصفحة الحالية:
< title > {{ ( $breadcrumb = Breadcrumbs :: current ()) ? $breadcrumb -> title : ' Fallback Title ' } } </ title >
لتجاهل مسار التنقل، أضف 'current' => false
إلى المعلمة $data
في push()
. قد يكون هذا مفيدًا لتجاهل مسارات التنقل الخاصة بترقيم الصفحات:
<?php // routes/breadcrumbs.php
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: after ( function ( BreadcrumbTrail $ trail ) {
$ page = ( int ) request ( ' page ' , 1 );
if ( $ page > 1 ) {
$ trail -> push ( " Page { $ page }" , null , [ ' current ' => false ]);
}
});
< title >
{{ ( $breadcrumb = Breadcrumbs :: current ()) ? " $breadcrumb -> title – " : ' ' } }
{{ ( $page = ( int ) request ( ' page ' )) > 1 ? " Page $page – " : ' ' } }
Demo App
</ title >
للحصول على تصفية أكثر تقدمًا، استخدم Breadcrumbs::generate()
وطرق فئة Collection في Laravel بدلاً من ذلك:
<?php
use Diglactic Breadcrumbs Breadcrumbs ;
$ current = Breadcrumbs:: generate ()-> where ( ' current ' , ' !== ' , false )-> last ();
يمكنك استخدام Breadcrumbs::view()
بدلاً من Breadcrumbs::render()
لعرض قالب آخر غير القالب الافتراضي:
{{ Breadcrumbs :: view ( ' partials.breadcrumbs2 ' , ' category ' , $category ) } }
أو يمكنك تجاوز إعداد التكوين للتأثير على جميع استدعاءات render()
المستقبلية:
<?php
use Illuminate Support Facades Config ;
Config:: set ( ' breadcrumbs.view ' , ' partials.breadcrumbs2 ' );
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
أو يمكنك الاتصال Breadcrumbs::generate()
للحصول على مجموعة Breadcrumbs وتحميل العرض يدويًا:
@include ( ' partials.breadcrumbs2 ' , [ ' breadcrumbs ' => Breadcrumbs :: generate ( ' category ' , $category )] )
إذا قمت باستدعاء Breadcrumbs::render()
أو Breadcrumbs::generate()
بدون أي معلمات، فسوف يستخدم اسم المسار الحالي والمعلمات بشكل افتراضي (كما تم إرجاعه بواسطة طريقة Laravel's Route::current()
).
يمكنك تجاوز هذا عن طريق استدعاء Breadcrumbs::setCurrentRoute($name, $param1, $param2...)
.
للتحقق من وجود مسار تنقل يحمل اسمًا معينًا، اتصل بـ Breadcrumbs::exists('name')
، والذي يُرجع قيمة منطقية.
إذا كنت لا تريد استخدام routes/breadcrumbs.php
، فيمكنك تغييره في ملف التكوين. قم أولاً بتهيئة ملف التكوين، إذا لم تكن قد قمت بذلك بالفعل:
php artisan vendor:publish --tag=breadcrumbs-config
تحديث هذا السطر:
// config/breadcrumbs.php
' files ' => base_path ( ' routes/breadcrumbs.php ' ),
يمكن أن يكون مسارًا مطلقًا، كما هو مذكور أعلاه، أو مصفوفة:
' files ' => [
base_path ( ' breadcrumbs/admin.php ' ),
base_path ( ' breadcrumbs/frontend.php ' ),
],
لذلك يمكنك استخدام glob()
للعثور على الملفات تلقائيًا باستخدام حرف البدل:
' files ' => glob ( base_path ( ' breadcrumbs/*.php ' )),
أو قم بإرجاع مصفوفة فارغة []
لتعطيل التحميل.
إذا كنت تقوم بإنشاء الحزمة الخاصة بك، فما عليك سوى تحميل ملف مسارات التنقل من طريقة boot()
الخاصة بمزود الخدمة الخاص بك:
use Illuminate Support ServiceProvider ;
class MyServiceProvider extends ServiceProvider
{
public function boot (): void
{
if ( class_exists ( ' Breadcrumbs ' )) {
require __DIR__ . ' /breadcrumbs.php ' ;
}
}
}
يمكنك استخدام حقن التبعية للوصول إلى مثيل Manager
إذا كنت تفضل ذلك، بدلاً من استخدام الواجهة Breadcrumbs::
<?php
use Diglactic Breadcrumbs Manager ;
use Illuminate Support ServiceProvider ;
class MyServiceProvider extends ServiceProvider
{
public function boot ( Manager $ breadcrumbs ): void
{
$ breadcrumbs -> for (...);
}
}
فئة Breadcrumbs Manager
قابلة للماكرو، لذا يمكنك إضافة أساليبك الخاصة. على سبيل المثال:
<?php
use Diglactic Breadcrumbs Breadcrumbs ;
Breadcrumbs:: macro ( ' pageTitle ' , function () {
$ title = ( $ breadcrumb = Breadcrumbs:: current ()) ? "{ $ breadcrumb -> title } – " : '' ;
if (( $ page = ( int ) request ( ' page ' )) > 1 ) {
$ title .= " Page $ page – " ;
}
return "{ $ title } - Demo App " ;
});
< title > {{ Breadcrumbs :: pageTitle () } } </ title >
لمزيد من التخصيصات المتقدمة، يمكنك فئة فرعية BreadcrumbsManager
و/أو BreadcrumbsGenerator
، ثم قم بتحديث ملف التكوين باسم الفئة الجديد:
// breadcrumbs/config.php
' manager-class ' => Diglactic Breadcrumbs Manager::class,
' generator-class ' => Diglactic Breadcrumbs Generator::class,
ملاحظة: قد يتغير بناء جملة التكوين بين الإصدارات.
Breadcrumbs::resource()
؟ اقترح بعض الأشخاص إضافة Breadcrumbs::resource()
لمطابقة Route::resource()
، لكن لم يتوصل أحد إلى تطبيق جيد يكون أ) مرنًا بدرجة كافية للتعامل مع الترجمات والموارد المتداخلة وما إلى ذلك، وب ) ليست معقدة للغاية نتيجة لذلك.
يمكنك دائمًا إنشاء ملف خاص بك باستخدام Breadcrumbs::macro()
. إليك نقطة انطلاق جيدة:
<?php // routes/breadcrumbs.php
use App Models SomeModel ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: macro ( ' resource ' , function ( string $ name , string $ title ) {
// Home > Blog
Breadcrumbs:: for ( "{ $ name } .index " , function ( BreadcrumbTrail $ trail ) use ( $ name , $ title ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( $ title , route ( "{ $ name } .index " ));
});
// Home > Blog > New
Breadcrumbs:: for ( "{ $ name } .create " , function ( BreadcrumbTrail $ trail ) use ( $ name ) {
$ trail -> parent ( "{ $ name } .index " );
$ trail -> push ( ' New ' , route ( "{ $ name } .create " ));
});
// Home > Blog > Post 123
Breadcrumbs:: for ( "{ $ name } .show " , function ( BreadcrumbTrail $ trail , SomeModel $ model ) use ( $ name ) {
$ trail -> parent ( "{ $ name } .index " );
$ trail -> push ( $ model -> title , route ( "{ $ name } .show " , $ model ));
});
// Home > Blog > Post 123 > Edit
Breadcrumbs:: for ( "{ $ name } .edit " , function ( BreadcrumbTrail $ trail , SomeModel $ model ) use ( $ name ) {
$ trail -> parent ( "{ $ name } .show " , $ model );
$ trail -> push ( ' Edit ' , route ( "{ $ name } .edit " , $ model ));
});
});
Breadcrumbs:: resource ( ' blog ' , ' Blog ' );
Breadcrumbs:: resource ( ' photos ' , ' Photos ' );
Breadcrumbs:: resource ( ' users ' , ' Users ' );
لاحظ أن هذا لا يتعامل مع الترجمات أو الموارد المتداخلة، ويفترض أن جميع النماذج لها سمة title
(وهو ما لا يمتلكه المستخدمون على الأرجح). قم بتكييفه بالطريقة التي تراها مناسبة.
composer update diglactic/laravel-breadcrumbs
للترقية.php artisan package:discover
للتأكد من اكتشاف Laravel لمزود الخدمة. routes/breadcrumbs.php
افتراضيًا).dd(__FILE__)
في الملف للتأكد من تحميله.dd($files)
في ServiceProvider::registerBreadcrumbs()
للتحقق من صحة المسار.php artisan config:clear
(أو احذف bootstrap/cache/config.php
يدويًا) أو قم بتحديث المسار في config/breadcrumbs.php
.missing-route-bound-breadcrumb-exception
على false
في ملف التكوين لتعطيل عملية التحقق (ولكن لن يتم تحذيرك إذا فاتتك أي صفحات). php artisan config:clear
(أو احذف bootstrap/cache/config.php
يدويًا) أو قم بتحديث المسار في config/breadcrumbs.php
. {{ Breadcrumbs::render() }}
أو {{ Breadcrumbs::view() }}
وليس @include()
. التوثيق: إذا كنت تعتقد أنه يمكن تحسين التوثيق بأي شكل من الأشكال، يرجى تحرير هذا الملف وتقديم طلب سحب.
إصلاحات الأخطاء: الرجاء إصلاحه وفتح طلب السحب. (انظر أدناه للحصول على تعليمات أكثر تفصيلاً.) نقاط إضافية إذا قمت بإضافة اختبار وحدة للتأكد من عدم حدوث ذلك مرة أخرى!
الميزات الجديدة: سيتم قبول الميزات ذات حالة الاستخدام الواضحة وواجهة برمجة التطبيقات (API) المدروسة جيدًا فقط. ويجب أن تكون موثقة وتتضمن اختبارات الوحدة. إذا كنت في شك، قم بتقديم إثبات للمفهوم (إما رمز أو وثائق) وافتح طلب سحب لمناقشة التفاصيل. (نصيحة: إذا كنت تريد ميزة محددة جدًا بحيث لا يمكن تضمينها افتراضيًا، راجع وحدات الماكرو أو الاستخدام المتقدم لمعرفة طرق إضافتها.)
أسهل طريقة للعمل على Laravel Breadcrumbs هي إخبار Composer بتثبيته من المصدر (Git) باستخدام علامة --prefer-source
:
rm -rf vendor/diglactic/laravel-breadcrumbs
composer install --prefer-source
ثم قم بالتحقق من الفرع الرئيسي وقم بإنشاء فرع محلي خاص بك للعمل عليه:
cd vendor/diglactic/laravel-breadcrumbs
git checkout -t origin/main
git checkout -b YOUR_BRANCH
الآن قم بإجراء التغييرات، بما في ذلك اختبارات الوحدة والوثائق (إذا كان ذلك مناسبًا). قم بإجراء اختبارات الوحدة للتأكد من أن كل شيء لا يزال يعمل:
vendor/bin/phpunit
ثم قم بتنفيذ التغييرات. افصل المستودع على GitHub إذا لم تكن قد فعلت ذلك بالفعل، وادفع تغييراتك إليه:
git remote add YOUR_USERNAME [email protected]:YOUR_USERNAME/laravel-breadcrumbs.git
git push -u YOUR_USERNAME YOUR_BRANCH
أخيرًا، انتقل إلى المستودع الموجود على GitHub وقم بإنشاء طلب سحب.
لاستخدام تفرعك الخاص في مشروع ما، قم بتحديث composer.json
في مشروعك الرئيسي كما يلي:
{
// ADD THIS:
"repositories" : [
{
"type" : "vcs" ,
"url" : "https://github.com/YOUR_USERNAME/laravel-breadcrumbs.git"
}
] ,
"require" : {
// UPDATE THIS:
"diglactic/laravel-breadcrumbs" : "dev-YOUR_BRANCH"
}
}
استبدل YOUR_USERNAME
باسم مستخدم GitHub الخاص بك و YOUR_BRANCH
باسم الفرع (على سبيل المثال، develop
). هذا يخبر الملحن باستخدام المستودع الخاص بك بدلاً من المستودع الافتراضي.
لإجراء اختبارات الوحدة:
vendor/bin/phpunit
لتشغيل اختبارات الوحدة وإعادة إنشاء اللقطات:
vendor/bin/phpunit -d --update-snapshots
للتحقق من تغطية الكود:
vendor/bin/phpunit --coverage-html test-coverage
ثم افتح test-coverage/index.html
لعرض النتائج. كن على دراية بحالات الحافة في PHPUnit والتي يمكن أن تجعلها غير دقيقة تمامًا.
ستحتاج الملفات التالية إلى التحديث لإجراء الاختبارات على إصدار Laravel الجديد:
composer.json
laravel/framework
(إصدارات Laravel)php
(الحد الأدنى لإصدار PHP) tests.yml
jobs.phpunit.strategy.matrix.laravel
(إصدارات Laravel)jobs.phpunit.strategy.matrix.php
(إصدارات PHP)jobs.phpunit.strategy.matrix.exclude
(مجموعات غير مدعومة)والوثائق التالية حسب الحاجة:
README.md
UPGRADE.md
Laravel Breadcrumbs هو برنامج مفتوح المصدر مرخص بموجب ترخيص MIT.