Измените результаты, возвращаемые "Отобразить сводку" для модуля поля адреса


Когда я устанавливаю контекстные фильтры в представлении для Содержимого: мое поле: страна и Содержимого: мое поле: административная область (штат/провинция) и выбираю "Отобразить сводку" для "Когда значение фильтра недоступно", он возвращает список кодов страны/административного района (например, "JP"), а не названия страны/административного района (например, "Япония").

Как я могу показать названия стран/административных районов вместо кодов?

Author: qasimzee, 2012-05-24

3 answers

Хорошо, основная проблема с этим конкретным полем заключается в том, что идентификатор не обладает всеми свойствами, необходимыми для прохождения стандартных маршрутов для отображения термина вместо идентификатора.

Итак, без серьезной переписки модуля я бы сделал это, если вам действительно нужна эта функция.

Скопируйте views-view-summary-unformatted.tpl.php перейдите в каталог тем администратора и отредактируйте его, включив в него большую инструкцию switch со всеми кодами стран, которые вас интересуют, возможно, скопированными вход из самого модуля. Вот рабочий пример одной из таких модификаций для вашего примера Японии. Очевидно, что это не идеально, но без изменения информации о поле модуля нет хорошего способа связать используемый здесь ключ со значением. К сожалению, лучшего способа, похоже, нет.

    <?php
    /**
     * @file views-view-summary-unformatted.tpl.php
     */
    ?>
    <?php foreach ($rows as $id => $row): ?>
      <?php print (!empty($options['inline']) ? '<span' : '<div') . ' class="views-summary views-summary-unformatted">'; ?>
        <?php if (!empty($row->separator)) { print $row->separator; } ?>
        <a href="<?php print $row->url; ?>"<?php print !empty($row_classes[$id]) ? ' class="' . $row_classes[$id] . '"' : ''; ?>>
        <?php 
         include_once DRUPAL_ROOT . '/includes/locale.inc';
         $countries = country_get_list();
         if($countries[$row->link]) {
            print $countries[$row->link];
         }
         else {
          print $row->link;
         } 
        ?></a>
        <?php if (!empty($options['count'])): ?>
          (<?php print $row->count; ?>)
        <?php endif; ?>
      <?php print !empty($options['inline']) ? '</span>' : '</div>'; ?>
    <?php endforeach; ?>
 3
Author: Brandon Bearden, 2012-06-16 16:17:54

Вот альтернатива решению @Kenny и @Bearden, использующему предварительную обработку шаблона вместо переопределения шаблона. Это не только делает решение более читабельным, но и позволяет использовать его для других представлений. Это также должно работать для сводок списков, просто удалите _unformatted из имени функции.

/**
 * Implements hook_preprocess_views_view_summary_unformatted().
 */
function MYTHEME_preprocess_views_view_summary_unformatted($variables) {
  if ($variables['view']->name == MYVIEW) {
    // Necessary for country_get_list().
    include_once DRUPAL_ROOT . '/includes/locale.inc';
    $countries = country_get_list();

    // Looping through the row keys for performance reasons.
    foreach (array_keys($variables['rows']) as $rowid) {
      $countryid = $variables['rows'][$rowid]->link;
      if (!empty($countries[$countryid])) {
        $variables['rows'][$rowid]->link = $countries[$countryid];
      }
    }
  }
}
 4
Author: Capi Etheriel, 2012-06-17 06:57:28

Вы можете использовать функцию locale.module country_get_list(), которая предоставит вам массив кодов стран и их полных названий. Вы должны иметь возможность просто использовать этот массив, чтобы найти свой код (в качестве ключа) и получить результирующее название страны.

В качестве примера вы должны быть в состоянии сделать что-то подобное, чтобы найти читаемое название США (непроверенное):

$countries = country_get_list()
$us_code = $countries['US'];
return $us_code;
 2
Author: Feature, 2012-06-15 16:29:46