Drupal: как сделать так, чтобы в списке выбора отображались термины таксономии в иерархии? - PullRequest
2 голосов
/ 18 мая 2010

У меня есть блок, сгенерированный Модуль поиска (простой механизм поиска). Блок содержит форму с выбранными списками различных словарей таксономии. Их порядок, однако, выглядит довольно случайным (ни в алфавитном, ни в хронологическом порядке) и перечисляет регионы в таком порядке без иерархии:
Italy, France, Poland, Benelux, ..., Upper Austria, ... Switzerland, Tyrol, Croatia
альтернативный текст http://i42.tinypic.com/24owysj.jpg

Порядок, который я ожидаю, - это иерархия моего словаря, поэтому:
Austria, Austria>Tyrol, Austria>Upper Austria, Benelux, Croatia, France, Italy, Poland, Switzerland

Есть ли у вас идеи, как заставить элементы списка выбора отображаться в порядке иерархии словаря?


Редактировать : Конфигурация Finder:

array(
  'finder_id' => '5',
  'base' => 'views',
  'title' => 'Search results',
  'description' => 'Finder for search',
  'path' => 'search',
  'block' => '1',
  'settings' => array(
    'form_on_page' => 0,
    'form' => array(
      'prefix' => '',
      'prefix_format' => '2',
      'suffix' => '',
      'suffix_format' => '2',
      'button_text' => 'Find',
      'go_text' => 'Go',
    ),
    'advanced' => array(
      'no_results' => array(
        'no_results' => 'We can\'t find any tours. Try to search for other tours.',
      ),
      'filter' => 1,
      'submission' => 1,
      'ahah' => 0,
      'ahah_effect' => 'fade',
      'element_combination' => '2',
      'pager' => '0',
      'match' => 'c',
      'goto' => '',
      'hide_args' => 1,
      'arg_sep' => ',',
      'empty_symbol' => '',
      'show_links' => 1,
      'show_admin_links' => 0,
      'cache_finder_find' => '360',
      'search' => '0',
      'search_tab' => 'node',
    ),
    'views' => array(
      'view' => 'search_start',
      'displays' => array(
        'query' => 'default',
        'output' => 'default',
      ),
      'results' => '0',
      'views_args' => array(
        'args' => '',
        'delimiter' => '/',
      ),
    ),
    'i18nstrings' => array(
      'title' => array(
        '#i18nstrings' => 'finder:f5:title',
      ),
      'description' => array(
        '#i18nstrings' => 'finder:f5:description',
      ),
      'settings' => array(
        'form' => array(
          'prefix' => array(
            '#i18nstrings' => 'finder:f5:settings][form][prefix',
          ),
          'suffix' => array(
            '#i18nstrings' => 'finder:f5:settings][form][suffix',
          ),
          'button_text' => array(
            '#i18nstrings' => 'finder:f5:settings][form][button_text',
          ),
          'go_text' => array(
            '#i18nstrings' => 'finder:f5:settings][form][go_text',
          ),
        ),
        'advanced' => array(
          'no_results' => array(
            'no_results' => array(
              '#i18nstrings' => 'finder:f5:settings][advanced][no_results][no_results',
            ),
          ),
          'pager' => array(
            '#i18nstrings' => 'finder:f5:settings][advanced][pager',
          ),
          'arg_sep' => array(
            '#i18nstrings' => 'finder:f5:settings][advanced][arg_sep',
          ),
          'empty_symbol' => array(
            '#i18nstrings' => 'finder:f5:settings][advanced][empty_symbol',
          ),
          'cache_finder_find' => array(
            '#i18nstrings' => 'finder:f5:settings][advanced][cache_finder_find',
          ),
        ),
      ),
    ),
  ),
  'elements' => array(
    '0' => array(
      'finder_element_id' => '13',
      'finder_id' => '5',
      'element' => 'select',
      'title' => 'Region',
      'weight' => '0',
      'settings' => array(
        'form' => array(
          'description' => '',
          'prefix' => '',
          'prefix_format' => '2',
          'suffix' => '',
          'suffix_format' => '2',
          'default_value' => '',
          'required' => 0,
          'size' => '',
          'multiple' => 0,
          'empty' => 'prepend',
          'empty_text' => '- every region -',
        ),
        'choices' => array(
          'field' => array(
            'term_data_1.name' => 'term_data_1.name',
          ),
          'rewrite' => array(
            'php' => '',
          ),
          'displays' => array(
            'query' => 'default',
          ),
          'views' => array(
            'args' => '',
            'delimiter' => '/',
          ),
        ),
        'advanced' => array(
          'delimit' => '',
          'value_combination' => '0',
        ),
        'i18nstrings' => array(
          'title' => array(
            '#i18nstrings' => 'finder:e13:title',
          ),
          'settings' => array(
            'form' => array(
              'description' => array(
                '#i18nstrings' => 'finder:e13:settings][form][description',
              ),
              'prefix' => array(
                '#i18nstrings' => 'finder:e13:settings][form][prefix',
              ),
              'suffix' => array(
                '#i18nstrings' => 'finder:e13:settings][form][suffix',
              ),
              'default_value' => array(
                '#i18nstrings' => 'finder:e13:settings][form][default_value',
              ),
            ),
            'advanced' => array(
              'delimit' => array(
                '#i18nstrings' => 'finder:e13:settings][advanced][delimit',
              ),
            ),
          ),
        ),
      ),
      'element_handler' => array(
        '#title' => 'Select list',
        '#module' => 'finder_optionwidgets',
      ),
      '#_finder_object' => '1',
    ),
    '1' => array(
      'finder_element_id' => '14',
      'finder_id' => '5',
      'element' => 'select',
      'title' => 'Season',
      'weight' => '1',
      'settings' => array(
        'form' => array(
          'description' => '',
          'prefix' => '',
          'prefix_format' => '2',
          'suffix' => '',
          'suffix_format' => '2',
          'default_value' => '',
          'required' => 0,
          'size' => '',
          'multiple' => 0,
          'empty' => 'prepend',
          'empty_text' => '- every season -',
        ),
        'choices' => array(
          'field' => array(
            'term_data_2.name' => 'term_data_2.name',
          ),
          'rewrite' => array(
            'php' => '',
          ),
          'displays' => array(
            'query' => 'default',
          ),
          'views' => array(
            'args' => '',
            'delimiter' => '/',
          ),
        ),
        'advanced' => array(
          'delimit' => '',
          'value_combination' => '0',
        ),
        'i18nstrings' => array(
          'title' => array(
            '#i18nstrings' => 'finder:e14:title',
          ),
          'settings' => array(
            'form' => array(
              'description' => array(
                '#i18nstrings' => 'finder:e14:settings][form][description',
              ),
              'prefix' => array(
                '#i18nstrings' => 'finder:e14:settings][form][prefix',
              ),
              'suffix' => array(
                '#i18nstrings' => 'finder:e14:settings][form][suffix',
              ),
              'default_value' => array(
                '#i18nstrings' => 'finder:e14:settings][form][default_value',
              ),
            ),
            'advanced' => array(
              'delimit' => array(
                '#i18nstrings' => 'finder:e14:settings][advanced][delimit',
              ),
            ),
          ),
        ),
      ),
      'element_handler' => array(
        '#title' => 'Select list',
        '#module' => 'finder_optionwidgets',
      ),
      '#_finder_object' => '1',
    ),
    '2' => array(
      'finder_element_id' => '15',
      'finder_id' => '5',
      'element' => 'select',
      'title' => 'Theme',
      'weight' => '2',
      'settings' => array(
        'form' => array(
          'description' => '',
          'prefix' => '',
          'prefix_format' => '2',
          'suffix' => '',
          'suffix_format' => '2',
          'default_value' => '',
          'required' => 0,
          'size' => '',
          'multiple' => 0,
          'empty' => 'prepend',
          'empty_text' => '- every theme -',
        ),
        'choices' => array(
          'field' => array(
            'term_data_3.name' => 'term_data_3.name',
          ),
          'rewrite' => array(
            'php' => '',
          ),
          'displays' => array(
            'query' => 'default',
          ),
          'views' => array(
            'args' => '',
            'delimiter' => '/',
          ),
        ),
        'advanced' => array(
          'delimit' => '',
          'value_combination' => '0',
        ),
        'i18nstrings' => array(
          'title' => array(
            '#i18nstrings' => 'finder:e15:title',
          ),
          'settings' => array(
            'form' => array(
              'description' => array(
                '#i18nstrings' => 'finder:e15:settings][form][description',
              ),
              'prefix' => array(
                '#i18nstrings' => 'finder:e15:settings][form][prefix',
              ),
              'suffix' => array(
                '#i18nstrings' => 'finder:e15:settings][form][suffix',
              ),
              'default_value' => array(
                '#i18nstrings' => 'finder:e15:settings][form][default_value',
              ),
            ),
            'advanced' => array(
              'delimit' => array(
                '#i18nstrings' => 'finder:e15:settings][advanced][delimit',
              ),
            ),
          ),
        ),
      ),
      'element_handler' => array(
        '#title' => 'Select list',
        '#module' => 'finder_optionwidgets',
      ),
      '#_finder_object' => '1',
    ),
    '3' => array(
      'finder_element_id' => '17',
      'finder_id' => '5',
      'element' => 'text',
      'title' => 'Full text search',
      'weight' => '3',
      'settings' => array(
        'form' => array(
          'description' => '',
          'prefix' => '',
          'prefix_format' => '2',
          'suffix' => '',
          'suffix_format' => '2',
          'default_value' => '',
          'required' => 0,
          'field_prefix' => '',
          'field_suffix' => '',
          'maxlength' => '',
          'minlength' => '',
          'size' => '',
          'rows' => '0',
        ),
        'choices' => array(
          'field' => array(
            'node_data_field_services.field_services_value' => 'node_data_field_services.field_services_value',
            'node_data_field_subtitle.field_subtitle_value' => 'node_data_field_subtitle.field_subtitle_value',
            'node_data_field_text.field_text_value' => 'node_data_field_text.field_text_value',
            'node_data_field_tips.field_tips_value' => 'node_data_field_tips.field_tips_value',
            'node_data_field_additional_services.field_additional_services_value' => 'node_data_field_additional_services.field_additional_services_value',
            'node.title' => 'node.title',
          ),
          'displays' => array(
            'query' => 'default',
          ),
          'views' => array(
            'args' => '',
            'delimiter' => '/',
          ),
        ),
        'advanced' => array(
          'delimit' => '',
          'value_combination' => '0',
        ),
        'i18nstrings' => array(
          'title' => array(
            '#i18nstrings' => 'finder:e17:title',
          ),
          'settings' => array(
            'form' => array(
              'description' => array(
                '#i18nstrings' => 'finder:e17:settings][form][description',
              ),
              'prefix' => array(
                '#i18nstrings' => 'finder:e17:settings][form][prefix',
              ),
              'suffix' => array(
                '#i18nstrings' => 'finder:e17:settings][form][suffix',
              ),
              'default_value' => array(
                '#i18nstrings' => 'finder:e17:settings][form][default_value',
              ),
            ),
            'advanced' => array(
              'delimit' => array(
                '#i18nstrings' => 'finder:e17:settings][advanced][delimit',
              ),
            ),
          ),
        ),
      ),
      'element_handler' => array(
        '#title' => 'Text',
        '#module' => 'finder_text',
      ),
      '#_finder_object' => '1',
    ),
  ),
  'elements_index' => array(
    '13' => 0,
    '14' => 1,
    '15' => 2,
    '17' => 3,
  ),
  'base_handler' => array(
    '#title' => 'Views finder',
    '#module' => 'finder_views',
  ),
  'admin_links' => array(
    'search' => 'View \"Path\"',
    'admin/build/finder/5/edit' => 'Edit',
  ),
  'links' => array(),
  '#_finder_object' => '1',
)

Ответы [ 3 ]

1 голос
/ 09 апреля 2012

По вашему требованию модуль drupal Hierarchical Select поможет вам ..

1 голос
/ 18 марта 2014

Вы можете сделать это очень легко без модуля Drupal, если вы просто создаете тематику:

    $tree = taxonomy_get_tree($vid);

if ( $tree ) {

  $content .= '<select class="your-class">';
  $content .= '<option class="placeholder" value="">You Dropdown</option>';

  foreach ($tree as $term) {

       $path = taxonomy_term_path($term);
       $content .= '<option value="/terms/' . strtolower(str_replace( " ", "-",$term->name)) . '">' . $term->name . '</option>';           
  }

  $content .= '</select>';

}//end if ( $view )

return $content;

}

1 голос
/ 20 мая 2010

Мое решение: поскольку мне не нужно много возможностей Finder, я придумал альтернативное решение, использующее только Views:

  1. В представлении списка всех узлов, среди которых я хотел бы искать, я добавил фильтр Region:
    Filters > Taxonomy > Term (The taxonomy term ID) > "regions" vocabulary

  2. I выставил фильтр , установил его в раскрывающемся списке и проверил Show hierarchy in dropdown
    альтернативный текст http://i47.tinypic.com/zxmvea.jpg

  3. Тогда я выставил форму в блок
    альтернативный текст http://i45.tinypic.com/169p6wy.png

4 А включил блок под admin/build/block

У меня отлично работает. : -)

...