Продолжаем осваивать различные hooks.
В форме есть выпадающий список с терминами таксономии. Озадачился следующим:
1. каждый следующий уровень детей сдвинут от родителей всего на один символ '-'. Не наглядно.
2. нельзя запретить пользователю выбирать термины у которых есть дети.
Первая задача решилась с помощью следующего хука (увеличиваем отступ до '----' или до чего хотите :)):
function my_module_form_alter(&$form, $form_state, $form_id) {
if ($form['type']['#value']== 'my_node_type')
// Увеличим отступ в списке таксономии в форме
$i=count($form['taxonomy'][1]['#options']);
for ($d=0; $d<($i-1); $d++) {
$term_ar= $form['taxonomy'][1]['#options'][$d]->option;
$key_ar=array_keys($term_ar);
$key=$key_ar[0];
$term=$term_ar[$key];
$term=str_replace('-','---- ',$term);
$form['taxonomy'][1]['#options'][$d]->option[$key]=$term;
}
}
if ($form['type']['#value']== 'my_node_type')
// Увеличим отступ в списке таксономии в форме
$i=count($form['taxonomy'][1]['#options']);
for ($d=0; $d<($i-1); $d++) {
$term_ar= $form['taxonomy'][1]['#options'][$d]->option;
$key_ar=array_keys($term_ar);
$key=$key_ar[0];
$term=$term_ar[$key];
$term=str_replace('-','---- ',$term);
$form['taxonomy'][1]['#options'][$d]->option[$key]=$term;
}
}
Вторую задачу решаем с помощью хука nodeapi:
function my_module_nodeapi(&$node, $op, $a3 ) {
if ($op=='validate') {
if (count(taxonomy_get_children(current($node->taxonomy), $vid = 0, $key = 'tid'))<>0) {
form_set_error($name = 'taxonomy', $message = 'В качестве события нельзя указывать группу событий');
}
}
}
if ($op=='validate') {
if (count(taxonomy_get_children(current($node->taxonomy), $vid = 0, $key = 'tid'))<>0) {
form_set_error($name = 'taxonomy', $message = 'В качестве события нельзя указывать группу событий');
}
}
}
Комментарии
$term=str_replace('-','---- ',$term);
А если есть термин, содержащий в себе тире?
PS> Такой выбор крайне неудобен пользователю, пользователь привык к тому что для каждого уровня таксономии отдельный Select. В Друпале есть Hierarchical Select, но для 6-ки сделан не полностью, к тому же ужасно тормозной.
Ну это уже частности... Я не претендовал на абсолютную универсальность именно этого кода. Мне кажется что отловить "-" в начале строки не составит большого труда :). Я просто хотел показать сам механизм. Допилить напильником - дело уже сугубо личное...
Я бы не был так категоричен. Все зависит от количества элементов на каждом уровне. У меня например словарь в 30 терминов всего. максимальная вложеннсть 3. Ну нет необходимости делать три селекта для 30 терминов...
Спасибо, пригодится.
И мне пригодится. Спасибо.
Мне помог модуль Select With Style