مجموعة من فئات النموذج التي تتيح لك الحصول على البيانات مباشرة من قاعدة بيانات WordPress.
Corcel عبارة عن مجموعة من فئات PHP المبنية على Eloquent ORM (من إطار عمل Laravel)، والتي توفر واجهة سلسة للاتصال والحصول على البيانات مباشرة من قاعدة بيانات WordPress.
يمكنك استخدام WordPress كواجهة خلفية (لوحة الإدارة) أو CMS، لإدراج المنشورات والأنواع المخصصة وما إلى ذلك وأي تطبيق PHP آخر في الجانب الآخر يستعلم عن تلك البيانات (كطبقة نموذجية). من الأسهل استخدام Corcel مع Laravel، لكن لديك الحرية في استخدامه مع أي مشروع PHP يستخدم Composer.
اشتري لي قهوة | اتبع كورسيل على تويتر
لارافيل | كورسيل |
---|---|
5.1.x | ~2.1.0 |
5.2.x | ~2.2.0 |
5.3.x | ~2.3.0 |
5.4.x | ~2.4.0 |
5.5.x | ~2.5.0 |
5.6.x | ~2.6.0 |
5.7.x | ~2.7.0 |
5.8.x | ~2.8.0 |
6.0.x | ^3.0.0 |
7.0.x | ^4.0.0 |
8.0.x | ^5.0.0 |
9.0.x | ^6.0.0 |
10.0.x | ^7.0.0 |
11.0.x | ^8.0.0 |
تحتاج إلى استخدام Composer لتثبيت Corcel في مشروعك:
composer require jgrossi/corcel
ستقوم Corcel بتسجيل نفسها باستخدام الاكتشاف التلقائي الخاص بـ Laravel.
سيتعين عليك تضمين CorcelServiceProvider
في config/app.php
الخاص بك:
' providers ' => [
/*
* Package Service Providers...
*/
Corcel Laravel CorcelServiceProvider::class,
]
الآن قم بتكوين ملف التكوين الخاص بنا للتأكد من تعيين قاعدة البيانات الخاصة بك بشكل صحيح وللسماح لك بتسجيل أنواع المنشورات المخصصة والأكواد القصيرة بطريقة سهلة للغاية:
قم بتشغيل الأمر Artisan التالي في جهازك الطرفي:
php artisan vendor:publish --provider="CorcelLaravelCorcelServiceProvider"
الآن لديك ملف التكوين config/corcel.php
، حيث يمكنك ضبط اتصال قاعدة البيانات مع جداول WordPress وغير ذلك الكثير.
ما عليك سوى تعيين connection
قاعدة البيانات الذي تريد استخدامه بواسطة Corcel في config/corcel.php
.
لنفترض أن لديك اتصالات قاعدة البيانات التالية في ملف config/database.php
الخاص بك:
// File: /config/database.php
' connections ' => [
' mysql ' => [ // for Laravel database
' driver ' => ' mysql ' ,
' host ' => ' localhost ' ,
' database ' => ' mydatabase ' ,
' username ' => ' admin '
'password' => 'secret',
' charset ' => ' utf8 ' ,
' collation ' => ' utf8_unicode_ci ' ,
' prefix ' => '' ,
' strict ' => false ,
' engine ' => null ,
],
' wordpress ' => [ // for WordPress database (used by Corcel)
' driver ' => ' mysql ' ,
' host ' => ' localhost ' ,
' database ' => ' mydatabase ' ,
' username ' => ' admin ' ,
' password ' => ' secret ' ,
' charset ' => ' utf8 ' ,
' collation ' => ' utf8_unicode_ci ' ,
' prefix ' => ' wp_ ' ,
' strict ' => false ,
' engine ' => null ,
],
],
في هذه الحالة، يجب أن ترغب في استخدام اتصال wordpress
لـ Corcel، لذا فقط قم بتعيينه في ملف تكوين Corcel config/corcel.php
:
' connection ' => ' wordpress ' ,
هنا يجب عليك تكوين قاعدة البيانات لتناسب متطلبات Corcel. أولاً، يجب عليك تضمين ملف Composer autoload
إذا لم يكن قد تم تحميله بالفعل:
require __DIR__ . ' /vendor/autoload.php ' ;
الآن يجب عليك تعيين معلمات قاعدة بيانات WordPress الخاصة بك:
$ params = [
' database ' => ' database_name ' ,
' username ' => ' username ' ,
' password ' => ' pa$$word ' ,
' prefix ' => ' wp_ ' // default prefix is 'wp_', you can change to your own prefix
];
Corcel Database:: connect ( $ params );
يمكنك تحديد جميع معاملات Eloquent، لكن بعضها يكون افتراضيًا (ولكن يمكنك تجاوزها).
' driver ' => ' mysql ' ,
' host ' => ' localhost ' ,
' charset ' => ' utf8 ' ,
' collation ' => ' utf8_unicode_ci ' ,
' prefix ' => ' wp_ ' , // Specify the prefix for WordPress tables, default prefix is 'wp_'
في كل مرة ترى
Post::method()
، إذا كنت تستخدم فئة Post الخاصة بك (حيث تقوم بتعيين اسم الاتصال)، مثلAppPost
فيجب عليك استخدامAppPost::method()
وليسPost::method()
. تفترض جميع الأمثلة أنك تعرف هذا الاختلاف بالفعل.
في الأمثلة، في كل مرة ترى
Post::method()
تفترضCorcelModelPost::method()
.
// All published posts
$ posts = Post:: published ()-> get ();
$ posts = Post:: status ( ' publish ' )-> get ();
// A specific post
$ post = Post:: find ( 31 );
echo $ post -> post_title ;
اختياريًا، يمكنك إنشاء نموذج Post
الخاص بك (أو الصفحة، أو أي شيء آخر) والذي يمتد CorcelPost
. ثم قم بتعيين اسم الاتصال الذي تستخدمه (إذا كنت تريد تجاوز الاسم الافتراضي لـ Corcel)، في هذه الحالة foo-bar
:
يمكن أن يؤدي توسيع فئة
CorcelModelPost
إلى إضافة المرونة إلى مشروعك، بمجرد أن تتمكن من إضافة أساليب مخصصة ومنطق، وفقًا لما تحتاج إلى استخدامه من قاعدة بيانات WordPress الخاصة بك.
<?php // File: app/Post.php
namespace App ;
use Corcel Model Post as Corcel ;
class Post extends Corcel
{
protected $ connection = ' foo-bar ' ;
public function customMethod () {
//
}
}
لذا، يمكنك الآن جلب بيانات قاعدة بيانات WP باستخدام الفصل الخاص بك:
$ posts = App Post:: all (); // using the 'foo-bar' connection
فقط تذكر أنه ليس عليك توسيع فئة
Post
الخاصة بنا، يمكنك استخدامCorcelModelPost
وجميع النماذج الأخرى دون أي مشكلة.
ملاحظة: في Corcel v1، يمكنك حفظ بيانات التعريف باستخدام طريقة
Post::save()
. هذا غير مسموح به بعد الآن. استخدم أساليبsaveMeta()
أوcreateMeta()
(انظر أدناه) لحفظ التعريف المنشور.
يمكنك استرداد البيانات التعريفية من المشاركات أيضًا.
// Get a custom meta value (like 'link' or whatever) from a post (any type)
$ post = Post:: find ( 31 );
echo $ post -> meta -> link ; // OR
echo $ post -> fields -> link ;
echo $ post -> link ; // OR
لإنشاء نموذج بيانات تعريف أو تحديثه، ما عليك سوى استخدام أساليب saveMeta()
أو saveField()
. يُرجعون bool
مثل طريقة Eloquent save()
.
$ post = Post:: find ( 1 );
$ post -> saveMeta ( ' username ' , ' jgrossi ' );
يمكنك حفظ العديد من البيانات الوصفية في نفس الوقت أيضًا:
$ post = Post:: find ( 1 );
$ post -> saveMeta ([
' username ' => ' jgrossi ' ,
' url ' => ' http://jgrossi.com ' ,
]);
لديك أيضًا طريقتان createMeta()
و createField()
، اللتان تعملان مثل طرق saveX()
، لكن يتم استخدامهما فقط للإنشاء وإرجاع مثيل PostMeta
الذي تم إنشاؤه، بدلاً من bool
.
$ post = Post:: find ( 1 );
$ postMeta = $ post -> createMeta ( ' foo ' , ' bar ' ); // instance of PostMeta class
$ trueOrFalse = $ post -> saveMeta ( ' foo ' , ' baz ' ); // boolean
هناك إمكانيات متعددة للاستعلام عن المنشورات حسب حقولها المخصصة (التعريف) باستخدام النطاقات الموجودة على فئة Post
(أو نموذج آخر يستخدم سمة HasMetaFields
):
للتحقق من وجود مفتاح التعريف، استخدم النطاق hasMeta()
:
// Finds a published post with a meta flag.
$post = Post::published()->hasMeta('featured_article')->first();
إذا كنت تريد مطابقة حقل تعريف بدقة، فيمكنك استخدام نطاق hasMeta()
مع قيمة.
// Find a published post which matches both meta_key and meta_value.
$ post = Post:: published ()-> hasMeta ( ' username ' , ' jgrossi ' )-> first ();
إذا كنت بحاجة إلى مطابقة حقول تعريف متعددة، فيمكنك أيضًا استخدام النطاق hasMeta()
لتمرير مصفوفة كمعلمة:
$ post = Post:: hasMeta ([ ' username ' => ' jgrossi ' ])-> first ();
$ post = Post:: hasMeta ([ ' username ' => ' jgrossi ' , ' url ' => ' jgrossi.com ' ])-> first ();
// Or just passing the keys
$ post = Post:: hasMeta ([ ' username ' , ' url ' ])-> first ();
إذا كنت بحاجة إلى مطابقة سلسلة غير حساسة لحالة الأحرف، أو المطابقة مع أحرف البدل، فيمكنك استخدام النطاق hasMetaLike()
مع قيمة. يستخدم هذا عامل تشغيل SQL LIKE
، لذا استخدم '%' كعامل بدل.
// Will match: 'J Grossi', 'J GROSSI', and 'j grossi'.
$ post = Post:: published ()-> hasMetaLike ( ' author ' , ' J GROSSI ' )-> first ();
// Using % as a wildcard will match: 'J Grossi', 'J GROSSI', 'j grossi', 'Junior Grossi' etc.
$ post = Post:: published ()-> hasMetaLike ( ' author ' , ' J%GROSSI ' )-> first ();
تدعم فئة Post
"الأسماء المستعارة"، لذلك إذا قمت بفحص فئة Post
فيجب عليك ملاحظة بعض الأسماء المستعارة المحددة في مصفوفة $aliases
الثابتة، مثل title
post_title
content
post_content
.
$ post = Post:: find ( 1 );
$ post -> title === $ post -> post_title ; // true
إذا كنت تقوم بتوسيع فئة Post
لإنشاء فصلك الدراسي الخاص، فيمكنك استخدام $aliases
أيضًا. ما عليك سوى إضافة أسماء مستعارة جديدة إلى تلك الخاصية الثابتة داخل الفصل الدراسي الخاص بك وسوف ترث تلقائيًا جميع الأسماء المستعارة من فئة Post
الأصلية:
class A extends Corcel Post
{
protected static $ aliases = [
' foo ' => ' post_foo ' ,
];
}
$ a = A:: find ( 1 );
echo $ a -> foo ;
echo $ a -> title ; // from Post class
لترتيب المنشورات، يمكنك استخدام النطاقات newest()
oldest()
لكل من فئتي Post
User
:
$ newest = Post:: newest ()-> first ();
$ oldest = Post:: oldest ()-> first ();
لطلب المنشورات، ما عليك سوى استخدام طريقة Eloquent paginate()
:
$ posts = Post:: published ()-> paginate ( 5 );
foreach ( $ posts as $ post ) {
// ...
}
لعرض روابط ترقيم الصفحات، ما عليك سوى استدعاء طريقة links()
:
{{ $ posts -> links () }}
إذا كنت تريد استرداد حقل مخصص تم إنشاؤه بواسطة البرنامج الإضافي Advanced Custom Fields (ACF)، فيجب عليك تثبيت البرنامج الإضافي corcel/acf
- انقر هنا لمزيد من المعلومات - واستدعاء الحقل المخصص مثل هذا:
$ post = Post:: find ( 123 );
echo $ post -> acf -> some_radio_field ;
$ repeaterFields = $ post -> acf -> my_repeater_name ;
لتجنب استعلامات SQL غير الضرورية، ما عليك سوى تعيين نوع الحقل الذي تطلبه. عادةً ما يكون استعلاما SQL ضروريين للحصول على نوع الحقل، لذا إذا كنت تريد تحديده، فإنك تتخطى هذه الاستعلامات الإضافية:
$ post = Post:: find ( 123 );
echo $ post -> acf -> text ( ' text_field_name ' );
echo $ post -> acf -> boolean ( ' boolean_field_name ' );
يمكنك العمل مع أنواع المنشورات المخصصة أيضًا. يمكنك استخدام طريقة type(string)
أو إنشاء الفصل الدراسي الخاص بك.
// using type() method
$ videos = Post:: type ( ' video ' )-> status ( ' publish ' )-> get ();
// using your own class
class Video extends Corcel Post
{
protected $ postType = ' video ' ;
}
$ videos = Video:: status ( ' publish ' )-> get ();
سيؤدي استخدام طريقة type()
إلى قيام Corcel بإرجاع كافة الكائنات كـ CorcelPost
. باستخدام فئتك المخصصة، لديك ميزة تخصيص الفئات، بما في ذلك الأساليب والخصائص المخصصة، وإرجاع كافة الكائنات Video
، على سبيل المثال.
أنواع المنشورات المخصصة والبيانات التعريفية:
// Get 3 posts with custom post type (store) and show its address
$ stores = Post:: type ( ' store ' )-> status ( ' publish ' )-> take ( 3 )-> get ();
foreach ( $ stores as $ store ) {
$ storeAddress = $ store -> address ; // option 1
$ storeAddress = $ store -> meta -> address ; // option 2
$ storeAddress = $ store -> fields -> address ; // option 3
}
في كل مرة تتصل فيها بشيء مثل Post::type('video)->first()
أو Video::first()
تتلقى مثيل CorcelModelPost
.
إذا اخترت إنشاء فئة جديدة لنوع المنشور المخصص الخاص بك، فيمكنك إرجاع هذه الفئة لجميع مثيلات نوع المنشور هذا.
بدلاً من استدعاء طريقة Post::registerPostType()
لجميع أنواع المنشورات المخصصة التي تريد تسجيلها، ما عليك سوى استخدام ملف تكوين Corcel وتعيين جميع المنشورات المخصصة وفئاتها. سيتم تسجيلهم تلقائيا بالنسبة لك:
' post_types ' => [
' video ' => App Video::class,
' foo ' => App Foo::class,
]
لذلك في كل مرة تقوم فيها بالاستعلام عن نوع منشور مخصص، سيتم إرجاع المثيل المعين.
يعد هذا مفيدًا بشكل خاص عندما تنوي الحصول على مجموعة من المنشورات من أنواع مختلفة (على سبيل المثال، عند جلب المنشورات المحددة في القائمة).
//all objects in the $videos Collection will be instances of Post
$ videos = Post:: type ( ' video ' )-> status ( ' publish ' )-> get ();
// register the video custom post type and its particular class
Post:: registerPostType ( ' video ' , ' AppVideo ' )
//now all objects in the $videos Collection will be instances of Video
$ videos = Post:: type ( ' video ' )-> status ( ' publish ' )-> get ();
يمكنك أيضًا القيام بذلك للفئات المضمنة، مثل الصفحة أو المنشور. ما عليك سوى تسجيل فئة الصفحة أو المنشور باستخدام سلسلة نوع المنشور المرتبطة، وسيتم إرجاع هذا الكائن بدلاً من الكائن الافتراضي.
يمكنك تعيين جميع الرموز القصيرة التي تريدها داخل ملف config/corcel.php
، تحت مفتاح 'shortcodes'
. في هذه الحالة، يجب عليك إنشاء فصلك الخاص الذي implements
واجهة CorcelShortcode
، والذي يتطلب طريقة render()
:
' shortcodes ' => [
' foo ' => App Shortcodes FooShortcode::class,
' bar ' => App Shortcodes BarShortcode::class,
],
هذه عينة من فئة الرمز القصير:
class FakeShortcode implements Corcel Shortcode
{
/**
* @param ShortcodeInterface $shortcode
* @return string
*/
public function render ( ShortcodeInterface $ shortcode )
{
return sprintf (
' html-for-shortcode-%s-%s ' ,
$ shortcode -> getName (),
$ shortcode -> getParameter ( ' one ' )
);
}
}
يمكنك إضافة رموز قصيرة عن طريق استدعاء التابع addShortcode
في نموذج Post
:
// [gallery id="1"]
Post:: addShortcode ( ' gallery ' , function ( $ shortcode ) {
return $ shortcode -> getName () . ' . ' . $ shortcode -> getParameter ( ' id ' );
});
$ post = Post:: find ( 1 );
echo $ post -> content ;
يستخدم Laravel 5.5 الاكتشاف التلقائي للحزم، لذلك لا يتطلب منك إضافة ServiceProvider يدويًا
إذا كنت تستخدم Laravel، فنقترح عليك إضافة معالجات الرموز القصيرة في AppProvidersAppServiceProvider
في طريقة boot
.
يتم تحليل الرموز القصيرة باستخدام مكتبة Thunderer/Shortcode .
يتم توفير عدة موزعين مختلفين. RegularParser
هو الأكثر صحة من الناحية الفنية ويتم توفيره افتراضيًا. وهذا مناسب لمعظم الحالات. ومع ذلك، إذا واجهت بعض المخالفات في تحليل الرمز القصير الخاص بك، فقد تحتاج إلى تكوين Corcel لاستخدام WordpressParser
، والذي يتطابق بشكل أكثر دقة مع الرمز القصير الخاص بـ WordPress. للقيام بذلك، إذا كنت تستخدم Laravel، فقم بتحرير ملف config/corcel.php
، وقم بإلغاء التعليق على المحلل اللغوي المفضل لديك. وبدلاً من ذلك، يمكنك استبدال هذا بمحلل خاص بك.
' shortcode_parser ' => Thunder Shortcode Parser RegularParser::class,
// 'shortcode_parser' => ThunderShortcodeParserWordpressParser::class,
إذا كنت لا تستخدم Laravel، فيمكنك القيام بذلك في وقت التشغيل، عن طريق استدعاء الأسلوب setShortcodeParser()
من أي فئة تستخدم سمة Shortcodes
، مثل Post
، على سبيل المثال.
$ post -> setShortcodeParser ( new WordpressParser ());
echo $ post -> content ; // content parsed with "WordpressParser" class
لمزيد من المعلومات حول حزمة الرمز القصير، انقر هنا.
يمكنك الحصول على تصنيفات لمنشور معين مثل:
$ post = Post:: find ( 1 );
$ taxonomy = $ post -> taxonomies ()-> first ();
echo $ taxonomy -> taxonomy ;
أو يمكنك البحث عن المشاركات باستخدام تصنيفاتها:
$ post = Post:: taxonomy ( ' category ' , ' php ' )-> first ();
يمكنك أيضًا الحصول على تنسيق المنشور، مثل وظيفة WordPress get_post_format()
:
echo $ post -> getFormat (); // should return something like 'video', etc
تشبه الصفحات أنواع المنشورات المخصصة. يمكنك استخدام Post::type('page')
أو فئة CorcelModelPage
.
use Corcel Model Page ;
// Find a page by slug
$ page = Page:: slug ( ' about ' )-> first (); // OR
$ page = Post:: type ( ' page ' )-> slug ( ' about ' )-> first ();
echo $ page -> post_title ;
احصل على فئة أو تصنيف أو قم بتحميل المشاركات من فئة معينة. هناك طرق متعددة لتحقيق ذلك.
// all categories
$ cat = Taxonomy:: category ()-> slug ( ' uncategorized ' )-> posts -> first ();
echo " <pre> " ; print_r ( $ cat -> name ); echo " </pre> " ;
// only all categories and posts connected with it
$ cat = Taxonomy:: where ( ' taxonomy ' , ' category ' )-> with ( ' posts ' )-> get ();
$ cat -> each ( function ( $ category ) {
echo $ category -> name ;
});
// clean and simple all posts from a category
$ cat = Category:: slug ( ' uncategorized ' )-> posts -> first ();
$ cat -> posts -> each ( function ( $ post ) {
echo $ post -> post_title ;
});
الحصول على المرفق و/أو المراجعة من Post
أو Page
.
$ page = Page:: slug ( ' about ' )-> with ( ' attachment ' )-> first ();
// get feature image from page or post
print_r ( $ page -> attachment );
$ post = Post:: slug ( ' test ' )-> with ( ' revision ' )-> first ();
// get all revisions from a post or page
print_r ( $ post -> revision );
الحصول على الصورة المصغرة Post
أو Page
.
$ post = Post:: find ( 1 );
// Retrieve an instance of CorcelModelMetaThumbnailMeta.
print_r ( $ post -> thumbnail );
// For convenience you may also echo the thumbnail instance to get the URL of the original image.
echo $ post -> thumbnail ;
لاسترداد حجم مصغر معين، يمكنك استدعاء الأسلوب ->size()
على كائن الصورة المصغرة وتمرير معلمة سلسلة حجم الصورة المصغرة (على سبيل المثال، thumbnail
أو medium
). إذا تم إنشاء الصورة المصغرة، تقوم هذه الطريقة بإرجاع مجموعة من البيانات التعريفية للصورة، وإلا فسيتم إرجاع عنوان URL للصورة الأصلية كبديل.
if ( $ post -> thumbnail !== null ) {
/**
* [
* 'file' => 'filename-300x300.jpg',
* 'width' => 300,
* 'height' => 300,
* 'mime-type' => 'image/jpeg',
* 'url' => 'http://localhost/wp-content/uploads/filename-300x300.jpg',
* ]
*/
print_r ( $ post -> thumbnail -> size ( Corcel Model Meta ThumbnailMeta:: SIZE_THUMBNAIL ));
// http://localhost/wp-content/uploads/filename.jpg
print_r ( $ post -> thumbnail -> size ( ' invalid_size ' ));
}
في الإصدارات السابقة من Corcel، كان يُطلق على هذه الفئة اسم
Options
بدلاً منOption
(مفرد). لذا احرص على استخدام هذه الفئة دائمًا بصيغة المفرد بدءًا منv2.0.0
.
تمت إزالة الأسلوب
Option::getAll()
في Corcel 2+، لصالحOption::asArray($keys [])
.
يمكنك استخدام فئة Option
للحصول على البيانات من جدول wp_options
:
$ siteUrl = Option:: get ( ' siteurl ' );
يمكنك أيضًا إضافة خيارات جديدة:
Option:: add ( ' foo ' , ' bar ' ); // stored as string
Option:: add ( ' baz ' , [ ' one ' => ' two ' ]); // this will be serialized and saved
يمكنك الحصول على جميع الخيارات في مجموعة بسيطة:
$ options = Option:: asArray ();
echo $ options [ ' siteurl ' ];
أو يمكنك تحديد المفاتيح التي تريد الحصول عليها فقط:
$ options = Option:: asArray ([ ' siteurl ' , ' home ' , ' blogname ' ]);
echo $ options [ ' home ' ];
للحصول على قائمة حسب ارتباطها، استخدم بناء الجملة أدناه. سيتم تحميل عناصر القائمة في متغير items
(وهو عبارة عن مجموعة من كائنات CorcelModelMenuItem
).
عناصر القائمة المدعومة حاليًا هي: الصفحات والمشاركات والروابط المخصصة والفئات.
بمجرد أن يكون لديك مثيلات لفئة MenuItem
، إذا كنت تريد استخدام المثيل الأصلي (مثل الصفحة أو المصطلح الأصلي، على سبيل المثال)، فما عليك سوى استدعاء الأسلوب MenuItem::instance()
. كائن MenuItem
هو مجرد منشور به post_type
يساوي nav_menu_item
:
$ menu = Menu:: slug ( ' primary ' )-> first ();
foreach ( $ menu -> items as $ item ) {
echo $ item -> instance ()-> title ; // if it's a Post
echo $ item -> instance ()-> name ; // if it's a Term
echo $ item -> instance ()-> link_text ; // if it's a custom link
}
سوف يقوم أسلوب instance()
بإرجاع الكائن المطابق:
Post
مثيل لعنصر قائمة post
؛Page
لعنصر قائمة page
؛CustomLink
لعنصر القائمة custom
؛Term
لعنصر قائمة category
.للتعامل مع قوائم متعددة المستويات، قم بالمرور عبر جميع عناصر القائمة لوضعها في المستويات الصحيحة، على سبيل المثال.
يمكنك استخدام الأسلوب MenuItem::parent()
لاسترداد المثيل الأصلي لعنصر القائمة هذا:
$ items = Menu:: slug ( ' foo ' )-> first ()-> items ;
$ parent = $ items -> first ()-> parent (); // Post, Page, CustomLink or Term (category)
لتجميع عناصر القائمة وفقًا لأصولها، يمكنك استخدام الأسلوب ->groupBy()
في مجموعة $menu->items
، وتجميع عناصر القائمة حسب $item->parent()->ID
.
لقراءة المزيد عن طريقة groupBy()
قم بإلقاء نظرة على وثائق Laravel.
يمكنك التعامل مع المستخدمين بنفس الطريقة التي تتعامل بها مع المنشورات:
// All users
$ users = User:: get ();
// A specific user
$ user = User:: find ( 1 );
echo $ user -> user_login ;
إذا كنت تستخدم Laravel 5.4 أو أقدم، فتأكد من تسجيل موفر CorcelServiceProvider
.
وبعد ذلك، حدد موفر المستخدم في config/auth.php
للسماح لـ Laravel بتسجيل الدخول مع مستخدمي WordPress:
' providers ' => [
' users ' => [
' driver ' => ' corcel ' ,
' model ' => Corcel Model User::class,
],
],
يمكنك الآن استخدام واجهة Auth
لمصادقة المستخدمين:
Auth:: validate ([
' email ' => ' [email protected] ' , // or using 'username' too
' password ' => ' secret ' ,
]);
لجعل إعادة تعيين كلمة المرور الخاصة بـ Laravel تعمل مع Corcel، يتعين علينا تجاوز كيفية تخزين كلمات المرور في قاعدة البيانات. للقيام بذلك، يجب عليك تغيير Auth/PasswordController.php
من:
use App Http Controllers Controller ;
use Illuminate Foundation Auth ResetsPasswords ;
class PasswordController extends Controller
{
use ResetsPasswords;
ل
use App Http Controllers Controller ;
use Illuminate Foundation Auth ResetsPasswords ;
use Corcel Laravel Auth ResetsPasswords as CorcelResetsPasswords ;
class PasswordController extends Controller
{
use ResetsPasswords, CorcelResetsPasswords {
CorcelResetsPasswords::resetPassword insteadof ResetsPasswords;
}
يمكنك استخدام فئة AuthUserProvider
لمصادقة المستخدم يدويًا:
$ userProvider = new Corcel Laravel Auth AuthUserProvider ;
$ user = $ userProvider -> retrieveByCredentials ([ ' username ' => ' admin ' ]);
if (! is_null ( $ user ) && $ userProvider -> validateCredentials ( $ user , [ ' password ' => ' admin ' ])) {
// successfully login
}
تذكر أنه يمكنك استخدام كل من
username
والبريد
لإجراء اختبارات phpunit، قم بتنفيذ الأمر التالي:
./vendor/bin/phpunit
إذا كان الأمر global phpunit
مثبتًا لديك، يمكنك فقط كتابة:
phpunit
تمت كتابة جميع الاختبارات باستخدام Sqlite مع قاعدة بيانات :memory
، بحيث يتم تشغيلها في ذاكرتك. جميع الاختبارات تستخدم factories
migrations
. قم بإلقاء نظرة على tests/database/factories
وأدلة tests/database/migrations
لمزيد من المعلومات.
جميع المساهمات مرحب بها للمساعدة في تحسين Corcel.
قبل إرسال طلب السحب (PR)، ضع في اعتبارك الإرشادات التالية:
شوكة https://github.com/corcel/corcel في جيثب؛
انسخ مستودعك المتشعب (وليس مستودع Corcel) محليًا وأنشئ فرعًا خاصًا بك استنادًا إلى الإصدار الذي تريد إصلاحه ( 2.1
أو 2.2
أو 2.3
أو 2.4
أو 2.5
): git checkout -b my-fix-branch 2.5
;
قم بإجراء جميع تغييرات التعليمات البرمجية. تذكر هنا أن تكتب حالة اختبار واحدة على الأقل لأي ميزة تضيفها أو لأي إصلاح خطأ (إذا لم يتم اختبارها بعد). هدفنا هو تغطية التعليمات البرمجية بنسبة 100% بالاختبارات، لذا ساعدنا في كتابة كود أفضل؛-) إذا لم تكن لديك خبرة في الاختبارات، فهذه فرصة جيدة للتعلم. ما عليك سوى إلقاء نظرة على حالات الاختبارات لدينا وسترى مدى بساطتها.
قم بإجراء اختبارات الوحدة محليًا للتأكد من أن تغييراتك لم تكسر أي جزء آخر من التعليمات البرمجية؛
ادفع فرعك الجديد إلى مستودعك المتشعب، وعادةً ما يجب أن يعمل git push origin HEAD
؛
في GitHub مرة أخرى، قم بإنشاء طلب سحب (PR) من فرع my-fix-branch
المخصص الخاص بك (من مستودعك المتشعب) إلى الفرع ذي الصلة ( corcel:2.5
، على سبيل المثال، وليس corcel:master
، من فضلك؛
انتظر الموافقة :-)
رخصة معهد ماساتشوستس للتكنولوجيا © جونيور غروسي