Presque chaque développeur qui travaille depuis longtemps avec un certain framework dispose d'un ensemble de ses propres outils qui permet d'accélérer le développement du site. Cependant, souvent, ils sont mal structurés, n'ont pas de documentation et sont finalisés dans le «processus» de production.
L'idée du projet yicms était de collecter tous les développements pour le framework Yii2, ce qui semblait commode dans un certain systÚme, au premier rang desquels il faut mettre la facilité d'utilisation, la flexibilité et la capacité d'accélérer considérablement le développement de sites standards avec ses outils. Ce projet a été développé par moi pour "l'ùme", mais pour le moment il est déjà en beta.
L'essence des yicms se situe quelque part entre les capacités du framework et les capacités habituelles du CMS. Ce n'est pas un CMS au sens habituel du terme, mais juste un ensemble de modules qui peuvent accélérer considérablement le développement du site à l'aide de ses outils, tout en ayant un «accÚs» complet aux capacités du framework. Les principales fonctionnalités intégrées dans yicms sont le panneau d'administration généré à la volée et les classes annotées automatiquement qui vous permettent d'utiliser la saisie semi-automatique IDE et d'avoir une interface intuitive.
Installation et configuration
Commençons donc par yicms en l'installant. Pour les rencontres, le moyen le plus simple consiste Ă utiliser Open Server ou toute autre plate-forme de serveur similaire. Ătant donnĂ© que yicms dĂ©pend fortement de Yii, nous allons l'installer en premier. Pour plus de simplicitĂ©, nous utiliserons le modĂšle de base:
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
Une fois que composer a installé le framework, ajoutez la section require du fichier composer.json avec les quatre modules yicms et exécutez la mise à jour de composer.
"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" },
Chaque module représente un ensemble de fonctionnalités spécifiques, qui seront envisagées à l'avenir. Pour l'instant, installez-les tous.
Ensuite, vous devez vous rappeler de configurer le serveur. Dans Open Server, nous utilisons Apache et configurons .htaccess comme suit:
Pour le fichier racine .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
Pour le fichier .htaccess dans le répertoire web
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
L'étape suivante consiste à rouler la migration de chaque module yicms dans la base de données. Dans la console, nous exécutons séquentiellement les commandes suivantes:
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
Commençons maintenant la configuration dans le fichier config / web.php.
La section des modules est configurée comme suit:
'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', ],
La section d'amorçage est configurée comme suit:
'bootstrap' => ['log', 'common', 'pages', 'essences', 'feedback'],
La section utilisateur est configurée comme suit:
'user' => [ 'identityClass' => 'Iliich246\YicmsCommon\Base\CommonUser', 'enableAutoLogin' => true, ],
Supprimez la section des commentaires urlManager:
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ ], ],
Le framework Yii2 et le systÚme yicms ont été correctement configurés.
AprĂšs le premier dĂ©marrage, si tout a Ă©tĂ© configurĂ© correctement, le rĂ©pertoire yicms doit ĂȘtre créé dans le rĂ©pertoire racine du projet qui contiendra les fichiers disponibles pour les modifications utilisateur et les classes annotĂ©es automatiquement seront Ă©galement créées dans celui-ci.

Description des modules Common et Pages
Le systĂšme yicms se compose de deux sections. Section Dev, qui ne doit ĂȘtre accessible qu'au dĂ©veloppeur (le code peut y ĂȘtre brisĂ©) et la section Admin doit ĂȘtre accessible Ă l'administrateur du site (la gestion de contenu y est effectuĂ©e). Pour commencer, vous devez vous rendre dans la section Dev, pour cela vous devez utiliser l'URL suivante:
http://< >/web/common/dev/login-as-dev?hash=123456&asDev
AprĂšs cela, le panneau Dev devrait s'ouvrir:

Commençons maintenant avec la fonctionnalité yicms. Tout d'abord, dans le module Pages, nous allons créer une page appelée index, qui sera la page principale du site. Accédez à la liste des pages et créez une nouvelle page appelée index. Par défaut, les champs title, meta_description et meta_keywords seront créés pour la page. De plus, nous allons créer un autre champ via le bouton Ajouter un nouveau champ avec le nom du texte, nous laisserons tous ses paramÚtres par défaut.
Maintenant, si vous suivez le lien
http://< >/web/pages/admin
la section admin s'ouvrira. La page d'index y sera disponible pour remplir le contenu. Remplissez tous les champs avec du texte libre.
Au moment de crĂ©er la section d'index dans la section dev de la page d'index, la classe Index a Ă©tĂ© créée dans le rĂ©pertoire yicms / Pages / Models dans lequel des annotations ont Ă©galement Ă©tĂ© créées pour les champs title, meta_description, meta_keywords, ainsi que pour le champ de texte que nous avons créé Ă la volĂ©e. Un objet de cette classe que nous pouvons utiliser pour obtenir la valeur des champs. ConsidĂ©rez comment cela peut ĂȘtre fait. Dans le contrĂŽleur SiteController standard du modĂšle de base dans actionIndex, Ă©crivez ce qui suit:
public function actionIndex() { $indexPage = \app\yicms\Pages\Models\Index::getInstance(); return $this->render('index', [ 'indexPage' => $ indexPage ]); }
Ătant donnĂ© que la classe \ app \ yicms \ Pages \ Models \ Index a Ă©tĂ© gĂ©nĂ©rĂ©e automatiquement, l'auto-complĂ©tion pour elle fonctionnera dans l'EDI. Maintenant, $ indexPage peut ĂȘtre utilisĂ© comme index. Ouvrez maintenant la vue d'index. Nous en supprimons tout ce qui est inutile et Ă©crivons:
<?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>
L'annotation de la variable $ indexPage est nécessaire pour l'auto-complétion IDE. Utilisez maintenant l'objet $ indexPage. Tous les champs que nous avons créés dans la section dev pour la page d'index sont disponibles dans l'objet de la classe Index, qui, grùce à l'annotation automatique, est complété par l'EDI aprÚs avoir entré l'opérateur flÚche.
Au total, en peu de temps, nous avons créé une page d'index pour laquelle un panneau d'administration a été automatiquement créé pour modifier son contenu. Nous avons utilisé la programmation uniquement pour créer l'objet page dans le contrÎleur standard du framework, et sous la forme dans laquelle nous pouvions rapidement utiliser l'objet page grùce à la saisie semi-automatique et à une interface intuitive.
Nous n'avons examiné que la plus petite partie des capacités des yicms. Maintenant, nous allons compliquer un peu la page principale du site en utilisant yicms.
yicms prend en charge le multilinguisme prĂȘt Ă l'emploi. Pour activer la deuxiĂšme langue dans la section dev du module commun, sĂ©lectionnez la liste des langues, puis sĂ©lectionnez la langue russe et activez-la dedans:

Maintenant, dans le panneau d'administration, nous pouvons remplir les champs pour plusieurs langues. Vous pouvez créer de nouvelles langues dans le systÚme. Cependant, il sera nécessaire de traduire le panneau d'administration à l'aide des outils de framework habituels. Par conséquent, lors de la création d'un nouveau langage, vous devez adhérer à l'ISO. Pour les contrÎles de contenu, une nouvelle plaque avec une nouvelle langue sera simplement ajoutée.
Blocs de fichiers de composants
Ensuite, considĂ©rez l'Ă©lĂ©ment de blocs de fichiers. Dans le panneau de dĂ©veloppement de la page d'index, crĂ©ez un bloc de fichiers avec le document de nom de programme. Les autres paramĂštres de blocage seront laissĂ©s par dĂ©faut. Maintenant, dans le panneau d'administration pour l'Ă©dition de la page d'index du fichier de document est devenu disponible. TĂ©lĂ©chargez un fichier arbitraire. Maintenant, le lien pour le tĂ©lĂ©charger peut ĂȘtre affichĂ© sur la page d'index du site:
⊠<div class="body-content"> <div class="row"> <h3>Document</h3> <a href="<?= $indexPage->document->uploadUrl() ?>"> <?= $indexPage->document ?> </a> </div> ⊠</div>
Maintenant, sur la page, le lien chargera le fichier que nous avons téléchargé sur le panneau d'administration. Par défaut, le bloc de fichiers fonctionne en mode fichier unique dans toutes les langues. Cependant, dans le panneau de développement, vous pouvez basculer le type de langue sur le type traduisible, puis pour chaque langue, il sera nécessaire de télécharger son propre fichier. Dans ce cas, le fichier dont la langue est actuellement active sur le site sera téléchargé via le lien. Bien sûr, vous pouvez télécharger pour une langue spécifique, qui sera discutée plus tard.
L'étape suivante dans le panneau de développement consiste à créer un bloc de fichier de recettes pour lequel nous spécifierons le type comme type multiple. Dans ce mode, vous pouvez télécharger de nombreux fichiers pour un bloc de fichiers. Pour ce faire, dans le panneau d'administration, dans l'onglet recettes qui apparaßt, téléchargez plusieurs fichiers arbitraires.
AprĂšs cela, sous forme d'index, nous listons les fichiers:
⊠<div class="row"> <h3>Recipes</h3> <?php foreach ($indexPage->recipes as $recipe): ?> <a href="<?= $recipe->uploadUrl() ?>"> <?= $recipe ?> </a> <?php endforeach; ?> </div> âŠ
En mode de type multiple, un bloc de fichiers peut ĂȘtre contournĂ© via foreach ou un itĂ©rateur.
Composant de bloc d'images
ConsidĂ©rons maintenant l'Ă©lĂ©ment de bloc d'images. CrĂ©ez un bloc d'image pour la page d'index, en laissant tous les paramĂštres par dĂ©faut. De mĂȘme pour les blocs de fichiers dans le panneau d'administration, il est devenu possible de tĂ©lĂ©charger une image. TĂ©lĂ©chargez une image arbitraire. Maintenant, sous forme d'index, nous Ă©crivons ce qui suit:
<div class="row"> <h3>Image</h3> <img src="<?= $indexPage->picture ?>" alt=""> </div>
De mĂȘme que pour les fichiers image, un est chargĂ© par dĂ©faut dans toutes les langues, cependant, pour les images, ce comportement peut ĂȘtre modifiĂ© dans le panneau de dĂ©veloppement et tĂ©lĂ©charger votre propre image pour chaque langue. Vous pouvez Ă©galement tĂ©lĂ©charger de nombreuses images dans un seul bloc.
CrĂ©ez un bloc de galerie d'images dans le panneau de dĂ©veloppement, dont le type sera dĂ©fini comme Images multiples. Pour les images, vous pouvez Ă©galement suspendre des champs de texte Ă la volĂ©e. Par consĂ©quent, dans la fenĂȘtre modale pour dĂ©finir le bloc de la galerie, passons Ă la section «Afficher le champ du bloc d'image». Dans cette section pour les images, crĂ©ez des champs avec les noms alt et name. Maintenant, dans le panneau d'administration pour chaque image, il est possible de dĂ©finir les champs de texte alt et name. Dans les yicms pour les images hors de la boĂźte est Ă©galement disponible la possibilitĂ© de "recadrer" et de crĂ©er des vignettes. Par exemple, crĂ©ez un modĂšle de miniature pour le bloc de la galerie. Dans la fenĂȘtre modale du bloc d'image, accĂ©dez Ă la section "Vignettes de configuration des images". Nous y crĂ©erons un configurateur de vignettes avec le nom «x2» et les paramĂštres diviseur = 2 et qualitĂ© = 80. Par nom, nous pourrons accĂ©der Ă la vignette, le diviseur dĂ©terminera de combien rĂ©duire la taille de l'image originale, la qualitĂ© dĂ©termine la qualitĂ© de compression de la vignette. Ensuite, crĂ©ez un autre modĂšle de miniature avec les paramĂštres: nom_programme = "x5", diviseur = 5, qualitĂ© = 50. Maintenant, lorsque nous chargeons l'image Ă partir du panneau d'administration, deux miniatures seront automatiquement créées pour elle avec les paramĂštres que nous avons sĂ©lectionnĂ©s.
Téléchargez maintenant quelques images dans le panneau d'administration du groupe de galeries. Une fois l'image créée et téléchargée, vous pouvez remplir les champs alt et name, dont nous avons créé les modÚles dans le panneau de développement. Voyons comment afficher tout cela sur le site.
<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>
Ici, la méthode getImages () renvoie un tableau d'objets de la classe annotée automatiquement app \ yicms \ Pages \ Models \ Index \ Images \ GalleryImage dans laquelle des annotations ont été créées pour les champs alt et name que nous avons créés à la volée et l'auto-complétion IDE leur est disponible. De plus, en appelant la méthode outputThumbnail (<Nom du modÚle de miniature>) sur l'objet, nous basculons l'objet en mode de sortie miniature.
Pour les blocs d'images, il est possible de crĂ©er non seulement des champs mais aussi des conditions, que nous considĂ©rerons un peu plus tard. Des champs et des conditions peuvent Ă©galement ĂȘtre créés pour les blocs de fichiers. Cela fonctionne sur un principe similaire.
Conditions des composants
Considérons maintenant l'élément suivant. Ce sont des conditions. Les conditions sont pratiques pour la création dans les listes du panneau d'administration, les cases à cocher, etc. Ce qui déterminera certains comportements lors du travail des pages. Regardons un exemple. Créez une condition appelée arriÚre-plan dans le panneau de développement de la page d'index. Tapez sélectionnez «sélectionner le type de liste déroulante». AprÚs avoir créé la condition, nous irons à la section "Options de configuration de la condition". Créez trois valeurs de condition avec les valeurs transparent, rouge et vert.
AprÚs cela, une condition avec une liste déroulante avec les valeurs TRANSPARENT, RED et GREEN apparaßtra dans le panneau d'administration de la page d'index. Ils sont convertis en majuscules, car dans la classe créée annotée automatiquement, ils sont représentés sous forme de constantes.
Essayons maintenant d'utiliser la condition créée. Nous l'utilisons d'une maniĂšre lĂ©gĂšrement diffĂ©rente pour montrer d'autres possibilitĂ©s. Ătant donnĂ© que la page d'index est la page principale du site, il sera sĂ©mantiquement vrai de changer la couleur d'arriĂšre-plan du site Ă partir de ses paramĂštres. Par consĂ©quent, notre condition sera de changer la couleur d'arriĂšre-plan sur tout le site, nous allons donc l'insĂ©rer dans la disposition du contrĂŽleur. Ouvrez le fichier de modĂšle de mise en page du framework Yii2 de base et crĂ©ez un objet Index:
<?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() ?> âŠ
Ătant donnĂ© que l'objet de la classe Index est quelque chose comme un singleton, nous pouvons appeler la mĂ©thode statique getInstance () autant que nous le voulons sans risquer de crĂ©er des requĂȘtes de base de donnĂ©es en double supplĂ©mentaires et d'autres frais gĂ©nĂ©raux lors de sa crĂ©ation. Maintenant, en utilisant l'objet $ pagesIndex, nous allons changer la balise en lui ajoutant un style en ligne:
<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; ?> ">
En appelant $ pagesIndex-> ââbackground-> value () et en comparant avec la constante qui a Ă©tĂ© créée dans la classe annotĂ©e automatiquement \ app \ yicms \ Pages \ Models \ Index \ Conditions \ Background, nous sĂ©lectionnons la couleur d'arriĂšre-plan du site.
Ensuite, considĂ©rez les capacitĂ©s des classes Ă annotation automatique. Pendant que yicms est en cours d'exĂ©cution, de nombreux Ă©vĂ©nements se produisent qui peuvent ĂȘtre gĂ©rĂ©s par le framework Yii. Nous donnons un exemple.
app\yicms\Pages\Models\Index\Fields\Text
Ce fichier a été créé par un annotateur automatique lorsque nous avons créé le champ de texte pour la page d'index dans le panneau de développement. Lorsque nous écrivons <? = $ IndexPage-> text?> Dans le modÚle, quelque chose de similaire au singleton de cette classe particuliÚre est créé, qui dans le modÚle est converti en chaßne à l'aide de la magie __toString ().
Pour modifier le contenu, nous nous abonnons à l'événement et le traitons via la fonction de rappel:
class Text extends Field { public function init() { $this->on(self::EVENT_BEFORE_OUTPUT, function($event) { }); } }
L'événement EVENT_BEFORE_OUTPUT se produit avant l'affichage du contenu du champ. Essayons de le changer. Pour ce faire, nous utilisons l'objet événement \ Iliich246 \ YicmsCommon \ Base \ HookEvent:
$this->on(self::EVENT_BEFORE_OUTPUT, function($event) { $value = $event->getHook(); $value = strrev($value); $event->setHook($value); });
L'événement HookEvent obtient la valeur du champ avant le déclenchement de l'événement. Dans l'événement, vous pouvez obtenir cette valeur via $ event-> getHook (), la modifier et la renvoyer à l'objet via l'événement en utilisant $ event-> setHook ($ value). Ainsi, dans le cas contraire, nous avons inversé le texte que le champ Texte affiche.
Presque chaque classe auto-louĂ©e a un certain nombre d'Ă©vĂ©nements qui peuvent ĂȘtre connectĂ©s de maniĂšre similaire, mais leur examen dĂ©passe le cadre de l'article d'enquĂȘte.
Au total, dans cet article, nous avons examiné deux modules yicms, à savoir les modules Common et Pages. Le module commun comprend des composants tels que les champs, les blocs de fichiers, les blocs d'images et les conditions. Le module Pages est chargé de créer des objets de page qui contiennent tous les éléments du module Commun. C'est-à -dire tous les modules yicms dépendent du module commun principal.
Module Yii2-yicms-essences
Maintenant, familiarisons-nous avec le module Essences. Ce module est conçu pour créer des entités de type catégorie-> entité, par exemple, la catégorie de biens-> biens, type de véhicule (voitures, moto) -> véhicule spécifique, etc. Dans le module, ces éléments sont appelés catégories et représentations.
à titre d'exemple, nous montrons la création d'un simple catalogue de la catégorie-> type de produit pour une boutique en ligne.
Dans la section Dev du module Essences, allez à la liste des essences et là nous allons à la section Créer une nouvelle essence. Nous lui donnons le nom du programme produits et laissons le reste des paramÚtres par défaut. Par défaut, une entité avec un comportement est créée: une vue peut appartenir à une catégorie. Cependant, vous pouvez spécifier d'autres comportements: créer simplement des vues sans catégories, ou une vue peut appartenir à plusieurs catégories.
Les catĂ©gories elles-mĂȘmes sont construites sur un principe arborescent, lorsqu'une catĂ©gorie a un parent (Ă l'exception de la plus haute). C'est-Ă -dire Les catĂ©gories sont des feuilles d'une structure de donnĂ©es de type arbre.
Total des produits d'entité créés. Pour elle, des classes annotées automatiquement ont été créées dans le répertoire app \ yicms \ Essences \ Models. Ensuite, dans le panneau de développement, nous devons créer des modÚles de classe et des modÚles de présentation. Tout cela est similaire à la façon dont nous les avons créés pour la page d'index. Les éléments Champs, Blocs de fichiers, Blocs d'images et Conditions sont disponibles pour eux en mode de création à la volée. Une fois que nous avons fini de créer des modÚles dans le panneau d'administration, il devient disponible pour créer des catégories et des vues avec les éléments de modÚle que nous avons définis dans le panneau de développement.
Nous allons donc crĂ©er plusieurs catĂ©gories de marchandises. Et pour chaque catĂ©gorie de produits, il existe plusieurs produits. Une fois cela fait, le tout peut ĂȘtre affichĂ© sur le site principal. ConsidĂ©rez comment cela se fait. Dans SiteController, crĂ©ez une action actionProcuts:
public function actionProducts() { $productsEssence = Products::getInstance(); return $this->render('products', [ 'productsEssence' => $productsEssence ]); }
Créez une vue des produits pour elle
<?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>
Grùce au mécanisme d'annotation automatique, la méthode $ productsEssence-> categories renvoie un tableau d'objets de la classe annotée automatiquement app \ yicms \ Essences \ Models \ ProductsCategory. Comme dans les classes auto-annotées précédentes de cette classe, il y a des annotations sur les champs que nous avons créés à la volée, l'EDI pourra utiliser l'auto-complétion. Il convient également de noter que les classes auto-annotées ont été développées avec l'idée que l'utilisateur yicms pourra y placer sa propre logique métier, c'est-à -dire vous pouvez y écrire votre propre code et le mécanisme d'annotation automatique modifie les zones spécialement marquées et aucun code utilisateur ne sera affecté.
La mĂ©thode $ category-> represent renvoie Ă©galement un tableau d'objets app \ yicms \ Essences \ Models \ ProductsRepresent qui ont tous les mĂȘmes avantages d'annotation automatique que pour les catĂ©gories. Bien sĂ»r, il existe des mĂ©thodes plus souples pour obtenir des idĂ©es. Par exemple, $ category-> getRepresentQuery () retournera un objet ActiveQuery du framework Yii2, qui peut ĂȘtre personnalisĂ© pour affiner la requĂȘte de base de donnĂ©es, utilisĂ© pour crĂ©er une pagination ou un chargement paresseux.
Au total, le module Essenses vous permet de crĂ©er rapidement un squelette des fonctionnalitĂ©s de la boutique, avec le panneau d'administration fonctionnant dĂ©jĂ . Une logique mĂ©tier supplĂ©mentaire peut ĂȘtre Ă©crite dans des classes annotĂ©es automatiquement.
Module de rétroaction Yii2-yicms
Ce module est destinĂ© Ă construire des formulaires de saisie d'informations sur le site par les visiteurs et les utilisateurs du site. L'idĂ©ologie du travail reste la mĂȘme, d'abord dans le panneau de dĂ©veloppement, nous tapons les champs requis pour le formulaire.
Prenons l'exemple du fonctionnement du module. CrĂ©ez un enregistrement avec les messages de nom de programme dans le panneau de dĂ©veloppement du module de rĂ©troaction. Sur la page des paramĂštres des messages, nous pouvons voir le bouton ModĂšles de pages de commentaires. En utilisant ce lien, nous pouvons crĂ©er des Ă©lĂ©ments du champ type, bloc de fichiers, bloc d'images, conditions qui peuvent ĂȘtre utilisĂ©es pour formater le contenu de la page des messages. Ils ne sont pas diffĂ©rents de ceux que nous avons considĂ©rĂ©s pour le module Pages. Maintenant, nous sommes plus intĂ©ressĂ©s par la section ModĂšles de saisie de commentaires. Dans cette section, nous pouvons crĂ©er des entitĂ©s telles que des champs d'entrĂ©e, des fichiers d'entrĂ©e, des images d'entrĂ©e et des conditions d'entrĂ©e. Ces entitĂ©s sont exactement ce dont vous avez besoin pour crĂ©er des formulaires de saisie personnalisĂ©s.
Créez deux champs de saisie avec les noms nom et prénom.
Image d'entrĂ©e nommĂ©e photo. Condition d'entrĂ©e nommĂ©e accord. Pour l'instant, laissons tous les paramĂštres de ces entitĂ©s par dĂ©faut. Plus loin dans cet exemple, nous allons configurer des validateurs qui sont Ă©galement suspendus Ă ces entitĂ©s Ă la volĂ©e (les validateurs sont Ă©galement disponibles pour les entitĂ©s du module commun et fonctionnent selon la mĂȘme logique que pour le module de rĂ©troaction. Nous en discuterons un peu plus tard).Appliquez maintenant le module sur notre site Web. Tout d'abord, crĂ©ez une nouvelle action dans SiteController: public function actionMessage() { $messages = \app\yicms\Feedback\Models\Messages::getInstance(); return $this->render('message', [ 'messages' => $messages ]); }
Ensuite, créez une vue de message et écrivez ce qui suit: <?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(); ?>
Pour créer le formulaire, nous utiliserons les outils standards du framework. Afin de profiter du module de rétroaction, nous écrirons ce qui suit: <?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; ?>
Pour les entitĂ©s de type entrĂ©e, vous devez utiliser le prĂ©fixe input_, sinon, les annotations automatiques fonctionnent pour elles de la mĂȘme maniĂšre que pour le reste des choses en yicms.Au dĂ©but, il y a une vĂ©rification de l'activitĂ© du champ, si le champ est inactif, alors il ne doit pas ĂȘtre rendu, et mĂȘme s'il est rendu, les donnĂ©es qui ont Ă©tĂ© remplies ne seront pas tĂ©lĂ©chargĂ©es sur le serveur. L'activitĂ© sur le terrain peut ĂȘtre activĂ©e / dĂ©sactivĂ©e dans le panneau de dĂ©veloppement.Vient ensuite la forme standard du cadre oĂč vous devez Ă©crire comme ceci $form->field($messages->input_name, $messages->input_name->key)
$ messages-> nom_entrĂ©e renverra un objet de la classe app \ yicms \ Feedback \ Models \ Message \ InputFields \ Name qui est le descendant du framework Model Yii2 et peut ĂȘtre utilisĂ© dans les formulaires, $ messages-> nom_entrĂ©e-> key retournera la valeur de clĂ© correcte, dans l'ordre afin que le formulaire puisse ĂȘtre chargĂ©.Maintenant, lorsque nous allons Ă la page avec le formulaire, tous ses champs sont rendus, mais le chargement sur le serveur ne fonctionne pas encore. C'est trĂšs simple Ă faire. J'ai essayĂ© de rendre l'interface de travail de rĂ©troaction aussi similaire que possible Ă l'interface de travail du modĂšle dans le cadre. Oui, j'ai dĂ» "sacrifier" un peu d'architecture, mais dans l'ensemble cela s'est avĂ©rĂ© comme ceci: 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 ]); }
Le formulaire va maintenant se charger, valider et enregistrer sur le serveur. Dans la section admin, nous pouvons voir les informations qui ont été saisies dans le formulaire.Bien sûr, vous pouvez utiliser une classe annotée automatiquement:\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(); }); } }
Dans cet exemple, nous nous sommes inscrits à l'événement EVENT_AFTER_HANDLE. L'événement se produit aprÚs que les données du formulaire ont été enregistrées sur le serveur. Dans ce cas, nous envoyons une lettre au modÚle dont nous pouvons insérer les données de formulaire enregistrées: <?php ?> <h1>Mail on message</h1> <h1>Name: <?= $message->input_name->value ?></h1> <h2>Surname: <?= $message->input_surname->value ?></h2>
$ message-> input_name-> value renvoie simplement les donnĂ©es actuelles qui ont Ă©tĂ© stockĂ©es dans la base de donnĂ©es.Voyons maintenant comment fonctionnent les validateurs. Dans le panneau de dĂ©veloppement de l'entitĂ© de champ de saisie portant le nom, ajoutez le validateur requis. Il s'agit du validateur de framework yii \ validators \ RequiredValidator standard. Lorsque nous l'avons ajoutĂ©, il n'est pas encore actif, car le bouton avec son nom est blanc. Pour l'activer, vous devez cliquer sur ce bouton, la fenĂȘtre des paramĂštres du validateur s'ouvrira. LĂ , vous devez installer la case Ă cocher et l'activer. Dans le mĂȘme temps, vous pouvez configurer tous les autres paramĂštres du validateur, tels que les messages d'erreur dans toutes les langues du systĂšme, etc. AprĂšs l'enregistrement, l'icĂŽne du validateur devient verte, ce qui signifie qu'elle est devenue active et sera appliquĂ©e lors de la validation des formulaires.Ă l'entrĂ©e_condition avec l'accord de nom, nous suspendons le validateur de comparaison. Et configurez-le pour comparer avec 1, tapez numĂ©ro et l'opĂ©rateur ==. De plus, vous pouvez Ă©crire un message dans les champs de texte d'erreur, tel que «Vous devez accepter les termes de l'offre». DĂ©sormais sur le formulaire, la validation n'aura lieu que si la case Ă cocher de l'accord est cochĂ©e.Au total, dans cet article, nous avons examinĂ© les principales caractĂ©ristiques du systĂšme yicms.