Контроллер:
Код: Выделить всё
<?php
namespace app\controllers;
use app\models\Catalog;
use app\models\CatalogItem;
use MP\DIMagick\ActionDITrait;
use yii\filters\AccessControl;
use yii\web\Controller;
class CatalogController extends Controller {
use ActionDITrait;
public function behaviors() {
return [
'access' => [
'class' => AccessControl::class,
'rules' => [
[
'actions' => ['list', 'save', 'delete', 'create-item', 'delete-item'],
'allow' => true,
'roles' => ['@'],
],
],
],
];
}
public function actionList() {
return $this->render('list', ['items' => Catalog::find()->with('items')->all()]);
}
public function actionSave($id = null) {
$model = $id ? Catalog::findOne($id) : new Catalog();
if ($model->load(\Yii::$app->request->post()))
$model->save();
}
public function actionDelete(Catalog $model) {
$model->delete();
}
public function actionCreateItem() {
$model = new CatalogItem();
if ($model->load(\Yii::$app->request->post()))
$model->save();
}
public function actionDeleteItem(CatalogItem $model) {
$model->delete();
}
}
Код: Выделить всё
<?php
/** @var \app\models\Catalog[] $items */
use app\models\Catalog;
use app\models\CatalogItem;
use rmrevin\yii\fontawesome\FAS;
use yii\bootstrap\Modal;
use yii\data\ArrayDataProvider;
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\widgets\ListView;
use yii\widgets\Pjax;
$this->title = 'Справочники';
$this->params['breadcrumbs'] = [$this->title];
?>
<style>
.list-view > div {
padding: 10px;
}
.list-view > div:nth-child(odd) {
background-color: lightskyblue;
}
.list-view > div:nth-child(even) {
background-color: lightyellow;
}
</style>
<? Pjax::begin(['enablePushState' => false]); ?>
<? $form = ActiveForm::begin(['action' => ['catalog/save'], 'options' => ['data-pjax' => true, 'class' => 'row']]); ?>
<div class="col-md-4"><?= $form->field(new Catalog, 'name')->label(false)->input('text', ['placeholder' => 'Название']); ?></div>
<div class="col-md-2"><input type="submit" value="Добавить" class="btn btn-primary" style="margin-left: -20px"></div>
<? ActiveForm::end(); ?>
<div style="border: 1px solid lightgrey">
<?= ListView::widget([
'dataProvider' => new ArrayDataProvider(['allModels' => $items, 'pagination' => false]),
'layout' => '{items}',
'itemView' => function(Catalog $catalog) {
ob_start();
echo $catalog->name;
echo Html::beginTag('span', ['class' => 'pull-right']);
Modal::begin([
'toggleButton' => ['tag' => 'a', 'label' => FAS::i('edit'), 'style' => 'cursor: pointer'],
'header' => Html::tag('h3', 'Варианты'),
]);
$form = ActiveForm::begin(['action' => ['catalog/create-item'], 'options' => ['data-pjax' => true, 'class' => 'row']]);
echo Html::tag('div', $form->field(new CatalogItem(['catalog_id' => $catalog->id]), 'value')->label(false), ['class' => 'col-md-6']);
echo '<div class="col-md-2"><input type="submit" value="Добавить" class="btn btn-primary" style="margin-left: -20px"></div>';
ActiveForm::end();
echo ListView::widget([
'dataProvider' => new ArrayDataProvider(['allModels' => $catalog->items, 'pagination' => false]),
'layout' => '{items}',
'itemView' => function(CatalogItem $catalogItem) {
return $catalogItem->value . Html::a(FAS::i('trash-alt'), ['catalog/delete-item', 'id' => $catalogItem->id], ['title' => 'Удалить', 'class' => 'pull-right', 'data-pjax' => true]);
}
]);
Modal::end();
echo Html::a(FAS::i('trash-alt'), ['catalog/delete', 'id' => $catalog->id], ['title' => 'Удалить', 'data' => ['confirm' => 'Вы уверены что хотите удалить этот справочник?', 'pjax' => true]]);
echo Html::endTag('span');
return ob_get_clean();
},
]) ?>
</div>
<? Pjax::end(); ?>