vorst.ru - Редактирование Nested Set
Статьи из рубрики nested-set

Виджет для вывода списка рубрик Nested Set

Выбор всех статей по рубрике

В конце предыдущей статьи были указаны две вещи, которых не хватает для начала использования рубрикатора.

Первая из них - необходимо добавить поле rubric в таблицу post. С этой операцией связано и изменения в модели common/models/Post, которые очевидно касаются методов rules() и attributeLabels().

Кроме этого нужно добавить обработку выбранной пользователем рубрики в actionIndex() контроллера frontend/controllers/PostController.


Простые действия над деревом Nested Set

Что нужно учесть для CRUD

Все необходимые методы, для управления деревом Nested Set уже определены в расширении.

Поэтому изменения в стандартном контроллере совсем небольшие. Нужно, например, вместо стандартного метода save() модели использовать метод prependTo() расширения, а вместо delete(), deleteWithChildren().


Представления для операций с Nested Set

Что нужно учесть в представлениях при редактировании Nested Set

Мы, в общих чертах, разобрались с деревьями Nested Set и создали модель для хранения дерева. В модели определили пару простых методов.

Теперь нужно разобраться с тем, как добавлять новые рубрики. Начнем с представлений.


Подключение расширения Nested Set

Определение данных и необходимых методов в модели

Мы получили общее представление о древовидной структуре данных называемой Nested Set. Теперь пришло время подключить к блогу соответствующее расширение.

Поведение выполняет работу по добавлению новых элементов в дерево, поиск всех подчиненных элементов для данного узла, удаление узла. И многое другое, что может быть использовано, например, при работе с каталогами товаров.


Как устроена структура данных Nested Set

Как сделать рубрикатор

Рубрикатор, как средство поиска интересных статей, имеет свои недостатки - трудно придумать иерархию, названия рубрик, трудно потом решить к какой конкретно рубрике относится статья. "Но, так принято" - скажите вы и будете правы.

Поэтому, давайте делать рубрикатор.



Поиск



Представления для операций с Nested Set

Что нужно учесть в представлениях при редактировании Nested Set

Мы, в общих чертах, разобрались с деревьями Nested Set и создали модель для хранения дерева. В модели определили пару простых методов.

Теперь нужно разобраться с тем, как добавлять новые рубрики. Начнем с представлений.


    Поделиться

Для добавления рубрики нужно определить, в какую родительскую рубрику будет входить новая рубрика. Этой цели служит поле $parent_node модели.

Посмотрим, как будет выглядеть добавление.

View

В представлении backend/views/rubric/_form.php вставим выпадающий список уже существующих рубрик.

<?= $form->field($model, 'parent_node')->dropdownList($model->items(), [
  'prompt' => \Yii::t('app', 'Select'),
  'disabled' => !$model->isNewRecord,
]); ?>

И поле для ввода названия рубрики.

<?= $form->field($model, 'name')
  ->textInput(['maxlength' => true])
?>

Представления create.php и update.php вполне обычные.

Для управления рубриками служит представление index.php текст которого приведен почти полностью.

<?= GridView::widget([
  'dataProvider' => $dataProvider,
  'layout' => "{items}\n{summary}\n{pager}",
  'columns' => [
    [
      'attribute' => 'name',
      'format' => 'html',
      'value' => function($data) {
        return $data->getPrettyName(true);
      }
    ],
    [
      'class' => 'yii\grid\ActionColumn',
      'template' => '{update}{delete}', 
      'options' => ['style' => 'width:60px;'],
    ],
  ],
]); ?>

Так как представление view.php не используется, мы отключаем его. Оставляем только возможность редактирования и удаления.

Усилий, как видно, не много и теперь можно переходить к контроллеру.

Заключение

Для добавления новой рубрики нужно определить родительскую рубрику. Это упрощенный подход, но его достаточно.

Оставить комментарий

Только авторизованные пользователи могут оставлять комментарии. Пожалуйста авторизуйтесь или пройдите регистрацию.