0

Drupal-7
第二分类自动完成依赖于第一个分类自动完成。

添加报价:
步骤 1)带有自动完成功能的国家,城市为空
国家:U
------------美国
城市:

步骤 2)当我们选择美国时,我们可以使用带有自动完成功能的城市
国家:美国
城市: Be -----
Berkeley

Step 3) 但我们只插入新项目 Bexxx
Country: USA
City: Bexxx

Search offer:
Step 1) Country - 从列表中选择 USA,City 为空
Country: USA
----- ------德国
城市:


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

4

2 回答 2

1

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

于 2011-11-23T12:11:14.233 回答
0

这是一个依赖字段的简单示例。制作一个名为“myajx”的简单模块并按原样放置此代码。现在通过 url 访问,即“ 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();
    }
 }
于 2015-06-19T05:40:16.487 回答