• Как организовать Табличный ввод данных в YII?

    @Arik
    1. Получаем список моделей
    2. Во вьюхе выводим таблицу с полями, в качестве ключа items[$modelId]['fieldName'] -> items[12][price_min]
    3. В action save:
    3.1. Находим все id моделей которые показывали array_keys($_POST['items'])
    3.2. Находом все модели
    3.3. Проходим циклом по массиву/коллекции с моделями
    3.4. По ключу находим соответ данные для обновления $_POST['items'][$model->id]
    3.5. Обновляем и сохраняем модель
    //
    чем больше показываете таблицу тем больше будет нагрузка n-запросов update, где n - кол-во items. Возможно легче все на аякс посадить. Но тут уже дело оптимизации всего. Так как как update массово сделать я не знаю
    Ответ написан
  • Создание блочного сайта и передача переменной в layout?

    igorbelikov
    @igorbelikov
    Fullstack Developer
    Вот пару способов:
    • оформить как виджет
    • объявить переменную в контроллере и выводите ее в представьении
    // В контроллере
    public $topicday = "defaultvalue";;
    public function actionTest() {
      $this->topicday = "somevalue";
      // ...
    }
    // Вывод в представлении (layout)
    <?= $this->topicday ?>


    PS
    Если необходимо использовать второй способ, то вам нужно в вью сделать так:
    <?php $this->renderPartial('_topicday', array('topicday' => $this->topicday)); ?>

    Только учтите, что этому свойству нужно задавать какое-то значения по умолчанию или делать проверку в самом _topicday и если оно NULL, то ничего не выводить ибо ваш layout могут использовать другие контроллеры и в них значение свойства public $topicday может быть не определенно.
    А вообще, то этот случай полностью подходит под категорию - виджет, там нет ничего сложно в их реализации, а после того, как вы его сделаете - вы поймете на сколько это красивое решение и как оно удобно. Гайд можно посмотреть тут www.bsourcecode.com/yiiframework2/how-to-create-cu...
    В коде он будет выводится примерно так:
    <?= TopicDay::widget() ?>
    И главное - вся логика, представления и его контрол - будут в одном месте и никак не будут от чего-то зависеть.
    Ответ написан
    Комментировать