Карта сайта с помощью views [вопрос перетёкший в решение]

Главные вкладки

Аватар пользователя trololoo trololoo 7 апреля 2011 в 3:11

Здравствуйте!
Решил сделать карту сайта с помощью views, в поля впихнул Материал: тип (по которому должна идти группировка) и Материал: заголовок. Проблема в том, что тип материала отображается ровно столько раз, сколько существует материалов этого типа, собственно:

Подскажите пожалуйста решение, если оно существует.

UPD: Решено, нужно было пересоздать представление, т.к. оно было создано в старой версии views.
UPD2: Вопрос в догонку: можно ли как-то менять названия типов в представлении, по которым идёт группировка, с целью правильного склонения слов?
UPD3: Решил второй вопрос, смотрите последние комментарии.

Комментарии

Аватар пользователя trololoo trololoo 7 апреля 2011 в 3:29

"Радосвет" wrote:
А какие у вас настройки views?

Стиль: HTML список
Группировать по полю Материал: тип

Поля
Материал: тип
поставил флажок Исключить из вывода
Материал: заголовок

В фильтрах отметил нужные типы материалов
Как видите практически ничего не менял

Аватар пользователя trololoo trololoo 7 апреля 2011 в 11:37

"xxandeadxx" wrote:
->

Если убрать группировку, то будет голый список материалов (тут я включил видимость поля Материал: тип):

Совсем не похоже на «КАК НАДО» -)

Аватар пользователя trololoo trololoo 7 апреля 2011 в 13:22

"xxandeadxx" wrote:
зачем её убирать?

Потомучто с группировкой это выглядит так как показано на первом скрине в шапке темы (см. «КАК ЕСТЬ»), а нужно «КАК НАДО». Тобишь группировка сама по себе не даёт нужного эффекта, чего-то нехватает.

Аватар пользователя trololoo trololoo 7 апреля 2011 в 13:51

"xxandeadxx" wrote:
значит что-то не то делаете, скриншот группировки по типу материала:

Мистика, по другому не скажешь.
Покажите пожалуйста своё представление, если не трудно.
Вот моё:

$view = new view;
$view->name = 'sitemap';
$view->description = 'Карта сайта';
$view->tag = '';
$view->base_table = 'node';
$view->human_name = 'sitemap';
$view->core = 7;
$view->api_version = '3.0-alpha1';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */

/* Display: По умолчанию */
$handler = $view->new_display('default', 'По умолчанию', 'default');
$handler->display->display_options['use_more_text'] = 'еще';
$handler->display->display_options['access']['type'] = 'none';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['exposed_form']['options']['reset_button_label'] = 'Сбросить';
$handler->display->display_options['exposed_form']['options']['exposed_sorts_label'] = 'Сортировать по';
$handler->display->display_options['pager']['type'] = 'none';
$handler->display->display_options['pager']['options']['offset'] = '0';
$handler->display->display_options['style_plugin'] = 'default';
$handler->display->display_options['row_plugin'] = 'fields';
$handler->display->display_options['row_options']['hide_empty'] = 0;
/* Поле: Содержимое: Тип */
$handler->display->display_options['fields']['type']['id'] = 'type';
$handler->display->display_options['fields']['type']['table'] = 'node';
$handler->display->display_options['fields']['type']['field'] = 'type';
$handler->display->display_options['fields']['type']['label'] = '';
$handler->display->display_options['fields']['type']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['type']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['type']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['type']['alter']['external'] = 0;
$handler->display->display_options['fields']['type']['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields']['type']['alter']['trim'] = 0;
$handler->display->display_options['fields']['type']['alter']['nl2br'] = 0;
$handler->display->display_options['fields']['type']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['type']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['type']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['type']['alter']['html'] = 0;
$handler->display->display_options['fields']['type']['element_label_colon'] = 1;
$handler->display->display_options['fields']['type']['element_default_classes'] = 1;
$handler->display->display_options['fields']['type']['hide_empty'] = 0;
$handler->display->display_options['fields']['type']['empty_zero'] = 0;
$handler->display->display_options['fields']['type']['link_to_node'] = 1;
$handler->display->display_options['fields']['type']['machine_name'] = 0;
/* Поле: Содержимое: Заголовок */
$handler->display->display_options['fields']['title']['id'] = 'title';
$handler->display->display_options['fields']['title']['table'] = 'node';
$handler->display->display_options['fields']['title']['field'] = 'title';
$handler->display->display_options['fields']['title']['label'] = '';
$handler->display->display_options['fields']['title']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['title']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['title']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['title']['alter']['external'] = 0;
$handler->display->display_options['fields']['title']['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields']['title']['alter']['trim'] = 0;
$handler->display->display_options['fields']['title']['alter']['nl2br'] = 0;
$handler->display->display_options['fields']['title']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['title']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['title']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['title']['alter']['html'] = 0;
$handler->display->display_options['fields']['title']['element_label_colon'] = 1;
$handler->display->display_options['fields']['title']['element_default_classes'] = 1;
$handler->display->display_options['fields']['title']['hide_empty'] = 0;
$handler->display->display_options['fields']['title']['empty_zero'] = 0;
$handler->display->display_options['fields']['title']['link_to_node'] = 1;
/* Filter criterion: Содержимое: Тип */
$handler->display->display_options['filters']['type']['id'] = 'type';
$handler->display->display_options['filters']['type']['table'] = 'node';
$handler->display->display_options['filters']['type']['field'] = 'type';
$handler->display->display_options['filters']['type']['value'] = array(
  'article' => 'article',
  'client' => 'client',
  'contacts' => 'contacts',
  'news' => 'news',
  'project' => 'project',
  'service' => 'service',
);
$translatables['sitemap'] = array(
  t('По умолчанию'),
  t('еще'),
  t('Применить'),
  t('Сбросить'),
  t('Сортировать по'),
  t('Asc'),
  t('Desc'),
);

Аватар пользователя trololoo trololoo 7 апреля 2011 в 14:34

"xxandeadxx" wrote:
1. создать представление
2. установить группировку
3. profit

Понял в чём беда. Представление созданное в старой версии views чудит в новой, поэтому просто пересоздал, только и всего -) Спасибо за отклик.

Аватар пользователя trololoo trololoo 7 апреля 2011 в 14:34

И ещё один вопрос в догонку: можно ли как-то менять названия типов в представлении, по которым идёт группировка, с целью правильного склонения слов (Клиент -> Клиенты, Услуга -> Услуги). Можно конечно переименовать типы материалов, но костыль крайне некрасивый, есть ли нормальное решение?

Аватар пользователя trololoo trololoo 7 апреля 2011 в 23:25

Отвечаю на свой же вопрос и предлагаю следущее решение -)
Для смены названия выводимого содержимого в представлении, нам необходимо темизировать соответствующее поле. Для начала создаём представление, жмём на Тема: Информация , будут отображены все возможные шаблоны для представления, включая шаблоны выбранных для вывода полей. К примеру нам нужно поменять значение поля Содержимое: Тип, для этого в списке шаблонов находим Поле Содержимое: Тип (ID: type) и смотрим подходящее имя для файла шаблона, я выбрал views-view-field--sitemap--page-sitemap--type.tpl.php (наше представление называется sitemap, а машинное имя page_sitemap). Создаём в папке templates нашей темы views-view-field--sitemap--page-sitemap--type.tpl.php, и пишем него:

<?php if ($output=='Клиент') {
    print 
'Клиенты';
  }
  else if (
$output=='Услуга') {
    print 
'Услуги';
  }
  else if (
$output=='Проект') {
    print 
'Проекты';
  }
  else if (
$output=='Новость') {
    print 
'Новости';
  }
  else {
    print 
$output;
  }
?>

Как видно значение поля содержится в переменной $output, поэтому мы используем условие для вывода нужного нам значения. Объяснять тут я думаю нечего, потому как любой кто обладает самыми начальными навыками программирования всё поймёт. В вашем случае подставляете свои значения.

P.S. Важный момент, не забудьте сохранить файл шаблона в UTF-8 (без BOM), иначе не будет работать.