alex290 / yii2-widget-content
小部件内容
2.0.3
2024-07-18 08:07 UTC
Requires
- alex290/yii2-images: *
- yiisoft/yii2: ~2.0.0
README
小部件内容
安装
通过composer安装此扩展是首选方式。
运行以下命令之一
php composer.phar require --prefer-dist alex290/yii2-widget-content "*"
或在您的composer.json
文件的require部分添加
"alex290/yii2-widget-content": "*"
使用
安装扩展后,只需在代码中通过以下方式使用它
连接外部Ckeditor 5 classic
<script src="https://cdn.ckeditor.com/ckeditor5/39.0.1/classic/ckeditor.js"></script>
或下载安装包,并按照Ckeditor文档https://ckeditor.npmjs.net.cn/docs/中的说明进行连接
在web.php配置中添加
'modules' => [
'widget-content' => [
'class' => 'alex290\widgetContent\Module',
'path' => 'upload', //path to files
],
],
运行迁移
php yii migrate/up --migrationPath=@vendor/alex290/yii2-widget-content/migrations
将行为附加到您的模型上(确保您的模型有"id"属性)
public function behaviors()
{
return [
'widget' => [
'class' => 'alex290\widgetContent\behaviors\Behave',
]
];
}
在管理后台显示小部件
$widget = [
'text' => [
'name' => 'Текст',
'preview' => '/web/images/widget/header.png',
'fields' => [
'name' => ['string', 'max' => 255],
'text' => ['string'],
'image' => ['image'],
]
],
...
'galery' => [ // Ключ уникальный поля
'name' => 'Галерея', // Название виджета
'preview' => '/web/images/widget/textImageTwo.png', // Путь к превьюшке
'fields' => [
'name' => ['string', 'max' => 255], // Тип поля
'text' => ['string'], // Тип поля
],
'item' => [ // Дополнительные поля (Например в галлереи несколько картинок)
'name' => ['string', 'max' => 255],
'image' => ['image'],
]
],
];
字段类型
['string', 'max' => 255] - 文本字段
['string'] - 文本区域
['integer'] - 整数
['image'] - 图片
['file'] - 文件
['select'] - 列表
...
'category' => ['select', [
'44' => 'News',
'55' => 'Information',
]],
<?php if (!$model->isNewRecord) : ?>
<?= $model->getWidget($widget) ?>
<?php endif ?>
获取该模型的 widgets 对象数组
$model->getContent();
删除 widgets
$model->removeWidgetAll();
$model->removeWidget($id);
在页面上显示记录
<?php if ($model->getContent() != null) : ?>
<?php foreach ($model->getContent() as $widget) : ?>
<div class="row">
<?php
$element = $widget['model']; // Основной виджет
$element->type // Тип виджета для разделения секций
$elementItem = $widget['item']; // Элементы виджета
$data = Json::decode($element->data); // Поля виджета
?>
<?php if ($element->getImage()->getPrimaryKey() > 0) : // Вывод изображения ?>
<img src="/web/<?= $element->getImage()->getPath() ?>" alt="">
<?php endif ?>
<?php if (!empty($elementItem)) : ?>
<?php foreach ($elementItem as $widgetItem) : ?>
<?php $dataItem = Json::decode($widgetItem->data); // Поля элемента виджета ?>
<?php if ($widgetItem->getImage()->getPrimaryKey() > 0) : // Вывод изображения ?>
<img src="/web/<?= $widgetItem->getImage()->getPath() ?>" alt="">
<?php endif ?>
<?php endforeach ?>
<?php endif ?>
</div>
<?php endforeach ?>
<?php endif ?>
显示文件
<a href="/web/<?= $data['file']['patch'] ?>" download="<?= $data['file']['filename'] ?>">Поле с названием</a>