[урок] Осваиваем Hierarhical Select

Главные вкладки

Аватар пользователя NaZg NaZg 12 января 2011 в 23:29

Как и было обещано, пишу.
Задача:
Изучить возможности Hierarhical Select и научиться его использовать в своих сайтах.

Техническое задание:
Разработать сайт, который будет показывать участников в проектах.

Набор софта:
Drupal 6.20 русская локаль
Модули: CCK, taxonomy, hierarchital_select

Начнём с установки.
Как ставить друп рассказывать не буду (смайлик). CCK и taxonomy закидываются в modules, HS закидывается в sites/all/modules
Отмечаем их галками в /admin/build/modules/list и жмём "сохранить конфигурацию".
После этого делаем /update.php для корректной установки HS. Идём в /admin/reports/status и убеждаемся в корректности установки.

Установка закончена.

Теперь, давайте подготовим словарь, для реализации нашего ТЗ.
Словарь будет иметь структуру отдел->сотрудник
Сделаем это!

Готовим словарь
Добавляем новый словарь /admin/content/taxonomy/add/vocabulary
Заполняем данные

Галки для привязки с типу материала не ставим!
Ставим галку "обязательно" и жмём "сохранить".
Убедились, что словарь создан

Добавляем данные
Как я говорил выше, что словарь будет в формате отдел->сотрудник, давайте научимся это делать!

Жмём добавить термины. (в данном случае я не пишу ссылку, так как не совпадут идентификаторы словарей)
Сначала сформируем структуру нашей компании, а потом будем наполнять её сотрудниками.
Через форму "добавить термин" просто забиваем список отделов

Заполняем пока просто "название термина" остальное не трогаем.
Получится примерно такая картина

Мы подготовили список отделов.
Через эту же форму добавляем сотрудников, но тут уже раскрываем "дополнительные настройки" и выбираем родительский термин, для формирования иерархии

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

Словарь готов. Настроим его.

Жмём уже "изменить словарь"
Нас пока интересует только настройка множественного выбора (в проекте ведь может участвовать несколько сотрудников)

Словарь настроен.

Создадим тип материала
Топаем в /admin/content/types/add
Заполняем поля

Сохраняем.
Добавляем поле /admin/content/node-type/project/fields

Сохраняем и настраиваем добавленное поле (нас туда перекинет после сохранения)
Нам надо указать, из какого словаря брать данные и отметить, что обязательно заполнение

Сохраняем.
Идём в /node/add/project и наслаждаемся

БИНГО!

Спасибо за потраченное время. Жду помидоры.

Комментарии

Аватар пользователя chel chel 13 января 2011 в 3:48

Интересный подход.
Как в вашем варианте, к сотруднику еще поля добавить: год рождения, паспортные данные, другие поля?

Аватар пользователя NaZg NaZg 13 января 2011 в 7:12

"chel" wrote:

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

Аватар пользователя iNFerNo iNFerNo 13 января 2011 в 10:19

Так а результат то этого какой.

Выбираешь в Select отдел и после выбора отдела вылезает Select с фамилиями возможными?

А где HS используется (ни одного слова об этом) Иерархический выбор?

Аватар пользователя Bobby Bobby 13 января 2011 в 16:32

Спасибо)))
то что искал!!!
сразу вопрос..
1.если у меня 500 юзеров и все равно придется создавать словарь? каждого вручную вводить в словать???
может как нить сделать импорт из бд?
2.возможно соорудить более сложную конструкцию иерархии?
пример:
отдел:
-руководитель
-руководитель проекта
-сотрудики

Аватар пользователя velam velam 13 января 2011 в 17:07

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

Аватар пользователя iNFerNo iNFerNo 13 января 2011 в 18:03

Все седлал как на скриншотах. В Типе материала ... только
Сотрудники:
- охрана
- иллюстратор
- редактор

и все. ничего не выпадает ни каких фамилий.

Аватар пользователя iNFerNo iNFerNo 13 января 2011 в 18:06

Так как сохранил материал. Зашел изменить только тогда появилось меню второе с фио.

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

Аватар пользователя NaZg NaZg 13 января 2011 в 20:24

"Bobby" wrote:
2.возможно соорудить более сложную конструкцию иерархии?

да

"Bobby" wrote:
если у меня 500 юзеров и все равно придется создавать словарь? каждого вручную вводить в словать???
может как нить сделать импорт из бд?

юзеров сайта?
"Bobby" wrote:
может как нить сделать импорт из бд?

есть масса модулей импорта/экспорта

Аватар пользователя Vitalaa Vitalaa 13 января 2011 в 20:54

"chel" wrote:
Как в вашем варианте, к сотруднику еще поля добавить: год рождения, паспортные данные, другие поля?

Пользуйте Hierarhical Select Node Reference
"Bobby" wrote:
1.если у меня 500 юзеров и все равно придется создавать словарь? каждого вручную вводить в словать???
может как нить сделать импорт из бд?

То же предложение, просто одним из уровней иерархии сделать пользователей и каждому (либо заставить их самих) проставить отдел, в котором он работает.
"Bobby" wrote:

2.возможно соорудить более сложную конструкцию иерархии?
пример:
отдел:
-руководитель
-руководитель проекта
-сотрудники

В таком случае для типа материала Проект лучше сделать отдельные поля:
-руководитель (max 1 штука)
-руководитель проекта (max 1 штука)
-сотрудники (max неограниченно)

Аватар пользователя Artu Artu 27 января 2011 в 4:52

Vitalaa wrote:
"chel" wrote:
Как в вашем варианте, к сотруднику еще поля добавить: год рождения, паспортные данные, другие поля?

Пользуйте Hierarhical Select Node Reference

Поставил. Что-то не понятно.

Есть тип материала "Сотрудник".
Каждому сотруднику назначен отдел из словаря "Отделы" (иерархический, например Служба безопасности-Безопасность IT).
Тип материал "Проект" ссылается (node reference) на сотрудников.
Назначил полю field_personal (node reference) иерархический выбор.

Как сделать что бы вначале показывался отдел (нижнего уровня), а потом сотрудники этого отдела?
Сейчас вообще ничего не показывает.

Аватар пользователя Георгий Михайлович Георгий Михайлович 14 января 2011 в 20:14

Спасибо! по Вашей инструкции создал списки автомобилей такого вида

-Тойота
--Камри

Но вот скажите как сделать так чтобы в ССК поле выводилось название автомобиля не просто Камри а Тойота Камри?

Аватар пользователя dimmos37 dimmos37 15 января 2011 в 0:52

Подскажите, при создании термина выдает ошибку:

warning: array_shift() expects parameter 1 to be array, null given in /home/u274312/dl.xn-----vlck7a.xn--p1ai/www/includes/form.inc on line 1339.

Аватар пользователя NaZg NaZg 15 января 2011 в 15:46

"dimmos37" wrote:
warning: array_shift() expects parameter 1 to be array, null given in /home/u274312/dl.xn-----vlck7a.xn--p1ai/www/includes/form.inc on line 1339.

обновите все модули и ядро

Аватар пользователя dimmos37 dimmos37 17 января 2011 в 21:48

Выдает ошибку когда создаю термин например
Удочка
-Кривая

Когда кривую вставляю в удочку - ругается, но когда создаю удочку все нормально.

warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/xxx/dl.xn-----vlck7a.xn--p1ai/www/includes/bootstrap.inc on line 857.

warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/xxx/dl.xn-----vlck7a.xn--p1ai/www/includes/bootstrap.inc on line 857.

Аватар пользователя Litos Litos 5 марта 2011 в 15:51

dimmos37 wrote:
Выдает ошибку когда создаю термин например
Удочка
-Кривая

Когда кривую вставляю в удочку - ругается, но когда создаю удочку все нормально.

warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/xxx/dl.xn-----vlck7a.xn--p1ai/www/includes/bootstrap.inc on line 857.

warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/xxx/dl.xn-----vlck7a.xn--p1ai/www/includes/bootstrap.inc on line 857.

Та же проблема.
Удалось вылечить?

Аватар пользователя Bobby Bobby 17 января 2011 в 13:24

"NaZg" wrote:
юзеров сайта?

да их много =)))
"NaZg" wrote:
есть масса модулей импорта/экспорта

щас поищем)))
"Vitalaa" wrote:
То же предложение, просто одним из уровней иерархии сделать пользователей и каждому (либо заставить их самих) проставить отдел, в котором он работает.

скорее уровнем сделать должность, а там как нить свзать должность и юзера;
нее..надо мне сделать)
"Vitalaa" wrote:
В таком случае для типа материала Проект лучше сделать отдельные поля:
-руководитель (max 1 штука)
-руководитель проекта (max 1 штука)
-сотрудники (max неограниченно)

а что идея, надо будет пропробоать и то и то)))

Аватар пользователя Vitalaa Vitalaa 18 января 2011 в 12:28

"Bobby" wrote:
скорее уровнем сделать должность, а там как нить свзать должность и юзера;
нее..надо мне сделать)

- ну дак продумывайте иерархию как хотите - ваше дело. При использовании Hierarhical Select Node Reference, что мне понравилось, можно пользовать модуль импорта нод и там проставлять значения полей, в том числе и значения связи между нодами (при его использовании не создавайте обязательных полей, даже таксономии - будет выдавать ошибку). Но вам нужно учесть, что этот модуль создёт новые ноды, не редактируя старые. И вам скорее всего придётся писать SQL-запрос для формирования значений в поле связи юзер - должность.

Аватар пользователя Vitalaa Vitalaa 31 января 2011 в 8:52

HS и HSNR не работают вместе, то есть либо у вас словарь: подразделение->отдел->сотрудник, либо создавайте отдельные типы материалов вышеуказанной структуры. У меня так было.

Аватар пользователя Korsarchik Korsarchik 9 февраля 2011 в 17:42

"dimmos37" wrote:
Выдает ошибку когда создаю термин например
Удочка
-Кривая

Когда кривую вставляю в удочку - ругается, но когда создаю удочку все нормально.

warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/xxx/dl.xn-----vlck7a.xn--p1ai/www/includes/bootstrap.inc on line 857.

warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/xxx/dl.xn-----vlck7a.xn--p1ai/www/includes/bootstrap.inc on line 857.


справился с проблемой?

Аватар пользователя ZanaDLucTyc ZanaDLucTyc 9 февраля 2011 в 20:27

Благодарю, в закладки добавил. Но:

"NaZg" wrote:
CCK и taxonomy закидываются в modules

"RxB" wrote:
Как бы вредный совет

Поддерживаю.
CCK, как и остальные - в /sites/all/modules
А Taxonomy и так в /modules должен быть, ибо стандартный.

Аватар пользователя Artemy Artemy 23 февраля 2011 в 14:58

Все сделал как написано, не выпадает таксонимия второго и последующего уровняю

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

Аватар пользователя dimmos37 dimmos37 5 марта 2011 в 16:00

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

Аватар пользователя Litos Litos 5 марта 2011 в 16:57

Я делаю так:

Словарь таксономии: Автомобиль
---Audi
------A1
------A2
------A3
---BMW
------1
------3

Потом при создании ноды называю её Audi A1 1.6MT, в разделе таксономии выбираю Audi и A1.
Но не пойму при чём тут термины и ноды?

Аватар пользователя NaZg NaZg 14 апреля 2011 в 10:03

"kustoru" wrote:

Как вы решили проблему с нижеследующим?
htmlspecialchars() expects parameter 1…bootstrap.inc on line 857


у меня её не возникало

Аватар пользователя psy11 psy11 1 мая 2011 в 14:04

Все хорошо заработало, но это при добавлении. А как теперь отфильтровать проект по отделу и сотруднику? Имеется ввиду, что надо какое-то меню в котором по этому же принципу происходила отсортировка документов. В вашем случае - сначала выбираем отдел, потом сотрудника и получаем проекты в которых он участвует

Аватар пользователя tishka tishka 7 мая 2011 в 9:18

всё конечно хорошо.... но вот самое интересное упустили: как потом все это красиво вывести, например через view. Я, например, там стопорюсь... как настраивать поля и фильтры, и нужно ли что-то еще настраивать, чтобы получилась четкая структура с переходом на нижеследующие уровни? Заранее спасибо!

Аватар пользователя Litos Litos 7 мая 2011 в 12:04

Я например темизацию делаю так, это способ универсален, подходит не только к этому уроку.
Если у вас Firefox и установлен Firebug, то нажмите по нужному выпадающему полю правой кнопкой мышки, выберите пункт меню "Анализировать элемент". Внизу откроется панель Firebug. И ваш выпадающий список появиться в ней и будет выделен соответсвующий тег. Выпадающее поле характерно тегом Select. В моей случае этот тег такой: . У этого тега стоит уникальный в пределах всего сайта ID - edit-tid-hierarchical-select-selects-0. Теперь в файле со стилями прописываем:
#edit-tid-hierarchical-select-selects-0 {
---ваши-настройки---
}
и всё.

Аватар пользователя hrommi hrommi 11 мая 2012 в 19:58

"dimmos37" wrote:
Да удалось.
Проблема была в некоректно настроенных автоматических синонимах, лепил на угад, старался придерживатся логике Drupal, сейчас коректно работает, сайт здал.

А можно поподробней?