⏸ انتهى التطوير - مفتوح للتسليم
لسوء الحظ، أنا أفتقر إلى الوقت والطاقة لدعم تطوير هذا البرنامج المساعد بنشاط. سأقوم بأرشفة البرنامج المساعد كما هو في الوقت الحاضر. انتبه إلى أنه لا يدعم Kirby 3.6+. إذا كان أي شخص يرغب في تولي مسؤولية هذا البرنامج الإضافي ومواصلة تطويره، سأكون سعيدًا جدًا - يرجى الاتصال بنا.
قم بتنزيل هذا المستودع وفك ضغطه ونسخه إلى /site/plugins/search
.
وبدلاً من ذلك، يمكنك تثبيته باستخدام الملحن:
composer require distantnative/search-for-kirby
حدد الموفر الذي تريد استخدامه (انظر أدناه للتعرف على الموفرين المتاحين). ولا تنس إنشاء الفهرس (أدناه أيضًا) قبل التشغيل الأول، في حالة استخدام موفر Sqlite أو Algolia.
استبدل المجلد /site/plugins/search
بالإصدار الجديد. تأكد من قراءة ملاحظات الإصدار لكسر التغييرات.
أو إذا قمت بتثبيت البرنامج المساعد عبر الملحن، قم بتشغيل:
composer update distantnative/search-for-kirby
يوفر البرنامج المساعد بحثًا عالميًا عبر إدخالات مختلفة مجتمعة: pages
files
users
.
يمكنك تحديد ما يجب تضمينه كمدخلات في الفهرس (باستخدام لغة استعلام Kirby) أو حتى تعطيل نوع ما بالكامل في site/config/config.php
:
' search ' => [
' entries ' => [
' pages ' => ' site.find("projects").index ' ,
' files ' => false ,
// users will remain the default
]
]
بشكل افتراضي، يتم تضمين المجموعات التالية في الفهرس:
pages
site.index
files
site.index.files
users
kirby.users
يمكنك تحديد حقول المحتوى الخاصة بصفحاتك وملفاتك ومستخدميك في ملف config.php
الخاص بك والتي سيتم تضمينها في البحث:
' search ' => [
' fields ' => [
' pages ' => [
' title '
],
' files ' => [
' filename '
],
' users ' => [
' email ' ,
' name '
]
]
]
هناك عدة خيارات لكيفية تحديد الحقول في هذه المصفوفات:
// Simply add the field
' title ' ,
// Add the field, but run it through a field method first
' text ' => ' kirbytext ' ,
// Pass parameters to the field method
' text ' => [ ' short ' , 50 ],
// Use a callback function
' text ' => function ( $ model ) {
return strip_tags ( $ model -> text ()-> kt ());
}
// Turn string field value into number (e.g. for Algolia filters)
' myNumberField ' => function ( $ model ) {
return $ model -> myNumberField ()-> toFloat ();
}
' myVirtualNumberField ' => function ( $ model ) {
return $ model -> myNumberField ()-> toInt () + 5 ;
}
' myDate ' => function ( $ model ) {
return $ model -> anyDateField ()-> toTimestamp ();
}
يمكنك أيضًا تحديد القوالب (أو الأدوار في حالة المستخدمين) في ملف config.php
الخاص بك والتي سيتم تضمينها في البحث:
' search ' => [
' templates ' => [
' pages ' => function ( $ model ) {
return $ model -> id () !== ' home ' && $ model -> id () !== ' error ' ;
},
' files ' => null ,
' users ' => null
]
]
``
If the value is null or an empty array, all templates are allowed. If it is false, all templates are excluded. There are several other options:
```php
// simple whitelist array
[ ' project ' , ' note ' , ' album ' ]
// associative array
[
' project ' => true ,
' note ' => false
]
// callback function
function ( $ model ) {
return $ model -> intendedTemplate () !== ' secret ' ;
}
يستبدل المكون الإضافي بحث اللوحة الافتراضي (يمكن الوصول إليه في أعلى اليمين عبر رمز العدسة المكبرة) بنموذج البحث الشامل الخاص به:
يستبدل البرنامج المساعد أيضًا أساليب PHP API. نظرًا لأن المكون الإضافي يوفر بحثًا عالميًا، فمن الأفضل استخدامه مع الكائن $site كبداية:
$ site -> search ( ' query ' , $ options = []);
ومع ذلك، يمكن أيضًا أن يقتصر البحث على مجموعات أكثر تحديدًا (مع بعض الخسارة في الأداء):
$ page -> children ()-> listed ()-> filterBy ( ' template ' , ' project ' )-> search ( ' query ' , $ options = []);
يضيف البرنامج المساعد أيضًا وظيفة مساعد search()
:
search (string $ query , $ options = [], $ collection = null )
بالنسبة لمصفوفة الخيارات، يمكنك تمرير خيار حد لتحديد عدد النتائج التي سيتم إرجاعها. علاوة على ذلك، يمكنك تحديد خيار عامل التشغيل ( AND
أو OR
) لتحديد القاعدة التي يتم فيها دمج مصطلحات البحث المتعددة:
collection ( ' notes ' )-> search ( $ query , [
' operator ' => ' AND ' ,
' limit ' => 100
]);
النتيجة التي تتلقاها هي كائن KirbyCmsCollection
.
يجمع البرنامج المساعد ثلاثة موفري بحث مختلفين. اعتمادًا على موقعك واحتياجاتك وإعداداتك، قد يكون أحد هذه العناصر أكثر ملاءمة من الآخرين.
sqlite
(افتراضي)إنشاء قاعدة بيانات فهرس SQLite باستخدام ملحق SQLite FTS5 (يجب أن يكون متاحًا).
في التكوين، يمكنك إعادة تحديد موقع ملف قاعدة البيانات، مما يوفر مسارًا مطلقًا. افتراضيًا، سيتم إنشاء ملف قاعدة البيانات باسم site/logs/search/index.sqlite
.
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' file ' => dirname ( __DIR__ , 2 ) . ' /storage/search/index.sqlite '
]
]
يسمح الخيار الغامض للبحث بمطابقة المحتوى ليس فقط من بداية الكلمات ولكن أيضًا بداخلها. اعتمادًا على المحتوى، يمكن أن يؤدي ذلك إلى زيادة حجم قاعدة بيانات الفهرس بشكل كبير (فكر بشكل كبير)، خاصة عند تضمين حقول نصية طويلة. يمكنك أيضًا تحديد قوائم الحقول لجعلها غامضة.
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
// Enabled for all fields
' fuzzy ' => true ,
// Disabled completely
' fuzzy ' => false ,
// Only for selected fields
' fuzzy ' => [
' pages ' => [ ' title ' ],
' files ' => [ ' caption ' , ' credits ' ]
],
]
]
يمكنك أيضًا تحديد بعض الأوزان المخصصة لتصنيف حقول معينة أعلى من غيرها:
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' weights ' => [
' title ' => 10 ,
' caption ' => 5
],
]
]
algolia
أضف بحث Algolia بسلاسة إلى Kirby مع هذا الموفر:
// site/config/config.php
' search ' => [
' provider ' => ' algolia ' ,
' algolia ' => [
' app ' => . . . , // Algolia App ID
' key ' => . . . , // Algolia private admin key (not just read-only!)
' index ' => ' kirby ' // name of the index to use/create
' options ' => [] // options to pass to Algolia at search
]
]
لإنشاء فهرس أولي، يقوم البرنامج الإضافي بتجميع قسم لوحة صغير يمكنك من خلاله إنشاء الفهرس. أضف القسم التالي إلى مخطط site.yml
الخاص بك على سبيل المثال:
sections :
search :
type : search
افتراضيًا، يتأكد المكون الإضافي من تحديث فهرس البحث في كل حدث (إنشاء صفحة، تحميل ملف، تحديث المحتوى وما إلى ذلك) عبر الخطافات. لذلك لا داعي للقلق بشأن إنشاء فهرس جديد في كل مرة يتم فيها تحرير المحتوى.
لإلغاء تنشيط تحديثات الفهرس التلقائية عبر الخطافات، أضف ما يلي إلى site/config/config.php
:
' search ' => [
' hooks ' => false
]
يمكنك أيضًا إنشاء الفهرس من سطر الأوامر باستخدام البرنامج النصي ./index
Shell المضمن في البرنامج الإضافي. يمكن أن يكون هذا بديلاً لقسم اللوحة (خاصة لملف فهرس كبير جدًا) أو استبدال الخطافات في الإعدادات التي لا تستخدم اللوحة - ثم يتم تشغيلها على سبيل المثال عند نشر التزام جديد أو عبر وظيفة cronjob.
./site/plugins/search/bin/index
إذا كنت تستخدم إعداد مجلد مخصص، فسيتعين عليك إنشاء نسخة معدلة من هذا البرنامج النصي. تواصل معنا، إذا كنت بحاجة إلى مساعدة.
يتم توفير هذا البرنامج المساعد "كما هو" دون أي ضمانات. استخدمه على مسؤوليتك الخاصة واختبره بنفسك دائمًا قبل استخدامه في بيئة الإنتاج. إذا واجهت أي مشكلة، يرجى إنشاء مشكلة.
عند إنشاء الفهرس، قد تواجه خطأ تعذر العثور على برنامج التشغيل. هذا يعني على الأرجح أن إعداد الخادم الخاص بك يفتقد ملحقات Sqlite. لقد نجح الأمر مع المستخدمين الآخرين لتنشيط الامتدادات التالية:
extension=sqlite3.so
extension=pdo_sqlite.so
هذا البرنامج المساعد مجاني تمامًا ويتم نشره بموجب ترخيص MIT. لكن التطوير يحتاج إلى وقت وجهد. إذا كنت تستخدمه في مشروع تجاري أو تريد فقط دعمي للحفاظ على هذا البرنامج الإضافي، فيرجى التبرع من اختيارك.