我们使用Yii2。 我们正在编写另一个CMS或尝试以最小的开销显着加快开发速度

几乎每位长期使用特定框架的开发人员都拥有一套自己的工具,这些工具可以加快网站的开发速度。 但是,它们通常结构不完善,没有文档并且在生产的“过程”中完成。

yicms项目的想法是收集Yii2框架的所有开发内容,这在某些系统中似乎很方便,这应该基于可用性,灵活性以及使用其工具显着加速标准站点开发的能力。 这个项目是我为“灵魂”开发的,但目前它已经处于测试阶段。

yicms的本质介于框架功能和CMS常规功能之间。 从一般意义上来说,这不是CMS,而只是一组模块,这些模块可以使用其工具显着加速站点的开发,同时可以完全“访问”框架的功能。 yicms中嵌入的主要功能是动态生成的管理面板和自动注释的类,这些类使您可以使用IDE自动完成功能并具有直观的界面。

安装与设定


因此,让我们开始安装yicms。 对于约会,最简单的方法是使用Open Server或任何其他类似的服务器平台。 由于yicms强烈依赖Yii,因此我们将首先安装它。 为简单起见,我们将使用基本模板:

composer create-project --prefer-dist yiisoft/yii2-app-basic basic

在composer安装框架之后,使用四个yicms模块添加composer.json文件的require部分,然后运行composer update。

  "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 

对于Web目录中的.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' => ['log', 'common', 'pages', 'essences', 'feedback'], 

用户部分的配置如下:

 'user' => [ 'identityClass' => 'Iliich246\YicmsCommon\Base\CommonUser', 'enableAutoLogin' => true, ], 

删除注释部分urlManager:

 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ ], ], 

Yii2框架和yicms系统已成功配置。

第一次启动后,如果所有配置均正确,则应在项目根目录中创建yicms目录,该目录将包含可用于用户更改的文件,并且还将在其中创建自动注释的类。



通用和页面模块的描述


yicms系统包括两个部分。 开发部分,只有开发人员可以访问(可以在其中破坏代码),而站点管理员可以访问管理部分(在其中进行内容管理)。 首先,您需要转到开发部分,为此,您需要使用以下URL:

http://< >/web/common/dev/login-as-dev?hash=123456&asDev

之后,应打开“开发”面板:



现在让我们开始使用yicms功能。 首先,在Pages模块中,我们将创建一个名为index的页面,该页面将成为站点的主页。 转到页面列表并创建一个名为index的新页面。 默认情况下,将为页面创建title,meta_description和meta_keywords字段。 此外,我们将通过带有名称文本的添加新字段按钮创建另一个字段,默认情况下,我们将保留其所有参数。

现在,如果您点击链接

http://< >/web/pages/admin

管理员部分将打开。 索引页面将可用在其中以填充内容。 用自由文本填充所有字段。

在索引页面的dev部分中创建索引部分时,在yicms / Pages / Models目录中创建了Index类,其中还为标题,meta_description,meta_keywords字段以及我们即时创建的文本字段创建了注释。 我们可以使用此类的对象来获取字段的值。 考虑如何做到这一点。 在actionIndex中基本模板的标准SiteController控制器中,编写以下内容:

 /** * Displays homepage. * * @return string * @throws \Iliich246\YicmsPages\Base\PagesException */ public function actionIndex() { $indexPage = \app\yicms\Pages\Models\Index::getInstance(); return $this->render('index', [ 'indexPage' => $ indexPage ]); } 

由于类\ app \ yicms \ Pages \ Models \ Index是自动生成的,因此它的自动完成将在IDE中起作用。 现在,$ indexPage可以用作索引。 现在打开索引视图。 我们从那里删除所有不必要的内容并写:

 <?php /** @var $this yii\web\View */ /** @var $indexPage \app\yicms\Pages\Models\Index */ $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对象。 在索引页面的dev部分中创建的所有字段都可以在Index类的对象中找到,由于有了自动注释,因此在输入箭头运算符后,IDE会对其进行补充。

总体而言,我们在很短的时间内创建了一个“索引”页面,针对该页面自动创建了一个管理面板来编辑其内容。 我们仅使用编程来在框架的标准控制器中创建页面对象,并且通过自动完成和直观的界面,我们可以以这种形式快速使用页面对象。

我们仅检查了Yicms功能的最小部分。 现在,我们将使用yicms将网站的主页复杂化一些。

yicms开箱即用地支持多种语言。 要在通用模块的dev部分中激活第二种语言,请选择语言列表,然后选择俄语并在其中激活它:



现在,在管理面板中,我们可以填写几种语言的字段。 您可以在系统中创建新语言。 但是,有必要使用常规框架工具来翻译管理面板。 因此,在创建新语言时,必须遵守ISO。 对于内容控件,只需添加具有新语言的新盘子。

组件文件块


接下来,考虑文件块元素。 在索引页面的开发面板中,使用程序名称文档创建一个文件块。 默认情况下将保留其他块设置。 现在,在管理面板中可用于索引页面的文档文件编辑。 下载任意文件。 现在,可以在网站的索引页面上显示下载链接:

 … <div class="body-content"> <div class="row"> <h3>Document</h3> <a href="<?= $indexPage->document->uploadUrl() ?>"> <?= $indexPage->document ?> </a> </div> … </div> 

现在,在页面上,链接将加载我们上传到管理面板的文件。 默认情况下,文件块以所有语言在单文件模式下运行。 但是,在开发面板中,您可以将语言类型切换为可翻译类型,然后对于每种语言,您都需要上传自己的文件。 在这种情况下,将通过链接下载其语言当前在站点上处于活动状态的文件。 当然,您可以下载特定语言的语言,稍后将进行讨论。

开发面板中的下一步是创建一个配方文件块,我们将为其指定类型为多种类型。 在这种模式下,您可以为一个文件块上传许多文件。 为此,请在管理面板的显示的食谱标签中,上传几个任意文件。
之后,以索引的形式列出文件:

 … <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> 

与图像文件类似,默认情况下,一个文件会加载到所有语言中,但是对于图像,可以在开发面板中更改此行为,并针对每种语言上传自己的图像。 您也可以在一个块中上传许多图像。

在开发面板中创建一个图片库块,其类型将设置为“多张图片”。 对于图像,您还可以即时挂起文本字段。 因此,在用于设置图库块的模式窗口中,让我们转到“查看图像块字段”部分。 在本节的图像中,创建名称为alt和name的字段。 现在,在管理面板中每个图像都可以设置alt和name文本字段。 此外,在开箱即用的图像中,还可以“裁剪”和创建缩略图。 例如,为图库块创建缩略图模板。 在图像块的模式窗口中,转到“配置图像缩略图”部分。 在其中,我们将创建一个缩略图配置器,名称为“ x2”,参数divider = 2,quality =80。通过名称,我们可以访问缩略图,除法器将确定减少原始图像大小的大小,质量决定缩略图的压缩质量。 接下来,使用参数创建另一个缩略图模板:program_name =“ x5”,除法器= 5,质量=50。现在,当从管理面板加载图像时,将使用我们选择的参数自动为其创建两个缩略图。

现在,将一些图像上传到图库组的管理面板。 创建并上传图像后,您可以填写alt和name字段,这些字段是我们在开发面板中创建的模板。 让我们看看如何在网站上显示所有这些内容。

 <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()方法返回自动注释的类app \ yicms \ Pages \ Models \ Index \ Images \ GalleryImage的对象数组,其中为我们即时创建的alt和name字段创建了注释,并且IDE自动完成功能可供使用。 同样,在对象上调用outputThumbnail方法(<Thumbnail Template Name>),我们将对象切换到缩略图输出模式。

对于图像块,不仅可以创建字段,还可以创建条件,稍后我们将对其进行考虑。 也可以为文件块创建字段和条件。 它的工作原理与此类似。

组件条件


现在考虑下一个元素。 这些是条件。 条件便于在管理面板列表,复选框等中创建。 这将确定工作页面时的某些行为。 让我们来看一个例子。 在索引页面的开发面板中创建一个称为background的条件。 类型选择“选择下拉类型”。 创建条件后,转到“配置条件选项”部分。 创建三个条件值,其值分别为透明,红色和绿色。

之后,带有下拉列表且值为TRANSPARENT,RED和GREEN的条件将出现在索引页面的管理面板中。 它们被转换为大写,因为在创建的自动注释的类中,它们被表示为常量。

现在,让我们尝试使用创建的条件。 我们以稍微不同的方式使用它来显示其他可能性。 由于索引页面是网站的主页,因此从其设置更改网站的背景色在语义上是正确的。 因此,我们的条件是更改整个站点的背景颜色,以便将其插入控制器的布局中。 打开基本Yii2框架的布局模板文件并创建一个Index对象:

 <?php /* @var $this \yii\web\View */ /* @var $content string */ 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类的对象就像一个单例对象,因此我们可以随意调用static 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()并与在自动注释的类\ app \ yicms \ Pages \ Models \ Index \ Conditionss \ Background中创建的常量进行比较,我们选择了网站的背景色。

接下来,考虑自动注释类的功能。 在yicms运行时,发生了很多事件,这些事件可以由Yii框架处理。 我们举一个例子。

 app\yicms\Pages\Models\Index\Fields\Text 

当我们在开发面板中为索引页面创建文本字段时,此文件是由自动注释器创建的。 当我们编写<?= $ IndexPage-> text?>时,在模板中创建了与该特定类的单例类似的内容,并使用魔术__toString()将其转换为字符串。

要更改内容,我们订阅事件并通过回调函数对其进行处理:

 class Text extends Field { public function init() { $this->on(self::EVENT_BEFORE_OUTPUT, function($event) { /** @var $event \Iliich246\YicmsCommon\Base\HookEvent */ }); } } 

EVENT_BEFORE_OUTPUT事件发生在显示字段内容之前。 让我们尝试更改它。 为此,我们使用事件对象\ Iliich246 \ YicmsCommon \ Base \ HookEvent:

 $this->on(self::EVENT_BEFORE_OUTPUT, function($event) { /** @var $event \Iliich246\YicmsCommon\Base\HookEvent */ $value = $event->getHook(); $value = strrev($value); $event->setHook($value); }); 

HookEvent事件在事件触发前获取该字段的值。 在这种情况下,您可以通过$ event-> getHook()获取此值,对其进行更改,然后使用$ event-> setHook($ value)通过事件将其发送回该对象。 因此,在这种情况下,我们将“文本”字段显示的文本向后翻转。

几乎每个自动租用的类都有许多可以以类似方式连接的事件,但是对它们的考虑超出了事实调查的范围。

总的来说,在本文中,我们研究了两个yicms模块,即Common和Pages模块。 通用模块包括诸如字段,文件块,图像块和条件之类的组件。 Pages模块负责创建包含Common模块的所有元素的页面对象。 即 所有yicms模块都依赖于主Common模块。

Yii2-yicms-essences模块


现在,让我们熟悉Essences模块。 此模块旨在创建类别->实体类型的实体,例如,商品的类别->货物,车辆类型(汽车,摩托车)->特定车辆等。 在模块中,这些元素称为类别和表示形式。

例如,我们展示了如何为在线商店创建一个类别->产品类型的简单目录。

在“本质”模块的“开发”部分中,转到“本质”列表,然后转到“创建新的本质”部分。 我们给它命名为产品,默认情况下保留其余设置。 默认情况下,将创建具有行为的实体:一个视图可以属于一个类别。 但是,您可以指定其他行为:仅创建不带类别的视图,或者一个视图可以属于多个类别。

当任何类别都有父项时(最顶层的类别除外),类别本身就是根据树状原理构建的。 即 类别是树型数据结构的叶子。

创建的实体产品总数。 对于她来说,在app \ yicms \ Essences \ Models目录中创建了自动注释的类。 接下来,在开发面板中,我们需要创建类模板和演示模板。 所有这些都类似于我们为索引页面创建它们的方式。 “字段”,“文件块”,“图像块”和“条件”元素可在即时创建模式下使用。 一旦我们在管理面板中完成了模板的创建,就可以使用在开发面板中设置的模板元素来创建类别和视图。

因此,我们将创建几种商品。 对于每种类别的产品,都有几种产品。 一旦完成,整个事情就可以显示在主站点上。 考虑一下如何完成。 在SiteController中,创建一个actionProcuts动作:

 /** * * @return string */ public function actionProducts() { $productsEssence = Products::getInstance(); return $this->render('products', [ 'productsEssence' => $productsEssence ]); } 

为其创建产品视图

 <?php /** @var $this yii\web\View */ /** @var $productsEssence \app\yicms\Essences\Models\Products */ ?> <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方法返回了自动注释的类app \ yicms \ Essences \ Models \ ProductsCategory的对象数组。 与该类以前的自动注释类一样,我们在运行时创建的字段上也有注释,IDE将能够使用自动完成功能。 还值得注意的是,自动注释的类是基于这样的想法开发的:用户yicms将能够在其中放置自己的业务逻辑,即 您可以在其中编写自己的代码,并且自动注释机制会更改特殊标记的区域,并且不会影响用户代码。

$ category-> represented方法还会返回一个app \ yicms \ Essences \ Models \ ProductsRepresents对象的数组,这些对象具有与类别一样具有自动注释优点的所有对象。 当然,有更灵活的方法来获取想法。 例如,$ category-> getRepresentsQuery()将返回Yii2框架的ActiveQuery对象,可以进一步对其进行自定义以完善数据库查询,以用于创建分页或延迟加载。

总体而言,借助Essenses模块,您可以在管理面板已经运行的情况下快速创建商店功能的框架。 可以在自动注释的类中编写其他业务逻辑。

Yii2-yicms-反馈模块


该模块旨在由站点的访问者和用户在站点上构造信息输入表单。 工作的意识形态保持不变,首先在开发面板中键入表单所需的字段。

通过示例考虑模块的操作。 在反馈模块的开发面板中使用程序名称消息创建一条记录。 在邮件设置页面上,我们可以看到“反馈页面模板”按钮。 使用此链接,我们可以创建类型字段,文件块,图像块以及可用于格式化消息页面内容的条件的元素。 它们与我们为“页面”模块考虑的内容没有什么不同。 现在,我们对“反馈输入模板”部分更加感兴趣。 在本部分中,我们可以创建实体,例如输入字段,输入文件,输入图像和输入条件。 这些实体正是您创建自定义输入表单所需要的。

创建两个输入字段,分别具有名称和姓氏。输入名为照片的图像。输入条件称为协议。现在,让我们保留这些实体的所有设置为默认设置。在本示例的稍后部分,我们将动态配置悬挂在这些实体上的验证器(验证器也可用于Common模块的实体,并按照与反馈模块相同的逻辑进行工作。我们将在稍后进行讨论)。

现在在我们的网站上应用该模块。首先,在SiteController中创建一个新动作:

 /** * @return string */ public function actionMessage() { $messages = \app\yicms\Feedback\Models\Messages::getInstance(); return $this->render('message', [ 'messages' => $messages ]); } 

接下来,创建一个消息视图,并在其中编写以下内容:

 <?php /** @var $this yii\web\View */ /** @var $message \app\yicms\Feedback\Models\Messages */ ?> <?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; ?> 

对于输入类型的实体,必须使用input_前缀;否则,自动注释对它们的作用方式与yicms中其余内容的作用方式相同。

最初,将检​​查字段活动,如果该字段处于非活动状态,则不应呈现该字段,即使已呈现该字段,填充其中的数据也不会上载到服务器。现场活动可以在开发面板中打开/关闭。

接下来是框架的标准形式,您需要像这样编写

 $form->field($messages->input_name, $messages->input_name->key) 

$ messages-> input_name将返回类app \ yicms \ Feedback \ Models \ Message \ InputFields \ Name的对象,该对象是Model Yii2框架的后代,可以形式使用,$ message-> input_name-> key将按顺序返回正确的键值以便可以加载表格。

现在,当我们转到带有表单的页面时,将渲染其所有字段,但是尚无法加载到服务器。这很容易做到。我试图使反馈工作界面尽可能类似于框架中的模型工作界面。是的,我不得不“牺牲”一些架构,但总体来说结果是这样的:

 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 { /** * @return self instance . */ public static function getInstance() { return self::getByName('messages'); } /** * @inheritdoc */ 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 /** @var $this \yii\web\View view component instance */ /** @var $message \app\yicms\Feedback\Models\Message */ ?> <h1>Mail on message</h1> <h1>Name: <?= $message->input_name->value ?></h1> <h2>Surname: <?= $message->input_surname->value ?></h2> 

$ message-> input_name-> value仅返回存储在数据库中的当前数据。

现在让我们看看验证器是如何工作的。在名称为name的输入字段实体的dev面板中,添加Required验证器。这是标准的yii \ validators \ RequiredValidator框架验证器。当我们添加它时,它尚未激活,因为其名称为白色的按钮。为了激活它,您需要单击此按钮,验证器设置窗口将打开。在那里,您需要安装复选框并激活它。同时,您可以配置所有其他验证器参数,例如所有系统语言的错误消息等。保存后,验证器图标变为绿色,这意味着该图标已激活,将在验证表单时应用。

在具有名称约定的input_condition上,我们挂起比较验证器。并将其配置为与1进行比较,键入数字和运算符==。此外,您可以在错误文本字段中写一条消息,例如“您必须同意要约的条款”。现在,在表单上,​​仅当选中“协议”复选框时,才会进行验证。

总体上,我们检查了yicms系统的主要功能。

Source: https://habr.com/ru/post/zh-CN454914/


All Articles