Yii. Master-detail с использованием виджета CGridView

Создание представлений данных по принципу master-detail (главный-подчинённый) одна из самых часто встречающихся задач как прикладного, так и web программирования. В частности, принцип master-detail используется при реализации просмотра статей по категориям (категория-статьи).

Также этот принцип можно использовать и для ряда других задач связанных с отображением иерархически структурированной информации в виде таблиц.

Постановка задачи.

Например, есть 2 связанные таблицы. Таблица со списком товаров и таблица со списком товаров (master) в магазинах (detail, на скриншоте ниже).

Товары по магазинам

Необходимо сделать так чтобы при клике мышью на товаре, отображалась информация о том, в каком магазине он продаётся.

Доработка вида Master таблицы.

Вначале модифицируем вид товаров. А, именно превратим название товара в гиперссылку, которая будет отправлять GET запрос.

Для этого простое описание поля в виджете CGridView:

на более развёрнутое, с использованием хелпера CHtml:

Первый элемент массива – название колонки, второй – тип содержимого (в жанном случае HTML код), последний элемент – собственно гиперссылка, которая и будет отображаться на странице в виде названия товара.

В результате таблица со списком товаров будет выглядеть следующим образом.

Товары

При этом при клике на названии товара будет переход по ссылке, которая соержит его идентификатор в базе данных (id). Например, если кликнуть по названию товара «Ананас», то в адресной строке браузера будет

http://example.com/index.php/goodsdescription/index/11

Таким образом, реализован переход со странице с таблицей списка товаров на страницу со списком товаров в магазинах и передача ей id товара с помощью GET запроса. Однако для решения рассматриваемой задачи этого не достаточно, так как просто получив id товара страница никак на это не отреагирует. Для того чтобы был отбор по id необходимо доработать её вид и модель.

Доработка вида и модели Detail таблицы.

Так как для формирования виджета CGridView используется меод search модели, то в него и передадим параметр id.

На этом доработка вида завершена. Теперь необходимо доработать метод search модели.

Для этого заменим id товара из атрибута модели на id товара,который передан из запроса. То есть, вместо:

Сделаем следующим образом:

В результате метод search получив, как указано выше, id товара из GET запроса, будет производить отбор уже по нему.

После этого переход по гиперссылке в названии товара в таблице со списком товаров приведёт к отображению списка только тех магазинов, в которых этот товар продаётся.Готовый detail

Рассмотренный в этой статье способ реализации master-detail достаточно универсален. Подобным образом в Yii вполне возможно реализовать отображение табличных данных по принципу master-detail в задачах практически любой степени сложности.

Стрелец Coder — Сайт профессионального программиста http://streletzcoder.ru/yii-mater-detail-s-ispolzovaniem-vidzheta-cgridview/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *