2010-03-11 16 views
6

Sono un po 'confuso. Ho creato un modulo semplice con una casella di testo e un pulsante di invio. Ora voglio aggiungere una casella a discesa di selezione/opzione dei termini di tassonomia, usando la funzione taxonomy_get_vocabularies().drupal - aggiungi l'elenco di selezione/opzioni a un modulo

$vocabularies = taxonomy_get_vocabularies('my_type'); 

mia domanda è come faccio ad avere l'elenco di vocabolario sul modulo "la via Drupal". Il modo in cui Drupal definisce la forma sembra piuttosto rigido. Inoltre, come potrei fare questo condizionamento, ad esempio sull'esistenza di termini tassonomici rilevanti.

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; 

risposta

11

che sto facendo qualcosa di simile in un modulo personalizzato, e l'ho trovato molto più facile da usare taxonomy_get_tree, con il codice del vocabolario come argomento della funzione. Vedi sotto:

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

Indagare come farlo nel file di taxonomy.admin.inc del modulo tassonomia

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

grazie per la pronta risposta! Penso che l'ho risolto in questo modo.

$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

Si dovrebbe utilizzare i commenti per rispondere ai messaggi, non rende posti supplementari di tuo – jergason

+0

scusate, pensavo che il mio commento fosse un po 'prolisso per il formato "commento". BTW se qualcuno ha una soluzione migliore, fatecelo sapere. Anche un esempio per taxonomy_get_vocabularies() sarebbe utile. –

1

questo è il modo drupal - _taxonomy_term_select()

+2

non per drupal 7 – FLY

1

Penso che si può utilizzare la funzione: taxonomy_form

Qui avete ALLA DOCUMENTAZIONE: taxonomy_form

+0

<= solo drupal 6 – DrCord

2

ho scritto questa funzione di supporto per il mio modulo (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; 
} 

Poi si può chiamare questa funzione sul vostro #options nel modulo $:

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

Ecco come farlo in 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; 
Problemi correlati