لدى كل مطور تقريبًا يعمل مع إطار عمل معين لفترة طويلة مجموعة من أدواته الخاصة التي تتيح تسريع عملية تطوير الموقع. ومع ذلك ، في كثير من الأحيان ، فهي سيئة التنظيم ، وليس لديها وثائق ويتم الانتهاء منها في "عملية" الإنتاج.
كانت فكرة مشروع yicms هي جمع كل التطورات الخاصة بإطار Yii2 ، والتي بدت ملائمة في نظام معين ، وفي مقدمتها وضع سهولة الاستخدام والمرونة والقدرة على تسريع عملية تطوير المواقع القياسية بأدواتها. تم تطوير هذا المشروع من قِبل "الروح" ، ولكنه في الوقت الحالي في مرحلة تجريبية.
جوهر yicms هو في مكان ما بين قدرات الإطار والقدرات المعتادة ل CMS. هذا ليس نظام إدارة المحتوى بالمعنى المعتاد للكلمة ، ولكنه مجرد مجموعة من الوحدات التي يمكن أن تسرع بشكل كبير في تطوير الموقع باستخدام أدواته الخاصة ، مع وجود "وصول" كامل إلى قدرات الإطار. الميزات الرئيسية التي يتم تضمينها في yicms هي لوحة الإدارة التي تم إنشاؤها في فصول الطيران والشروح التلقائية التي تسمح لك باستخدام الإكمال التلقائي لـ IDE ولديها واجهة سهلة الاستخدام.
التثبيت والإعداد
لذلك ، دعونا نبدأ مع yicms عن طريق تثبيته. بالنسبة إلى المواعدة ، فإن أسهل طريقة هي استخدام Open Server أو أي نظام خادم آخر مماثل. نظرًا لأن yicms تعتمد اعتمادًا كبيرًا على Yii ، فسنقوم بتثبيته أولاً. للبساطة ، سوف نستخدم القالب الأساسي:
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
بعد قيام الملحن بتثبيت الإطار ، قم بإضافة قسم "طلب" من ملف composer.json مع وحدات yicms الأربع وتشغيل تحديث الملحن.
"require": { "php": ">=5.4.0", "yiisoft/yii2": "~2.0.14", "yiisoft/yii2-bootstrap": "~2.0.0", "yiisoft/yii2-swiftmailer": "~2.0.0 || ~2.1.0", "iliich246/yii2-yicms-common": "dev-master", "iliich246/yii2-yicms-pages": "dev-master", "iliich246/yii2-yicms-essences": "dev-master", "iliich246/yii2-yicms-feedback": "dev-master" },
تمثل كل وحدة مجموعة من الوظائف المحددة ، والتي سيتم النظر فيها في المستقبل. الآن ، فقط قم بتثبيت كل منهم.
التالي تحتاج إلى تذكر لتكوين الخادم. في Open Server ، نستخدم Apache وتكوين .htaccess كما يلي:
لملف .htaccess الجذر:
Options +FollowSymLinks IndexIgnore */* RewriteEngine on RewriteCond %{REQUEST_URI} !^/(web) RewriteRule ^assets/(.*)$ /web/assets/$1 [L] RewriteRule ^css/(.*)$ web/css/$1 [L] RewriteRule ^js/(.*)$ web/js/$1 [L] RewriteRule ^images/(.*)$ web/images/$1 [L] RewriteRule ^files/(.*)$ web/files/$1 [L] RewriteRule (.*) /web/$1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . web/index.php
لملف. htaccess في دليل الويب
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
والخطوة التالية هي لترحيل ترحيل كل وحدة yicms إلى قاعدة البيانات. في وحدة التحكم ، نقوم بتنفيذ الأوامر التالية بالتتابع:
yii migrate/up --migrationPath=@vendor/iliich246/yii2-yicms-common/Migrations
yii migrate/up --migrationPath=@vendor/iliich246/yii2-yicms-pages/Migrations
yii migrate/up --migrationPath=@vendor/iliich246/yii2-yicms-essences/Migrations
yii migrate/up --migrationPath=@vendor/iliich246/yii2-yicms-feedback/Migrations
الآن لنبدأ التهيئة في ملف config / web.php.
تم تكوين قسم الوحدات على النحو التالي:
'modules' => [ 'common' => [ 'class' => 'Iliich246\YicmsCommon\CommonModule', ], 'pages' => [ 'class' => 'Iliich246\YicmsPages\PagesModule', ], 'essences' => [ 'class' => 'Iliich246\YicmsEssences\EssencesModule', ], 'feedback' => [ 'class' => 'Iliich246\YicmsFeedback\FeedbackModule', ], 'redactor' => 'yii\redactor\RedactorModule', ],
تم تكوين قسم bootstrap كما يلي:
'bootstrap' => ['log', 'common', 'pages', 'essences', 'feedback'],
تم تكوين قسم المستخدم على النحو التالي:
'user' => [ 'identityClass' => 'Iliich246\YicmsCommon\Base\CommonUser', 'enableAutoLogin' => true, ],
أزل قسم التعليق urlManager:
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ ], ],
تم تكوين إطار Yii2 ونظام yicms بنجاح.
بعد البداية الأولى ، إذا تم تكوين كل شيء بشكل صحيح ، يجب إنشاء دليل yicms في دليل جذر المشروع والذي سيحتوي على الملفات المتاحة لتغييرات المستخدم وسيتم إنشاء فئات التعليق التلقائي في ذلك أيضًا.

وصف الوحدات المشتركة وصفحات
يتكون نظام yicms من قسمين. قسم Dev ، والذي يجب أن يكون متاحًا للمطور فقط (يمكن كسر الكود فيه) ويجب أن يكون قسم المسؤول متاحًا للوصول إلى مسؤول الموقع (يتم تنفيذ إدارة المحتوى فيه). للبدء ، تحتاج إلى الانتقال إلى قسم Dev ، لذلك تحتاج إلى استخدام عنوان URL التالي:
http://< >/web/common/dev/login-as-dev?hash=123456&asDev
بعد ذلك ، يجب أن تفتح لوحة Dev:

الآن لنبدأ مع وظيفة yicms. أولاً ، في وحدة الصفحات ، سننشئ صفحة تسمى الفهرس ، والتي ستكون الصفحة الرئيسية للموقع. انتقل إلى قائمة الصفحات وقم بإنشاء صفحة جديدة تسمى الفهرس. بشكل افتراضي ، سيتم إنشاء حقول العنوان وصفات meta_description و meta_keywords للصفحة. بالإضافة إلى ذلك ، سنقوم بإنشاء حقل آخر من خلال زر إضافة حقل جديد مع نص الاسم ، وسنترك جميع المعلمات بشكل افتراضي.
الآن إذا كنت تتبع الرابط
http://< >/web/pages/admin
سيتم فتح قسم المشرف. ستكون صفحة الفهرس متاحة فيها لملء المحتوى. املأ جميع الحقول بنص حر.
في وقت إنشاء قسم الفهرس في قسم dev من صفحة الفهرس ، تم إنشاء فئة الفهرس في دليل yicms / Pages / Models ، حيث تم إنشاء التعليقات التوضيحية أيضًا للعنوان ، وصف البيانات ، وحقول meta_keywords ، وكذلك لحقل النص الذي أنشأناه على الطاير. كائن من هذه الفئة يمكننا استخدامه للحصول على قيمة الحقول. النظر في كيفية القيام بذلك. في وحدة التحكم SiteController القياسية للقالب الأساسي في actionIndex ، اكتب ما يلي:
public function actionIndex() { $indexPage = \app\yicms\Pages\Models\Index::getInstance(); return $this->render('index', [ 'indexPage' => $ indexPage ]); }
منذ إنشاء الفئة \ التطبيق \ yicms \ الصفحات \ النماذج \ الفهرس تلقائيًا ، سيعمل الإكمال التلقائي لها في IDE. الآن $ indexPage يمكن استخدامها كمؤشر. الآن افتح طريقة عرض الفهرس. نزيل جميع الأشياء غير الضرورية من هناك ونكتب:
<?php $this->title = $indexPage->title; $this->registerMetaTag([ 'name' => 'description', 'content' => $indexPage->meta_description ]); $this->registerMetaTag([ 'name' => 'keywords', 'content' => $indexPage->meta_keywords ]); ?> <div class="site-index"> <div class="jumbotron"> <h1><?= $indexPage->text ?></h1> </div> <div class="body-content"> </div> </div>
يعد التعليق التوضيحي للمتغير $ indexPage ضروريًا للإكمال التلقائي لـ IDE. الآن استخدام كائن $ indexPage. جميع الحقول التي أنشأناها في قسم التطوير لصفحة الفهرس متاحة في كائن فئة الفهرس ، والتي ، بفضل الشرح التلقائي ، يتم استكمالها بواسطة IDE بعد دخول مشغل الأسهم.
بشكل إجمالي ، في وقت قصير أنشأنا صفحة فهرس تم إنشاء لوحة مسؤول لها تلقائيًا لتحرير محتواها. استخدمنا البرمجة فقط لإنشاء كائن الصفحة في وحدة التحكم القياسية للإطار ، وفي الشكل الذي يمكننا من خلاله استخدام كائن الصفحة بسرعة بفضل الإكمال التلقائي وواجهة بديهية.
درسنا فقط أصغر جزء من قدرات yicms. الآن سوف نقوم بتعقيد الصفحة الرئيسية للموقع باستخدام yicms قليلاً.
yicms يدعم تعدد اللغات من خارج منطقة الجزاء. لتنشيط اللغة الثانية في قسم التطوير في الوحدة النمطية الشائعة ، حدد قائمة اللغات ، ثم حدد اللغة الروسية وقم بتنشيطها:

الآن في لوحة المشرف ، يمكننا ملء الحقول بعدة لغات. يمكنك إنشاء لغات جديدة في النظام. ومع ذلك ، سيكون من الضروري ترجمة لوحة الإدارة باستخدام أدوات إطار العمل العادية. لذلك ، عند إنشاء لغة جديدة ، يجب أن تلتزم ISO. بالنسبة لعناصر التحكم في المحتوى ، سيتم ببساطة إضافة لوحة جديدة بلغة جديدة.
كتل ملف المكون
بعد ذلك ، ضع في الاعتبار عنصر كتل الملفات. في لوحة dev لصفحة الفهرس ، قم بإنشاء كتلة ملف مع وثيقة اسم البرنامج. سيتم ترك إعدادات كتلة أخرى بشكل افتراضي. الآن في لوحة الإدارة لتحرير صفحة الفهرس لملف المستند أصبح متاحًا. قم بتنزيل ملف تعسفي. الآن يمكن عرض رابط تنزيله على صفحة فهرس الموقع:
… <div class="body-content"> <div class="row"> <h3>Document</h3> <a href="<?= $indexPage->document->uploadUrl() ?>"> <?= $indexPage->document ?> </a> </div> … </div>
الآن ، على الصفحة ، سيقوم الرابط بتحميل الملف الذي حمّلناه إلى لوحة المسؤول. بشكل افتراضي ، تعمل كتلة الملف في وضع ملف فردي بجميع اللغات. ومع ذلك ، في لوحة dev ، يمكنك تبديل نوع اللغة إلى نوع Translateable ، وبعد ذلك سيكون من الضروري لكل ملف تحميل ملف خاص به. في هذه الحالة ، سيتم تنزيل الملف الذي تكون لغته نشطة حاليًا على الموقع عبر الرابط. بالطبع ، يمكنك تنزيل لغة معينة ، والتي ستتم مناقشتها لاحقًا.
تتمثل الخطوة التالية في لوحة dev في إنشاء كتلة ملفات وصفات نحدد لها الكتابة كنوع متعدد. في هذا الوضع ، يمكنك تحميل العديد من الملفات لحظر ملف واحد. للقيام بذلك ، في لوحة المسؤول ، في علامة التبويب الوصفات التي تظهر ، قم بتحميل العديد من الملفات التعسفية.
بعد ذلك ، في شكل فهرس ، ندرج الملفات:
… <div class="row"> <h3>Recipes</h3> <?php foreach ($indexPage->recipes as $recipe): ?> <a href="<?= $recipe->uploadUrl() ?>"> <?= $recipe ?> </a> <?php endforeach; ?> </div> …
في وضع الكتابة المتعدد ، يمكن تجاوز كتلة الملف من خلال foreach أو أداة التكرار.
عنصر كتلة الصور
الآن النظر في عنصر كتلة الصور. قم بإنشاء كتلة صور لصفحة الفهرس ، مع ترك كل الإعدادات الافتراضية. على غرار كتل الملفات في لوحة المشرف ، أصبح من الممكن تحميل صورة. تحميل صورة التعسفي. الآن في شكل فهرس نكتب ما يلي:
<div class="row"> <h3>Image</h3> <img src="<?= $indexPage->picture ?>" alt=""> </div>
على غرار ملفات الصور ، يتم تحميل واحد افتراضيًا في جميع اللغات ، ومع ذلك ، بالنسبة للصور ، يمكن تغيير هذا السلوك في لوحة dev وتحميل صورتك لكل لغة. يمكنك أيضًا تحميل العديد من الصور في كتلة واحدة.
قم بإنشاء كتلة من معرض الصور في لوحة dev ، سيتم تعيين نوعها على هيئة صور متعددة. بالنسبة للصور ، يمكنك أيضًا تعليق حقول النص بسرعة. لذلك ، في نافذة الوسائط لإعداد كتلة المعرض ، دعنا نذهب إلى قسم "عرض حقل كتلة الصورة". في هذا القسم للصور ، قم بإنشاء حقول بها أسماء واسم بديل. الآن في لوحة المسؤول لكل صورة ، من الممكن تعيين حقول نصية بديلة واسمها. تتوفر أيضًا في yicms للصور خارج الصندوق القدرة على "الاقتصاص" وإنشاء صور مصغرة. على سبيل المثال ، قم بإنشاء قالب مصغر لكتلة المعرض. في نافذة مشروط من كتلة الصورة ، انتقل إلى قسم "تكوين الصور المصغرة". في ذلك ، سنقوم بإنشاء مكون مصغّر يحمل الاسم "x2" والمعلمة divider = 2 والجودة = 80. بالاسم ، سنتمكن من الوصول إلى المصغّر ، وسيحدد المقسم مقدار تقليل حجم الصورة الأصلية ، وستحدد الجودة جودة الضغط للصورة المصغرة. بعد ذلك ، قم بإنشاء قالب مصغر آخر باستخدام المعلمات: program_name = "x5" ، divider = 5 ، quality = 50. الآن ، عندما نقوم بتحميل الصورة من لوحة المسؤول ، سيتم تلقائيًا إنشاء مصغرتين لها باستخدام المعلمات التي حددناها.
الآن تحميل بعض الصور إلى لوحة المسؤول لمجموعة المعرض. بعد إنشاء الصورة وتحميلها ، يمكنك ملء حقول alt والاسم ، التي أنشأناها في لوحة dev. دعونا نرى كيفية عرض كل هذا على الموقع.
<div class="row"> <?php foreach($indexPage->gallery->getImages() as $image): ?> <div class="col-lg-4"> <img src="<?= $image ?>" width="100%" alt="<?= $image->alt ?>"> <img src="<?= $image->outputThumbnail('x2') ?>" alt="<?= $image->alt ?>"> <img src="<?= $image->outputThumbnail('x5') ?>" alt="<?= $image->alt ?>"> <p><?= $image->name ?></p> </div> <?php endforeach; ?> </div>
هنا تُرجع طريقة getImages () مجموعة من كائنات التطبيق \ yicms \ Pages \ Models \ Index \ Images \ class للفصل التلقائي ، حيث تم إنشاء التعليقات التوضيحية لحقول بديل واسم متاح للإكمال التلقائي لـ IDE. أيضًا ، عند استدعاء طريقة الإخراج (<Thumbnail Template Name>) على الكائن ، نحول الكائن إلى وضع إخراج المصغر.
بالنسبة إلى كتل الصور ، من الممكن إنشاء ليس فقط الحقول ولكن أيضًا الشروط ، والتي سننظر فيها لاحقًا. يمكن أيضًا إنشاء الحقول والشروط لكتل الملفات. وهي تعمل على مبدأ مماثل.
شروط المكون
الآن النظر في العنصر التالي. هذه هي الشروط. الشروط ملائمة لإنشاء قوائم لوحة الإدارة وخانات الاختيار وما إلى ذلك. والتي سوف تحدد سلوك معين عند صفحات العمل. لنلقِ نظرة على مثال. قم بإنشاء شرط يسمى الخلفية في لوحة dev في صفحة الفهرس. اكتب حدد "حدد نوع القائمة المنسدلة". بعد إنشاء الشرط ، سننتقل إلى قسم "خيارات شرط التهيئة". قم بإنشاء ثلاث قيم شرطية بقيم شفافة وحمراء وخضراء.
بعد ذلك ، سيظهر شرط مع قائمة منسدلة تحتوي على القيم TRANSPARENT و RED و GREEN في لوحة المشرف لصفحة الفهرس. يتم تحويلها إلى أحرف كبيرة ، لأنه في فئة التعليق التلقائي التي تم إنشاؤها يتم تمثيلها كثوابت.
الآن دعونا نحاول استخدام الشرط الذي تم إنشاؤه. نستخدمها بطريقة مختلفة قليلاً لإظهار الاحتمالات الأخرى. نظرًا لأن صفحة الفهرس هي الصفحة الرئيسية في الموقع ، فسيكون صحيحًا بشكل صحيح تغيير لون خلفية الموقع من إعداداته. لذلك ، سيكون شرطنا هو تغيير لون الخلفية في جميع أنحاء الموقع ، لذلك سنقوم بإدخاله في تخطيط وحدة التحكم. افتح ملف قالب التخطيط لإطار Yii2 الأساسي وقم بإنشاء كائن فهرس:
<?php use app\widgets\Alert; use yii\helpers\Html; use yii\bootstrap\Nav; use yii\bootstrap\NavBar; use yii\widgets\Breadcrumbs; use app\assets\AppAsset; AppAsset::register($this); $pagesIndex = \app\yicms\Pages\Models\Index::getInstance(); ?> <?php $this->beginPage() ?> <!DOCTYPE html> <html lang="<?= Yii::$app->language ?>"> <head> <meta charset="<?= Yii::$app->charset ?>"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <?php $this->registerCsrfMetaTags() ?> <title><?= Html::encode($this->title) ?></title> <?php $this->head() ?> </head> <body> <?php $this->beginBody() ?> …
نظرًا لأن كائن فئة Index يشبه حرف مفرد ، فيمكننا استدعاء الأسلوب getInstance () الثابت بقدر ما نرغب دون المخاطرة بإجراء استعلامات قاعدة بيانات مكررة إضافية ونفقات عامة أخرى عند إنشائها. الآن باستخدام كائن $ pagesIndex ، سنقوم بتغيير العلامة عن طريق إضافة نمط مضمن إليها:
<body style="background-color: <?php if ($pagesIndex->background->value() == \app\yicms\Pages\Models\Index\Conditions\Background::TRANSPARENT):?> transparent; <?php elseif ($pagesIndex->background->value() == \app\yicms\Pages\Models\Index\Conditions\Background::RED):?> #FFD3D3 <?php else: ?> #BBFFC8 <?php endif; ?> ">
عن طريق استدعاء $ pagesIndex-> background-> value () والمقارنة مع الثابت الذي تم إنشاؤه في فئة التعليق التلقائي \ التطبيق \ yicms \ الصفحات \ النماذج \ الفهرس \ الشروط \ الخلفية ، نختار لون خلفية الموقع.
بعد ذلك ، خذ بعين الاعتبار قدرات الفئات المشروح تلقائيًا. أثناء تشغيل yicms ، تحدث الكثير من الأحداث التي يمكن معالجتها بواسطة إطار Yii. نعطي مثالا.
app\yicms\Pages\Models\Index\Fields\Text
تم إنشاء هذا الملف بواسطة مُعلق تلقائي عندما أنشأنا حقل النص لصفحة الفهرس في لوحة dev. عندما نكتب <؟ = $ IndexPage-> text؟> في القالب ، يتم إنشاء شيء مشابه للفرد المفرد من هذه الفئة المعينة ، والذي يتم إلقاؤه في القالب إلى سلسلة باستخدام السحر __toString ().
لتغيير المحتوى ، نحن نشترك في الحدث ومعالجته من خلال وظيفة رد الاتصال:
class Text extends Field { public function init() { $this->on(self::EVENT_BEFORE_OUTPUT, function($event) { }); } }
يحدث الحدث EVENT_BEFORE_OUTPUT قبل عرض محتويات الحقل. دعنا نحاول تغييره. للقيام بذلك ، نستخدم كائن الحدث \ Iliich246 \ YicmsCommon \ Base \ HookEvent:
$this->on(self::EVENT_BEFORE_OUTPUT, function($event) { $value = $event->getHook(); $value = strrev($value); $event->setHook($value); });
يحصل الحدث HookEvent على قيمة الحقل قبل وقع الحدث. في الحدث ، يمكنك الحصول على هذه القيمة من خلال $ event-> getHook () ، وتغييرها ، وإرسالها مرة أخرى إلى الكائن من خلال الحدث باستخدام $ event-> setHook ($ value). وبالتالي ، في هذا الحدث ، قلبنا النص الذي يعرضه حقل النص للخلف.
يحتوي كل فصل دراسي مستأجر تقريبًا على عدد من الأحداث التي يمكن توصيلها بطريقة مماثلة ، لكن نظرها يتجاوز نطاق مقالة تقصي الحقائق.
في المجموع ، في هذه المقالة ، درسنا وحدتي yicms ، وهما الوحدات النمطية المشتركة والصفحات. تتضمن الوحدة النمطية المشتركة مكونات مثل الحقول وكتل الملفات وكتل الصور والشروط. وحدة الصفحات هي المسؤولة عن إنشاء كائنات الصفحة التي تحتوي على جميع عناصر الوحدة النمطية المشتركة. أي تعتمد كل وحدات yicms على الوحدة النمطية الشائعة الرئيسية.
Yii2-yicms-essences module
الآن دعنا نتعرف على وحدة Essences. تم تصميم هذه الوحدة النمطية لإنشاء كيانات من فئة النوع-> كيان ، على سبيل المثال ، فئة البضائع-> البضائع ، نوع السيارة (السيارات ، الدراجات النارية) -> مركبة محددة ، إلخ. داخل الوحدة النمطية ، تسمى هذه العناصر الفئات والتمثيلات.
على سبيل المثال ، نعرض إنشاء كتالوج بسيط للفئة-> نوع المنتج لمتجر عبر الإنترنت.
في قسم Dev من وحدة Essences ، دعنا نذهب إلى قائمة الجواهر والانتقال إلى قسم إنشاء الجوهر الجديد. نعطيها منتجات اسم البرنامج ، ونترك بقية الإعدادات بشكل افتراضي. افتراضيًا ، يتم إنشاء كيان بسلوك: يمكن أن ينتمي عرض واحد إلى فئة واحدة. ومع ذلك ، يمكنك تحديد سلوكيات أخرى: مجرد إنشاء طرق عرض بدون فئات ، أو يمكن أن ينتمي عرض واحد إلى عدة فئات.
يتم بناء الفئات نفسها على مبدأ شبيه بالشجرة ، عندما يكون لأي فئة أحد الوالدين (باستثناء الفئة العليا). أي الفئات هي أوراق بنية نوع شجرة.
إجمالي منتجات الكيانات التي تم إنشاؤها. بالنسبة لها ، تم إنشاء فصول توضيحية تلقائية في دليل التطبيق \ yicms \ Essences \ Models. بعد ذلك ، في لوحة dev ، نحتاج إلى إنشاء قوالب للفصول وقوالب العروض التقديمية. كل هذا يشبه الطريقة التي أنشأناها لصفحة الفهرس. تتوفر عناصر الحقول وكتل الملفات وكتل الصور والشروط في وضع الإنشاء الفوري. بمجرد الانتهاء من إنشاء قوالب في لوحة الإدارة ، يصبح ذلك متاحًا لإنشاء فئات وطرق عرض مع عناصر القوالب التي قمنا بتعيينها في لوحة dev.
لذلك ، سنقوم بإنشاء عدة فئات من البضائع. ولكل فئة من المنتجات هناك العديد من المنتجات. بمجرد القيام بذلك ، يمكن عرض كل شيء على الموقع الرئيسي. النظر في كيفية القيام بذلك. في SiteController ، قم بإنشاء إجراء actionProcuts:
public function actionProducts() { $productsEssence = Products::getInstance(); return $this->render('products', [ 'productsEssence' => $productsEssence ]); }
إنشاء طريقة عرض المنتجات لذلك
<?php ?> <div class="body-content"> <?php foreach($productsEssence->categories as $category): ?> <h1>: <?= $category->name ?></h1> <?php foreach($category->represents as $product): ?> <h2>: <?= $product->name ?></h2> <?php endforeach; ?> <?php endforeach; ?> </div>
بفضل آلية التعليق التلقائي ، تقوم طريقة $ productsEssence-> Categories بإرجاع مجموعة من الكائنات من التطبيق \ yicms \ Essences \ Models \ Models class class المشروح تلقائيًا. كما هو الحال في الفصول التوضيحية التلقائية السابقة في هذه الفئة ، توجد تعليقات توضيحية على الحقول التي أنشأناها سريعًا ، وسيكون IDE قادرًا على استخدام الإكمال التلقائي. تجدر الإشارة أيضًا إلى أنه تم تطوير فئات التعليقات التوضيحية التلقائية بفكرة أن المستخدم yicms سوف يكون قادرًا على وضع منطق أعمالهم الخاص بهم ، أي يمكنك كتابة التعليمات البرمجية الخاصة بك فيها ، وتغيير آلية التعليق التلقائي على المساحات المحددة بشكل خاص ولن يتأثر أي رمز مستخدم.
تُرجع الطريقة $ category-> method أيضًا صفيفًا من كائنات التطبيق \ yicms \ Essences \ Models \ ProductsRepresents التي لها نفس مزايا التعليق التلقائي كما هو الحال بالنسبة للفئات. بالطبع ، هناك طرق أكثر مرونة للحصول على الأفكار. على سبيل المثال ، تقوم الفئة $> getRepresentsQuery () بإرجاع كائن ActiveQuery لإطار عمل Yii2 ، والذي يمكن تخصيصه بشكل أكبر لتحسين استعلام قاعدة البيانات ، المستخدم لإنشاء ترقيم الصفحات أو التحميل البطيء.
إجمالًا ، تتيح لك وحدة Essenses إنشاء هيكل عظمي لوظائف المتجر بسرعة ، مع عمل لوحة الإدارة بالفعل. يمكن كتابة منطق عمل إضافي في الفصول التوضيحية التلقائية.
Yii2-yicms-feedback module
تهدف هذه الوحدة إلى إنشاء نماذج إدخال المعلومات على الموقع من قبل الزوار ومستخدمي الموقع. تبقى أيديولوجية العمل كما هي ، أولاً في لوحة dev نكتب الحقول المطلوبة للنموذج.
النظر في تشغيل الوحدة النمطية كمثال. قم بإنشاء سجل مع رسائل اسم البرنامج في لوحة dev في وحدة الملاحظات. في صفحة إعدادات الرسائل ، يمكننا رؤية زر قوالب صفحات الملاحظات. باستخدام هذا الرابط ، يمكننا إنشاء عناصر من حقل الكتابة ، كتلة الملفات ، كتلة الصور ، الشروط التي يمكن استخدامها لتنسيق محتوى صفحة الرسائل. لا تختلف عن تلك التي اعتبرناها في وحدة الصفحات. الآن نحن مهتمون أكثر بقسم قوالب إدخال الملاحظات. في هذا القسم ، يمكننا إنشاء كيانات مثل حقول الإدخال وملفات الإدخال وصور الإدخال وشروط الإدخال. هذه الكيانات هي فقط ما تحتاجه لإنشاء نماذج إدخال مخصصة.
إنشاء حقلين الإدخال مع اسم الأسماء واللقب.
صورة إدخال اسمه الصورة. شرط الإدخال اسمه الاتفاق. الآن ، دعنا نترك جميع الإعدادات لهذه الكيانات افتراضية. في وقت لاحق من هذا المثال ، سنقوم بتكوين أجهزة التحقق من الصحة التي يتم تعليقها أيضًا على هذه الكيانات أثناء التنقل (تتوفر أدوات التحقق من الصحة أيضًا لكيانات الوحدة النمطية المشتركة ونعمل وفقًا لنفس المنطق الخاص بوحدة التعليقات ، وسنناقشها لاحقًا بعض الشيء).الآن تطبيق الوحدة في موقعنا. أولاً ، قم بإنشاء إجراء جديد في SiteController: public function actionMessage() { $messages = \app\yicms\Feedback\Models\Messages::getInstance(); return $this->render('message', [ 'messages' => $messages ]); }
بعد ذلك ، قم بإنشاء طريقة عرض رسالة واكتب ما يلي: <?php ?> <?php $form = \yii\bootstrap\ActiveForm::begin([ 'id' => 'some-form', 'options' => [ 'data-pjax' => true, ], ]); ?> <div class="row"> <div class="col-xs-12"> <?= \yii\helpers\Html::submitButton('Save', ['class' => 'btn btn-success']) ?> </div> </div> <?php \yii\bootstrap\ActiveForm::end(); ?>
لإنشاء النموذج ، سوف نستخدم الأدوات القياسية للإطار. للاستفادة من وحدة التعليقات ، سنكتب ما يلي: <?php if ($messages->input_name->isActive): ?> <?= $form->field($messages->input_name, $messages->input_name->key) ?> <?php endif; ?> <?php if ($messages->input_surname->isActive): ?> <?= $form->field($messages->input_surname, $messages->input_surname->key) ?> <?php endif; ?> <?php if ($messages->input_photo->isActive): ?> <?= $form->field($messages->input_photo, $messages->input_photo->key) ->fileInput() ?> <?php endif; ?> <?php if ($messages->input_agreement->isActive): ?> <?= $form->field($messages->input_agreement, $messages->input_agreement->key)->checkbox() ?> <?php endif; ?>
بالنسبة لكيانات إدخال الكتابة ، يجب استخدام بادئة الإدخال_ وإلا ، فإن التعليقات التوضيحية التلقائية تعمل بنفس الطريقة التي تعمل بها لبقية الأشياء في yicms.في البداية ، يوجد فحص للنشاط الميداني ، وإذا كان الحقل غير نشط ، فينبغي عدم تقديمه ، وحتى إذا تم تقديمه ، فلن يتم تحميل البيانات التي تم ملؤها فيه إلى الخادم. يمكن تشغيل / إيقاف النشاط الميداني في لوحة dev.التالي هو النموذج القياسي للإطار حيث تحتاج إلى كتابة مثل هذا $form->field($messages->input_name, $messages->input_name->key)
$ messages-> input_name ستُرجع كائنًا من فئة التطبيق \ yicms \ Feedback \ Models \ Message \ InputFields \ Name الذي هو سليل إطار Yii2 النموذجي ويمكن استخدامه في النماذج ، $ messages-> input_name-> سيعيد المفتاح قيمة المفتاح الصحيحة ، بالترتيب بحيث يمكن تحميل النموذج.الآن ، عندما نذهب إلى الصفحة مع النموذج ، يتم تقديم جميع حقولها ، لكن التحميل إلى الخادم لا يعمل حتى الآن. من السهل جدا القيام به. لقد حاولت أن أجعل واجهة عمل الملاحظات متشابهة قدر الإمكان لواجهة العمل النموذجية في الإطار. نعم ، اضطررت إلى "التضحية" بعمارة صغيرة ، ولكن ككل اتضح مثل هذا: public function actionMessage() { $messages = \app\yicms\Feedback\Models\Messages::getInstance(); if ($messages->load(Yii::$app->request->post()) && $messages->validate()) { $messages->handle(); } return $this->render('message', [ 'messages' => $messages ]); }
سيتم الآن تحميل النموذج والتحقق من صحته وحفظه على الخادم. في قسم المسؤول ، يمكننا أن نرى المعلومات التي تم إدخالها في النموذج.بالطبع ، يمكنك استخدام فصل توضيحي تلقائي:\app\yicms\Feedback\Models\Messages
class Messages extends Feedback { public static function getInstance() { return self::getByName('messages'); } public function init() { $this->on(self::EVENT_AFTER_HANDLE, function($event) { Yii::$app->mailer->compose('message', [ 'message' => $this ]) ->setFrom('from@domain.com') ->setTo('to@domain.com') ->setSubject('Message subject') ->send(); }); } }
في هذا المثال ، اشتركنا في الحدث EVENT_AFTER_HANDLE. يحدث الحدث بعد حفظ بيانات النموذج على الخادم. في هذه الحالة ، نرسل رسالة إلى القالب الذي يمكننا من خلالها إدراج بيانات النموذج المحفوظة: <?php ?> <h1>Mail on message</h1> <h1>Name: <?= $message->input_name->value ?></h1> <h2>Surname: <?= $message->input_surname->value ?></h2>
$ message-> input_name-> القيمة تقوم ببساطة بإرجاع البيانات الحالية التي تم تخزينها في قاعدة البيانات.الآن دعونا نرى كيف تعمل المدققون. في لوحة dev في كيان حقل الإدخال باسم الاسم ، أضف أداة التحقق من الصحة المطلوبة. هذا هو المدقق الإطاري yii \ validators \ RequiredValidator. عندما أضفناها ، لم يكن نشطًا بعد ، لأن الزر الذي يحمل اسمه أبيض. لتنشيطه ، تحتاج إلى النقر على هذا الزر ، سيتم فتح نافذة إعدادات المدقق. هناك تحتاج إلى تثبيت مربع الاختيار وتفعيله. في الوقت نفسه ، يمكنك تكوين جميع معلمات المدقق الأخرى ، مثل رسائل الخطأ بجميع لغات النظام ، إلخ. بعد الحفظ ، تتحول أيقونة المصادقة إلى اللون الأخضر ، مما يعني أنها أصبحت نشطة وسيتم تطبيقها عند التحقق من صحة النماذج.على إدخال_الشرط مع اتفاقية الاسم ، نعلق المصادقة المقارنة. وتكوينه للمقارنة مع 1 ، اكتب رقم والمشغل ==. بالإضافة إلى ذلك ، يمكنك كتابة رسالة في حقول نص الخطأ ، مثل "يجب أن توافق على شروط العرض". الآن في النموذج ، لن يتم التحقق من الصحة إلا عند تحديد مربع اختيار الاتفاقية.في المجموع في هذه المقالة درسنا الملامح الرئيسية لنظام yicms.