第二个分类自动完成取决于第一个分类自动完成

时间:2011-10-21 10:22:29

标签: drupal-7 drupal-taxonomy

Drupal的7
第二种分类法自动填充依赖于第一种分类法自动填充
添加报价:
步骤1)具有自动填充的国家,城市为空 国家:U
------------美国
城市:

步骤2)当我们选择美国时,我们可以使用具有自动填充功能的城市 国家:美国
城市:是 -------伯克利

步骤3)但我们只是插入新项目Bexxx
国家:美国
城市:Bexxx

搜索优惠:
步骤1)国家 - 从列表中选择美国,城市为空 国家:美国
-----------德国
城市:


步骤2)当我们选择美国时,我们在列表上有3个项目
国家:美国
城市:伯克利 -------柏林
------- Bexxxxx

2 个答案:

答案 0 :(得分:1)

我使用Drupal 6,模块Hierarchical selectViews。然后在视图中我使用了带有外接过滤器的字段。

答案 1 :(得分:0)

这是依赖字段的简单示例。创建一个名为“myajx”的简单模块,并按原样放置此代码。现在通过网址访问,即“http://localhost/mypage”。现在从第一个字段中选择一个值,您将看到只有它的相关值列在下面的字段中。

<?php

/**
 * Implementation of hook_menu().
 * Registers a form-based page that you can access at "http://localhost/mypage"
 */
 function myajx_menu(){
  return array(
    'mypage' => array(
        'title' => 'A page to test ajax',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('myajx_page'),
        'access arguments' => array('access content'), 
     )
   );
  }



/**
 * A form with a dropdown whose options are dependent on a
 * choice made in a previous dropdown.
 *
 * On changing the first dropdown, the options in the second are updated.
 */
 function myajx_page($form, &$form_state) {

  // Get the list of options to populate the first dropdown.
   $options_first = myajx_first_dropdown_options();

   $value_dropdown_first = isset($form_state['values']['dropdown_first']) ? $form_state['values']['dropdown_first'] : key($options_first);

   $form['dropdown_first'] = array(
      '#type' => 'select',
      '#title' => 'First Dropdown',
      '#options' => $options_first,
      '#default_value' => $value_dropdown_first,

      // Bind an ajax callback to the change event (which is the default for the
      // select form type) of the first dropdown. It will replace the second
      // dropdown when rebuilt

      '#ajax' => array(
          // When 'event' occurs, Drupal will perform an ajax request in the
          // background. Usually the default value is sufficient (eg. change for
          // select elements), but valid values include any jQuery event,
          // most notably 'mousedown', 'blur', and 'submit'.
          'event' => 'change',
          'callback' => 'myajx_ajax_callback',
          'wrapper' => 'dropdown_second_replace',
      ),
   );
  $form['dropdown_second'] = array(
      '#type' => 'select',
      '#title' => 'Second Dropdown',
      '#prefix' => '<div id="dropdown_second_replace">',
      '#suffix' => '</div>',
      '#options' => myajx_second_dropdown_options($value_dropdown_first),
      '#default_value' => isset($form_state['values']['dropdown_second']) ? $form_state['values']['dropdown_second'] : '',
  );
  return $form;
 }

/**
 * Selects just the second dropdown to be returned for re-rendering
 *
 * Since the controlling logic for populating the form is in the form builder
* function, all we do here is select the element and return it to be updated.
*
* @return renderable array (the second dropdown)
*/
function myajx_ajax_callback($form, $form_state) {
         return $form['dropdown_second'];
}


/**
 * Helper function to populate the first dropdown. This would normally be
 * pulling data from the database.
 *
 * @return array of options
 */
 function myajx_first_dropdown_options() {
    return array(
        'colors' => 'Names of colors',
        'cities' => 'Names of cities',
        'animals' => 'Names of animals',
    );
 }


function myajx_second_dropdown_options($key = '') {
    $options = array(
        'colors' => array(
            'red' => 'Red',
            'green' => 'Green',
            'blue' => 'Blue'
         ),
        'cities' => array(
            'paris' => 'Paris, France',
            'tokyo' => 'Tokyo, Japan',
            'newyork' => 'New York, US'
        ),
        'animals' => array(
            'dog' => 'Dog',
            'cat' => 'Cat',
            'bird' => 'Bird'
        ),  
     );
     if (isset($options[$key])) {
        return $options[$key];
     }
    else {
        return array();
    }
 }