2010-03-11 5 views
6

Я немного смущен. Я создал простую форму с одним текстовым полем и кнопкой отправки. Теперь я хочу добавить раскрывающийся список select/option для таксономических терминов, используя функцию taxonomy_get_vocabularies().drupal - добавить список вариантов/вариантов в форму

$vocabularies = taxonomy_get_vocabularies('my_type'); 

Мой вопрос в том, как я могу получить список слов на форме «путь Drupal». Способ определения Drupal выглядит довольно жестким. Также, как я мог бы сделать это условие, скажем, о существовании соответствующих таксономических условий.

function my_form_name($form_state) { 

// A Short question. 
    $form['title'] = array(
    '#type' => 'textfield', 
    '#title' => t('Question'), 
    '#default_value' => $node->title, 
    '#required' => TRUE, 
    '#weight' => 1, 
    '#description' => t('A text box goes here '), 
); 

    $form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('submit'), 
    '#weight' => 7, 
); 

    return $form; 

ответ

11

я делаю что-то подобное в пользовательской форме, и обнаружили, что гораздо проще в использовании taxonomy_get_tree, с кодом словаря в качестве аргумента функции. Смотрите ниже:

//get the list of locations from taxonomy to use in the dropdown 
$dropdown_source = taxonomy_get_tree(2); 
$dropdown_array = array('0' => '--none--'); 
foreach ($dropdown_source as $item) { 
$key = $item->tid; 
$value = $item->name; 
$dropdown_array[$key] = $value; 
} 

//location filter dropdown 
$form['filterset']['locationfilter'] = array(
    '#weight' => '1', 
    '#key_type' => 'associative', 
    '#multiple_toggle' => '1', 
    '#type' => 'select', 
    '#options' => $dropdown_array, 
    '#title' => 'Filter by location', 
); 

unset($dropdown_array); 
0

Исследовать, как сделать это в taxonomy.admin.inc файле модуля систематики

/** 
* Form builder to list and manage vocabularies. 
* 
* @ingroup forms 
* @see taxonomy_overview_vocabularies_submit() 
* @see theme_taxonomy_overview_vocabularies() 
*/ 
function taxonomy_overview_vocabularies() { 
    $vocabularies = taxonomy_get_vocabularies(); 
    $form = array('#tree' => TRUE); 
    foreach ($vocabularies as $vocabulary) { 
    ... 
0

спасибо за быстрый ответ! Я думаю, что я это сделал.

$form['limiter'] = array(
    '#type' => 'select', 
    '#title' => t('Choose a value'), 
    '#id' => 'limiter', 
    '#options' => get_faq_terms(), 
); 

function get_faq_terms() { 
    // get the vid value from vocabulary_node_types file 
    $result = db_query("SELECT * FROM vocabulary_node_types WHERE type = 'my_type' "); 
    $node = db_fetch_object($result) ; 
    $vid = $node->vid ; 

    // get corresponding term names from term_data file 
    $items = array(); 
    $terms = taxonomy_get_tree($vid); 
    foreach ($terms as $term) { 
     $count = taxonomy_term_count_nodes($term->tid); 
     if ($count) {  
      $items[$term->tid] = $term->name; 
     } 
    } 
+0

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

+0

Извините, я думал, что мой комментарий был немного подробным для формата «комментариев». BTW, если у кого-то есть лучшее решение, сообщите нам об этом. Также полезно использовать пример для taxonomy_get_vocabularies(). –

1

это друпал путь - _taxonomy_term_select()

+2

не для drupal 7 – FLY

1

Я думаю, вы можете использовать функцию: taxonomy_form

Здесь у вас есть doumentation: taxonomy_form

+0

<= только drupal 6 – DrCord

2

Я написала эту вспомогательную функцию для моего модуля (drupal 7):

/** 
* helper function to get taxonomy term options for select widget 
* @arguments string $machine_name: taxonomy machine name 
* @return array of select options for form 
*/ 
function MYMODULE_get_tax_term_options($machine_name){ 
    $options = array('0' => ''); 

    $vid = taxonomy_vocabulary_machine_name_load($machine_name)->vid; 

    $options_source = taxonomy_get_tree($vid); 

    foreach($options_source as $item) { 
     $key = $item->tid; 
     $value = $item->name; 
     $options[$key] = $value; 
    } 

    return $options; 
} 

После этого вы можете вызвать эту функцию на вашем #options в вашей $ форме:

$form['field_name'] = array( 
    '#options' => MYMODULE_get_tax_term_options('taxonomy_machine_name'), 
); 
1

Вот как это сделать в Drupal 7

// Populate FAPI select box from vocabulary term values. 
// In this case term_reference field is field_category 
$form = array(); 
$form['category_default'] = array(
    '#type' => 'select', 
    '#title' => t('Default category'), 
    '#options' => taxonomy_allowed_values(field_info_field('field_category')), 
    '#description' => t('The selected category will be shown by default on listing pages.') 
); 
return $form; 
Смежные вопросы