Создание страницы с аргументом

Если мы нажмем на любой из жанров в блоке Жанры, то получим сообщение "Страница не найдена", потому что такой страницы действительно нет. Займемся ее созданием.

Переходим к редактированию представления Фильмы.

Ссылка на редактирование представления Фильмы

Разворачиваем блок ссылок с опциями отображения и выбираем там пункт клонировать Главная.

Клонирование очень удобно использовать когда нужно создать похожее отображение. Клонированное отображение наследует все настройки клонируемого.
Ссылка Клонировать отображение Главная

В клонированном отображении первым делом меняем имя отображения.

Ссылка на редактирование названия клонированного отображения

Фильмы жанра подходящее имя для этого отображения, так как оно будет выводить фильмы конкретного жанра.

Настройка Имя отображения

Следующим шагом переходим к редактированию пути, по которому будет доступна эта страница.

Ссылка на редактирования пути отображения

Устанавливаем путь film-by-genre/% - такой-же как, тот который мы задали при создании отображения Жанры. Символ % означает, что вместо него будет передаваться параметр (в нашем случае это ID термина). Нажимаем Применить.

Задание пути отображения

Теперь необходимо добавить связь по термину таксономии, чтобы можно было выбрать фильмы относящиеся только к конкретному жанру.

Нажимаем Добавить в секции Связь.

Ссылка добавить связь

Так как у нас уже есть другие отображения в этом представлении, в поле Для выбираем Этот page(переопределить), чтобы связь была добавлена только к текущему отображению. Далее выбираем связь Содержимое: Термины таксономии материала и нажимаем Применить (это отображение).

Добавление связи Термины таксономии материала

В настройках связи указываем словарь Жанр в поле Словари, задаем идентификатор Жанр и ставим галочку Эта связь обязательна. Нажимаем Применить (это отображение).

Настройки связи Термины таксономии материала

Теперь добавим контекстный фильтр, который будет принимать ID термина и фильтровать список фильмов в соответствии с текущим жанром.

Ссылка добавить контекстный фильтр

Здесь мы также в поле Для выбираем Этот page (переопределить). В списке доступных фильмов выбираем Термин таксономии: ID термина и нажимаем Применить (это отображение).

Добавление контекстного фильтра ID термина

В настройках контекстного фильтра выбираем Жанр в поле Связь. В секции Если значения Фильтра нет в URL выбираем пункт Передать значение по умолчанию и тут же выбираем Тип - Сырое значение из URL и Компонент пути - 2.

Мы выбрали второй компонент пути, потому что именно в нем будет передаваться ID термина. Путь страницы имеет шаблон film-by-genre/% где film-by-genre - первый компонент, % - второй компонент.
Настройки контекстного фильтра

Спустимся немного ниже и, в секции Когда значение фильтра присутствует в URL или предоставляется по умолчанию, отметим пункт Переопределить заголовок. В появившееся поле введем %1. Это означает, что заголовок страницы будет заменен названием термина.

Настройки переопределения заголовка

Сохраняем представление.

Кнопка сохранения представления

Теперь, если мы перейдем, например, на страницу жанра Приключения, то увидим там только фильмы этого жанра.

Страница термина приключения

Еще один пример - жанр Ужасы. Обратите внимание, что в списке только один фильм как и указано в скобках.

Страница жанра Ужасы

В следующем уроке мы рассмотрим что такое раскрытые фильтры и критерии сортировки.

Поделись с друзьями:

Комментарии

Мда, сказать что тут голову можно сломать - ничего не сказать)

Пишите что не понятно, постараюсь объяснить подробнее )

Денис день добрый. Спасибо за ваши статьи, все очень доходчиво.
Такой вопрос. По аналогии с вашим примером у меня в строке URL отображается :адрес сайта/film-by-genre/ID термина. Как сделать, чтобы вместо ID термина отображалось его имя в транслитерированом виде. Модули Path auto i Translit стоят и в других частях сайта работают коректно

Можно задать алиасы вручную для каждого термина если их не много. Чтобы они генерировались автоматически разве что перебить стандартный путь taxonomy/term/% и задать для него шаблон какой вам надо. Возможно есть какие-то лучшее решение.

Денис добрый день, занимаюсь изучением друпала, есть сайт который уже работает zastroyka24.ru но я по маленьку его дополняю, хочу реализовать задумку в Views но не могу понять как мне её сделать. Адрес задумки http://zastroyka24.ru/1.png если зайти в мою категорию товара то у меня просто плиткой лежит , чтоб допустим были категории товаров по производителю с одной картинкой названием описанием, а под ней уже относящийся товар, ниже соответственно другой производитель с картинкой описанием и ниже относящийся к нему товар.

Нужно добавить связь по полю производитель и сделать группировку по нему же, все просто.

Можно подробнее? Получается я добавлю новый словарь "производители", в нем будут категории: бетономешалки, лестницы и т.д., а уже в этих категориях и будут определенные производители. После я добавлю поле производители в сам товар. А вот в самом представлении как? У меня весь ступор только в этом, здесь то я и не могу их связать :( ведь когда я выставляю таблицу, потом добавляются поля товара, а само отношение к производителю я выставить и не могу.

Я не понимаю этой структуры. В словаре производители не должно быть бетономешалок и лестниц, там должны быть производители, а категории (бетономешалки, лестницы и т.д.) должны быть в словаре Категории. У товара сделать два поля: в одном выбираете производителя, в другом категорию. Тогда представление будет иметь контекстный фильтр по полю Категория и группировку по производителю. Так ведь вам надо?

Все я сделал, я создал словарь производители, в нем термины бетономешалки (родительский термин) в нем еще термины именно производители мешалок :) ну а вот с выводом пришлось по ломать голову. формат выбрал таблицу и 3 группирующих пункта, а уже в полях эти пункты скрыл (чтоб не отображались) и оставил все что нужно к товару. Очень помог ваш ответ про связь :))) осталось теперь правильно прописать Настройку страницы, а именно путь. На старой плитке он был /catalog/category/%, а как будет сейчас?

Вы меня не до конца поняли. Это не правильно в словарь производители забивать термин бетономешалки и подтермины с производителями. Нужно создать новый словарь Производители и соответствующее поле товара Производитель ссылающееся на этот словарь и в него забивать термины только производителей (никаких категорий в этом словаре). А в словарь с категориями забивать только категории (никаких производителей здесь). Тогда при создании товара вы выбираете его категорию и его производителя (это два разных поля). Ну а представление создаете так как я описывал выше. Никакой путаницы в данном случае не будет потому как производитель и категория это две разных сущности которые хранятся в двух разных словарях и соответственно в двух разных полях.

Я вас понял, категории у меня уже до этого были, я по ним делал меню таксономии. А как мне в Критериях Фильтрации вывести переход с плиточного отображения товаров на табличное, т.е. чтоб клиент мог выбрать какое ему представление удобнее будет? до этого делал возрастание по цене, там просто, но вот выбор между 2мя страницами отображения, что то нет.

Можно просто склонировать плиточное отображение и поменять формат отображения на табличный. Тогда будет два одинаковых отображения с разницей только в формате отображения. Ну и вывести сверху каждого отображения ссылки перехода с одного на другое. Пути для них сделать соответственно catalog/category/% - для плиточного (т.е. по умолчанию) и catalog/category/%/table - для табличного.

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

пока идея только залезть в tpl этих фильтров и там создать блок с двумя ссылками, но если я ставлю там ссылку с процентом то тогда страница не найдена :(

Да, можно перебить шаблон для данного представления. Но там конечно же не надо вставлять ссылку с процентами. Нужно получать значение текущего аргумента с помощью функции arg() и генерировать ссылку:

Что то вроде этого:

  $cur_category = arg(2);
  print l(t('Panels view'), 'catalog/category/' . $cur_category);
  print l(t('Table view'), 'catalog/category/' . $cur_category . '/table');

Ну там всякие проверки на пустой аргумент надо добавить конечно же.

В общем есть и другие варианты решения этой задачи, вот например: http://drupal.stackexchange.com/questions/65928/how-to-attach-a-view-display-switch-to-a-view.

Вставил код, но не получается что то :( вставлял в views_exposed_form.tpl

$cur_category = arg(2); ?>
<div class="vibr">
        <?php 
<?php print l(t('Panels view'), 'catalog/category/' . $cur_category);              
<?php print l(t('Table view'), 'catalog/category/' . $cur_category . '/table');

<?php
$cur_category = arg(2); ?>

<?php print l(t('Panels view'), 'catalog/category/' . $cur_category);?>
<?php print l(t('Table view'), 'catalog/category/' . $cur_category . '/table');?>

?>

Получилось, но только вот если переходишь в таблицу то там уже этих ссылок нет.

Все разобрался, оказывается я не сделал открытым фильтр в таблице.

я наверное вам уже надоел :))) а как код php не c текстом ссылки, а картинкой, а то название панелей не очень красиво.

я создал класс для иконки таблицы .css_table и так понял мне надо вот эту строку применить

    l(t('Link text'), 'about-us', array('attributes' => array('class' => array('about-link'))));

в моем случае это будет

    l(t('Таблица'), 'catalog/category/' . $cur_category . '/table', array('attributes' => array('.css_table' => array('catalog/category/' . $cur_category . '/table'))));

так?

print l(t('Таблица'), 'catalog/category/' . $cur_category . '/table', array('attributes' => array('class' => array('css_table'))));

но теперь задаю фон классу, а как теперь убрать то само название ссылки, ведь оно поверх картинки. И если я уберу саму надпись то и ссылка пропадает :(

<a class="css_table" href="/catalog/category/5/table">Таблица</a>

видимо что то я не так делаю

Денис спасибо большое, ваши подсказки мне очень помогли, у меня все получилось.

Денис здравствуйте, можете подсказать как вычислить ошибку cron, я вывожу поиск товара через Views и для этого запускаю модуль Search, в итоге когда в настройке модуля запускаю индексацию страниц, позже запускаю Cron то у меня выходит ошибка

Fatal error: Call to undefined function site_url() in /home/z/zubgar/zastroyka24.ru/public_html/modules/php/php.module(80) : eval()'d code on line 2

но если я отключаю этот модуль то Cron работает нормально.

Так в чем проблема? Откючите этот модуль. Еще попробуйте обновить ядро Drupal.

Хотел чтоб родной поиск через Views работал, ядро обновлено.

Денис подскажи, вот то что я выше сделал, 2 иконки таблицы и плитки, они при открытии категории товаров не горят, пока по ним не пройдешь. А одна обязательно должна гореть, показывая что ты на ней, а то через css не получается.
Пробовал через редирект сделать, но перезагружается таблица и это видно.

Если вы печатаете ссылку с помощью функции l(), то к активной ссылке по умолчанию добавляется класс "active". К нему и привяжитесь.

Привязать то привязал, но как нажимаю на плиточный вариант табличный продолжает гореть.