Динамические поля в модели

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
justice
Сообщения: 31
Зарегистрирован: 2011.02.23, 00:31

Динамические поля в модели

Сообщение justice »

Приветствую.
Прошу не бить меня сильно, возможно тема была на форуме, но либо я не знаю что спрашивать либо искать не умею.

Есть такая задача:
Есть элементы Items которые принадлежат Categories.
Каждая Categories должна иметь несколько типов полей (текстовое поле, чекбокс, селект, мультиселект).
Причем количество полей не ограничено и пользователь в любой момент может добавить еще таких полей.
Если он выбирает тип поля селект/мультиселект, то должна быть возможность добавить необходимое количество вариантов выбора.

Подскажите как можно красиво реализовать такой функционал, ведь с большинстве cms или интернет магазинах такая возможность есть.

Читал про бехавиоры, но пока не понятно как их сюда прикрутить.

Ткните носом :)
Feci quod potui,faciant meliora potentes
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Динамические поля в модели

Сообщение porcelanosa »

посмотрите как там сделано
обычно несколько таблиц
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
ElisDN
Сообщения: 5841
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Динамические поля в модели

Сообщение ElisDN »

В простейшем случае нужны две таблицы.

1. Список полей к типам товаров tbl_attribute (модель Attribute):

Код: Выделить всё

id (pk)
type_id (fk тип товара)
name (название поля)
alias (название транслитом, если нужно)
fieldtype (тип значения: text, checkbox, ...)
2. Значения для каждого товара tbl_attribute_value (модель AttributeValue):

Код: Выделить всё

id (pk)
product_id (fk продукт)
attribute_id (fk к tbl_attribute) 
value (значение)
с отношением

Код: Выделить всё

'arrtibute'=>array(self::BELONGS_TO, 'Attribute', 'attribute_id')
Продукту добавляем отношение для получения значений его атрибутов

Код: Выделить всё

'attrvalues'=>array(self::HAS_MANY, 'AttributeValue', 'product_id')
И выводим циклом значения и подписи

Код: Выделить всё

<?php foreach ($product->attrvalues as $attrvalue): ?>
<p><?php echo $attrvalue->arrtibute->name; ?>: <?php echo $attrvalue->value; ?></p>
<?php endforeach; ?>
Аватара пользователя
ElisDN
Сообщения: 5841
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Динамические поля в модели

Сообщение ElisDN »

Развил тему у себя в статье динамические атрибуты для товаров. Если что-то непонятно, то скажите и я дополню.
Аватара пользователя
justice
Сообщения: 31
Зарегистрирован: 2011.02.23, 00:31

Re: Динамические поля в модели

Сообщение justice »

porcelanosa писал(а):посмотрите как там сделано
обычно несколько таблиц
Привет. Где надо посмотреть не понял :)
Feci quod potui,faciant meliora potentes
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Динамические поля в модели

Сообщение lancecoder »

т.е. у вас я могу в инпут поле вставить несколько значений?
Аватара пользователя
justice
Сообщения: 31
Зарегистрирован: 2011.02.23, 00:31

Re: Динамические поля в модели

Сообщение justice »

lancecoder писал(а):eav
Про eav я слышал, но есть пара моментов
1. Хотелось бы поподробнее со ссылками на статьи или примерами :)
2. Бегло почитал про еав увидел что не многим он нравится и какието проблемы с поиском возникают
Feci quod potui,faciant meliora potentes
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Динамические поля в модели

Сообщение lancecoder »

проблема там одна, что у вас будет расти таблица валуе, но в данной технологии это не избежно, для кмс самое оно именно в этом один из их минусов
ссылки вам покажет гугл у меня вторая на хабр
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Динамические поля в модели

Сообщение lancecoder »

монго дб гуглите тоже, там можете реализовать такое безболезнено
апд: п.с. монго как пример
Ответить