Темизация выпадающего списка с териминами словаря

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

Аватар пользователя IPlayer IPlayer 15 мая 2009 в 23:27

Продолжаем осваивать различные 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;
 }
}

Вторую задачу решаем с помощью хука 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 = 'В качестве события нельзя указывать группу событий');
                }
        }
        }

Комментарии

Аватар пользователя Обухов Никита Обухов Никита 16 мая 2009 в 11:09

$term=str_replace('-','---- ',$term);

А если есть термин, содержащий в себе тире?

PS> Такой выбор крайне неудобен пользователю, пользователь привык к тому что для каждого уровня таксономии отдельный Select. В Друпале есть Hierarchical Select, но для 6-ки сделан не полностью, к тому же ужасно тормозной.

Аватар пользователя IPlayer IPlayer 16 мая 2009 в 13:10

Обухов Никита wrote:

А если есть термин, содержащий в себе тире?

Ну это уже частности... Я не претендовал на абсолютную универсальность именно этого кода. Мне кажется что отловить "-" в начале строки не составит большого труда :). Я просто хотел показать сам механизм. Допилить напильником - дело уже сугубо личное...

Обухов Никита wrote:

PS> Такой выбор крайне неудобен пользователю, пользователь привык к тому что для каждого уровня таксономии отдельный Select.

Я бы не был так категоричен. Все зависит от количества элементов на каждом уровне. У меня например словарь в 30 терминов всего. максимальная вложеннсть 3. Ну нет необходимости делать три селекта для 30 терминов...