2010-03-11 19 views
6

Je suis un peu confus. J'ai créé un formulaire simple avec une zone de texte et un bouton de soumission. Maintenant, je veux ajouter une liste déroulante select/option des termes de taxonomie, en utilisant la fonction taxonomy_get_vocabularies().drupal - ajouter une liste de sélection/option à un formulaire

$vocabularies = taxonomy_get_vocabularies('my_type'); 

Ma question est comment puis-je obtenir la liste de vocabulaire sur la forme "la façon Drupal". La façon dont Drupal définit la forme semble assez rigide. Aussi, comment pourrais-je faire cette condition, disons sur l'existence de termes de taxonomie pertinents.

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; 

Répondre

11

que je fais quelque chose de similaire dans un formulaire personnalisé, et a trouvé beaucoup plus facile à utiliser taxonomy_get_tree, avec le code de vocabulaire que l'argument de la fonction. Voir ci-dessous:

//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

enquête sur la façon de le faire dans le fichier taxonomy.admin.inc du module taxonomie

/** 
* 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

Merci pour votre réponse rapide! Je pense que j'ai travaillé comme ça.

$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

Vous devez utiliser les commentaires pour répondre aux messages, pas faire des posts supplémentaires ton propre. – jergason

+0

désolé, je pensais que mon commentaire était un peu verbeux pour le "commentaire" format. BTW si quelqu'un a une meilleure solution, s'il vous plaît laissez-nous savoir. Aussi, un exemple pour taxonomy_get_vocabularies() serait utile. –

1

c'est la façon drupal - _taxonomy_term_select()

+2

pas pour drupal 7 – FLY

1

Je pense que vous pouvez utiliser la fonction: taxonomy_form

Ici vous avez CETTE DOCUMENTATION: taxonomy_form

+0

<= drupal 6 seulement – DrCord

2

J'ai écrit cette fonction d'aide pour mon module (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; 
} 

Ensuite, vous pouvez appeler cette fonction sur votre #options dans votre formulaire de $:

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

Voici comment le faire dans 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;