Taxonomy + CCK = Taxonomy Fields

Прислано: tema

пт, 18/05/2007 - 06:03

Модуль Taxonomy Fields

Какая связь между CCK и Taxonomy? Эти модули занимаются разным делом: CCK конструирует типы контента, Taxonomy упорядочивает контент. Полезный и уже привычный функционал. Зачем придумывать еще что-то? Может не стоит умножать сущности?

Оказывается, принцип таксономии удобен не только для группировки материалов, но и для организации структуры материала. Каждому элементу таксономии (некоторые переводят слово 'term' как 'термин', хотя здесь на мой взгляд лучше подойдет слово 'элемент') можно сопоставить список полей из обычного набора CCK. Материал, принадлежащий этому элементу, получит его поля (они будут доступны для заполнения после сохранения материала с новым значением поля таксономии), как если бы вы вручную добавили их для данного типа материала, но изменения коснутся лишь материалов, принадлежащих данному элементу. Изменение положения материала в таксономии может привести к потере данных из утраченных полей, необходимо это учитывать.

При древовидной структуре таксономии элементы-потомки могут наследовать поля предков (фраза попахивает сельским хозяйством :). Можно назначить 'универсальное' поле, значение которого будет постоянным для всех материалов элемента и не будет доступно из формы редактирования материала.

Такой вариант архитектуры данных очень полезен при большом разнообразии контента. Один и тот же тип материала может иметь разный набор полей в зависимости от положения в таксономии. Перемещаясь по таксономии, материал может 'обрастать' новыми данными, добавляя их к уже имеющимся.

Интерфейс модуля плохо подходит для древовидных таксономий, при большом числе элементов и полей становится очень путаным. Предлагаю попробовать мой патч для версии 5.x-1.4-dev и функции для template.php (функцию 'theme_taxonomy_fields_list_output' надо переименовать в '<имя_вашей_темы>_taxonomy_fields_list_output' или 'phptemplate_taxonomy_fields_list_output').

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

Функции темы отображают дерево таксономии и добавляют унаследованные (inherited) поля к таблице элемента.

Планирую добавить к элементам комбо-боксы 'add existing field' и 'add new field', чтобы обойти лишний переход с неудобным диалогом выбора элемента.

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано sas@drupal.org в пт, 18/05/2007 - 06:23.

Ой я прошу прощения, немного туповат, если Вас не затруднит нельзя ли практический пример использования ?


Опубликовано tema в пт, 18/05/2007 - 07:02.

Добавил картинку. Будем считать, что она иллюстрирует и патч, и сферу применения модуля.


Опубликовано Dan в пт, 18/05/2007 - 07:03.

Да, я тож не догнал о применении, когда пробовал модуль :)

Очень хочется комментариев :)


Опубликовано sas@drupal.org в пт, 18/05/2007 - 07:09.

А вот конкретный вопрос из теории БД есть сущности и связь между ними один к одному - пример заказ товара и товарные позиции в нем. Вопрос следующий подойдет ли это поле ( о котором Вы пишете) для организации связки подчиенния материала - "товарная строка заказа" -> "заказ" , чтобы потом можно было через views отображать "товарные строки" к конкретному заказу (связь по аргументу) ?


Опубликовано tema в пт, 18/05/2007 - 08:52.

я тоже не сразу. требуется серьезная ревизия идеи CCK. область применения практически та же, что и у CCK – то есть неограниченная. кроме статичного набора полей у вас есть несколько дополнительных, иерархически организованных.


Опубликовано tema в пт, 18/05/2007 - 07:14.

конкретно этот модуль тут не при чем. это делает модуль nodereference из стандартной поставки CCK.


Опубликовано sas@drupal.org в пт, 18/05/2007 - 07:40.

Вот теперь понятно написал - молодца. А nodereference позволяет коннектить уже созданный материал.


Опубликовано Dan в пт, 18/05/2007 - 09:40.

То есть это, по сути, как статические данные в классах объектно-ориентированных языков?
То есть один (или несколько) элементов являются общими для всех экземпляров данного класса (данного типа CCK)?
И при его изменении, значение обновляется для всех экземпляров (материалов)?
Так?


Опубликовано tema в пт, 18/05/2007 - 11:44.

каждое поле тоже как бы класс, его экземпляры можно добавлять к типам контента, которые типа тоже класс, экземпляром которого является контент.

если добавить новое поле вручную (admin/content/types), оно возникнет как класс и как его пока единственный экземпляр для редактируемого типа контента. для всех экземпляров данного типа контента (материалов) это поле будет доступно вне зависимости от позиции материала в таксономии.

интересная деталь – настройки виджета (набор зависит от типа поля: widget_type, label, weight, description, ...). они настраиваемы для каждого экземпляра поля отдельно. т.е. если добавить поле руками, внутри этого типа контента его настройки виджета постоянны. они могут быть другими у другого экземпляра поля в другом типе контента.
спасибо автору, что решил нас не пугать: получить в одном материале 2 экземпляра одного поля с разными виджетами мне не удалось – статические поля приоритетнее таксономных.

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

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


Опубликовано Dan в пт, 18/05/2007 - 13:43.

Хотел просто написать "пиздец!", но сдержался :)


Опубликовано vadbars@drupal.org в пт, 18/05/2007 - 16:16.

Хорошо, что сдержался, а то неудобно как-то перед http://drupal.ru/profile/gender/женский :)


Опубликовано tema в пт, 18/05/2007 - 19:34.

:)


Опубликовано kiev1 в сб, 19/05/2007 - 00:25.

как я понял все очень просто - когда надо сделать много разных типов контента но у них есть одинакового типа поля - то что-б не плодить много всего - этот патч позволяет объединять одинаковые поля в одно, а разные выстраиваются в дерево, да? только таксономии при чем?


Опубликовано sas@drupal.org в сб, 19/05/2007 - 08:53.

Нет использование cck_field разными content встроено, а вот насчет чтобы не плодить вы правы, дело в том, что это следующий уровень абстракции типов :)


Опубликовано tema в сб, 19/05/2007 - 11:32.

для того, о чем вы говорите, достаточно просто поставить CCK (а с 6-й версии ничего ставить не надо).

модуль предлагает организовывать типы контента в дерево с различными наборами полей.

патч и функции темы делают этот процесс более наглядным.


Опубликовано tema в сб, 19/05/2007 - 11:46.

хехе!

по крайней мере один человек меня понял :))


Опубликовано vadbars@drupal.org в сб, 19/05/2007 - 12:43.

Навеяло. Гегель говорил: "Никто меня толком не понял, только Мейнерт. Да и тот понял неправильно." :)


Опубликовано aRDee в сб, 26/05/2007 - 11:04.

отличное развитие...
только есть одна ошибка...
когда выбираешь терм к которому нужно добавить поле, select listы словарей выводятся с учетом параметров словарей, т.е. получается если отмечено что должен быть выбран хотяб один термин, то он уже автоматическии выбран при добавлении!!! т.е. поле добавляется еще к термам которые не нужны, приходится удалять вручную


Опубликовано ryumkin в чт, 19/06/2008 - 06:02.

Попробовал модуль, он не очень вписывается в философию Drupal, по идее должна быть иерархия Типов Материалов, а не приписывание полей Категориям. В любом случае хоть что-то...
И еще хотел резюмировать/спросить работу модуля:

1. Мы должны создать базовый Тип Материала, без добавления в него доп. свойств
2. Мы должны включить этот Тип Материала в Категорию
3. Добавляем свойства уже к иерархии Терминов

Таким образом у нас получается, что Тип Материала, созданного нами лишь номинально присутствует в системе лишь для того, чтобы иметь возможность создавать материал ЛЮБОГО ТИПА из иерархии терминов, так?


Опубликовано Tesmon в пт, 24/07/2009 - 08:35.

Вот он высокий порог вхождения: когда даже Drupal-разработчик еле сдерживается, чтобы не сказать "Пиздец!" :)


Опубликовано kiev1 в пн, 27/07/2009 - 22:19.

ну а еще был модуль category кажется который делал нодами все - и таксономии и что-то еще, в общем надо что бы не очень усложнять


Новое на сайте

Ссылки партнёров