Ограничить глубину словаря

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

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

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

Словарь:
- Термин
-- термин 2
-- термин 3
-Еще термин
-- под термин
-- последний термин

Хотелось бы чтобы при создании нода типа "А" было видно все дерево, а при создании нода типа "Б" видны были только "Термин" и "Еще термин"

Дошел до этого:

<?php
function mytheme_form_alter($form_id, &$form) {
    if (
$form_id == 'master_p_node_form') {
        
//Вот тут надо что-то сделать с элементом формы...
    
}
}
?>

Спасите ... Smile

Комментарии

Аватар пользователя overall@drupal.org overall@drupal.org 23 марта 2009 в 17:37

Можно попробовать использовать Hierarchical Select + Content Taxonomy
Завести для типов нод поля типа taxonomy, и задавать таксономию в них, при этом выставить настройку "Save values additionally to the core taxonomy system (into the 'term_node' table)."
И ограничивать глубину посредством "Depth of taxonomy tree:"

Или еще попробовать такую фишку, как возможность нахождения одного термина в нескольких словарях, где-то я такое читал. Привязать первый уровень ко всем N словарям, второй ко N-1 и т.д. И словари назначить на разные типы нод.
N - число типов нод

Аватар пользователя mixey mixey 23 марта 2009 в 18:12

Как то сложновато для данной задачи мне кажется.. плюс "storage settings: save values additionally to the core taxonomy database table. (Drupal 6)" необходимо для 5го друпала.

Спасибо за идею, но хочется проще Smile

Аватар пользователя mixey mixey 11 мая 2009 в 19:00

Со второй попытки все же осилил данную проблему, на случай если кому пригодится - ниже решение:

function YOUR-MODULE_form_alter($form_id, &$form) {
   if ($form_id == 'YOUR-FORM_p_node_form') {
      $form['taxonomy'][8]['#options'] = fill_vocabulary_only_with_top_level_terms(8);
   }
}

function fill_vocabulary_only_with_top_level_terms($vocab_id) {
   $tree = taxonomy_get_tree($vocab_id, 0, -1, 1);
   foreach ($tree as $term) {
      $opt = new stdClass();
      $opt->option = array($term->tid => $term->name);
      $new_tax_values[] = $opt;
   }
   return $new_tax_values;
}

Надеюсь кому-нибудь пригодится. Удачи!