如何以编程方式创建层次分类drupal7



我想使用我的自定义模块创建层次分类法。我使用taxonomy_get_vocabularies()获取所有词汇表。

我的问题是,当我选择任何词汇表或与父母相关的孩子应该在另一个选择列表/下拉列表中列出时。

我的代码:-

enter code here
<?php
function student_addform($form, &$form_state) {
  $vocabulary = taxonomy_get_vocabularies();
  $checklist_vocab_array = array();
  foreach ($vocabulary as $item) {
    $vocab_vid = $item->vid;
    $vocab_name = $item->name;
    $checklist_vocab_array[$vocab_vid] = $vocab_name;
  }
  $form['vocabulary_list'] = array(
    '#type'             => 'select',
    '#title'            => t('List of current Classes.'),
    '#position'         => 'left' ,
    '#options'          => $checklist_vocab_array ,
    '#required' => TRUE,
    '#description'      => t('List of classes displayed as dropdown'),
    '#ajax' => array(
      'callback' => '_student_records_callback_fields',
      'wrapper' => 'check-box-replace',
      'effect' => 'fade',
      'event' => 'change' ,
    ),
  );
  $form['child-list'] = array(
    '#type' => 'select',
    '#title' => t('Select fields of'),
    'options' => $term_list,
    '#prefix' => '<div id="check-box-replace">',
    '#suffix' => '</div>',
  );
  return $form;
}
function _student_records_callback_fields($form, $form_state) {
  $term_list = array();
  $vocabulary_id = $form['vocabulary_list']['#value'];
  $terms = taxonomy_get_tree($vocabulary_id); // Use the correct vocabulary id.
  $count = count($terms);
  for ($term = 0 ; $term < $count ; $term++) {
    $term_list[$terms[$term]->vid] = $terms[$term]->name;
  }
  return $term_list;
}
?>

谢谢,

您应该始终在表单函数中创建表单元素,而不是在回调中
当触发回调时,会再次调用form函数,允许您对其进行更改。回调通常只返回form元素
所以…

enter code here
<?php
function student_addform($form, &$form_state) {
  $vocabulary = taxonomy_get_vocabularies();
  $checklist_vocab_array = array();
  foreach ($vocabulary as $item) {
    $vocab_vid = $item->vid;
    $vocab_name = $item->name;
    $checklist_vocab_array[$vocab_vid] = $vocab_name;
  }
  $form['vocabulary_list'] = array(
    '#type'             => 'select',
    '#title'            => t('List of current Classes.'),
    '#position'         => 'left' ,
    '#options'          => $checklist_vocab_array ,
    '#required' => TRUE,
    '#description'      => t('List of classes displayed as dropdown'),
    '#ajax' => array(
      'callback' => '_student_records_callback_fields',
      'wrapper' => 'check-box-replace',
      'effect' => 'fade',
      'event' => 'change' ,
    ),
  );
  // Check if a vocabulary is selected, if it is get the children and populate the second  dropdown.
  //something like this.
  // $term_list = array();
  // if(vocabulary is selected){
  //   $term_list = term children
  // }
  // you should be able to check if a vocabulary is selected by checking the
  // $form_state['values'] or $form_state['input'] (I forget which)
  $form['child-list'] = array(
    '#type' => 'select',
    '#title' => t('Select fields of'),
    'options' => $term_list,
    '#prefix' => '<div id="check-box-replace">',
    '#suffix' => '</div>',
  );
  return $form;
}
function _student_records_callback_fields($form, $form_state) {
  return $form['child-list'];
}

最新更新