@AlexKuznec

Динамическая подгрузка контента виджета yii\bootstrap\Collapse?

Решил отображать на YII2 список вида "дерево" с помощью виджета yii\bootstrap\Collapse, так как он сам сворачивает неактивные ветви. Данные подгружаются из базы, ветвление может оказаться достаточно сильным, а главное, пользователь в большинстве случаев их просматривать вообще не станет, поэтому хочу сделать динамическую подгрузку данных для минимизации нагрузки на сервер.

JS и AJAX я почти не знаю, YII2 уже частично изучил, и, мне кажется, как-то можно сделать всё его средствами. Только в документации показано, как динамически заменять данные в видах (PJAX), а мне надо влиять на содержимое виджета, соответственно, и разметка html будет меняться :)

То есть, первоначально пользователю рендерится такая структура:
Collapse::widget([
        'items' => [
            [
                'label' => 'Список 1',
                'content' => [],
            ],
            [
                'label' => 'Список 2',
                'content' => [],
            ],
        ]
    ]);


Если нажать на какой-то список, то вместо пустого массива должен подгрузиться массив с настоящими данными (включая вложенные виджеты Collapse, которые тоже можно раскрывать без ограничений на глубину вложенности).
Вроде бы задача стандартная, но не пойму, как заменять пустой массив на содержащий что-то, при этом не затрагивая уже сгенерированные части вида?
  • Вопрос задан
  • 1019 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
сначала вопрос: почему Вы решили, что такой вариант менее ресурсоемкий по сравнением с построением полного дерева? Спрятав дочерние элементы в Collapse. Если результат построения дерева (html) закешировать - вот это будет правильно.
Теперь по вопросу:
после того как виджет Collapse отработал, Вы имеете уже html, и массивы тут не при чем явно. Дальше забываем про php и работаем с jquery. Вам надо цепляться за событие shown.bs.collapse и отправлять ajax запрос на сервер, там формировать html и возвращать, потом вставлять в контейнер.
bootstrap-3.ru/javascript.php#collapse
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы