Автозаполнение второй таксономии зависит от автозаполнения первой таксономии

#drupal-7 #drupal-taxonomy

#drupal-7 #drupal-таксономия

Вопрос:

Автозаполнение второй таксономии Drupal-7 зависит от автозаполнения первой таксономии.

Добавить предложение:
шаг 1) Страна с автозаполнением, город пуст
Страна: U
————
Город в США:

шаг 2) когда мы выбираем США, мы можем использовать город с автозаполнением
Страна: США
Город:
Беркли

Шаг 3) но мы просто вставляем новый элемент Bexxx
Страна: США
Город: Bexxx

Предложение поиска:
Шаг 1) Страна — выберите США из списка, город пуст
Страна: США
————
Город в Германии:

Шаг 2) когда мы выбираем США, у нас в списке есть 3 элемента
Страна: США
Город: Беркли
——- Берлин
——— Bexxxxxx

Ответ №1:

Я использую Drupal 6, иерархический выбор модулей и представления. Затем в представлениях я использовал поле с открытым фильтром.

Ответ №2:

Это простой пример зависимых полей. Создайте простой модуль с именем «myajx» и разместите этот код как есть. Теперь доступ через URL ie «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, amp;$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();
    }
 }