По хорошему должна быть отдельная табличка с типами, которой будет рулить администратор из админки. Например, появится новый тип/подтип товара и что делать, ковырять код каждый раз? Какой-то у вас очень упрощённый вариант. Ну да ладно... Генерируете для этой модели CRUD в gii, выводится ваш список при помощи виджета GridView. Только поле items_sort лучше переименовать во что-то более логичное, н-р item_type. Чтобы был красивый множественный выбор из списка используете виджет Select2 (Small Multiple).
http://demos.krajee.com/widget-details/ ... sage-sizes
Выводите колонку с типом или вешаете фильтр на любую другую колонку:
Настройка колонки в GridView:
Код: Выделить всё
[
'attribute' => 'item_type',
'filter' => Select2::widget([
'model' => $searchModel,
'attribute' => 'item_type',
'size' => Select2::SMALL,
'data' => ModelName::getTypesForSelect(), // Этим методом будем вытаскивать из модели массив для заполнения select. По фен-шую массив нужно передавать из контроллера.
'options' => ['placeholder' => 'Фильтр...', 'multiple' => true],
'pluginOptions' => [
'allowClear' => true,
],
]),
],
В search-модели
Код: Выделить всё
public function rules()
{
return [
...
// Это самый простой вариант, лучше добавить свой метод-валидатор, который проверит, что передаваемой значение есть в массиве типов
[['item_type'], 'each', 'rule' => ['string']],
];
}
Массив IN фреймворк сам сформирует, достаточно записи которая уже появится после генерации в gii
Код: Выделить всё
$query->andFilterWhere([
'item_type' => $this->item_type,
]);
Ничего сложного