【问题标题】:Second taxonomy autocomplet depend on first taxonomy autocomplet第二分类自动完成依赖于第一分类自动完成
【发布时间】:2011-10-21 10:22:29
【问题描述】:

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

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

第 2 步)当我们选择 USA 时,我们可以使用带有自动完成功能的 City
国家:美国
城市:Be
--------伯克利

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

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


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

【问题讨论】:

    标签: drupal-7 drupal-taxonomy


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这是一个依赖字段的简单示例。制作一个名为“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();
          }
       }
      

      【讨论】:

        猜你喜欢
        • 2011-12-30
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-02
        • 2017-11-24
        相关资源
        最近更新 更多