Продвинутый каталог на Drupal 7

Статья является продолжением ранее опубликованной о простом каталоге на views. На этот раз для друпала 7-й версии.
Суть продвинутости - разные фильтры и поля в зависимости от категории каталога, но придется плодить типы материалов.

Шаг 1. Подготовка

  1. Создайте один тип материала, он будет базовый для всех товаров без особых свойств. К этому типу добавьте поля, которые будут присутствовать во всех других типах, например, поля: производитель, цена и т.д.
  2. Создайте словарь таксономии для вашего каталога. К термину добавьте необязательное текстовое поле, в котором будем хранить машинное название типа материала для этого термина.

Шаг 2. Настройка views

  1. Импортируйте view из этого файла.
  2. В контекстном фильтре/аргументе Содержимое: Имеет идентификатор термина таксономии (с глубиной) подкорректирует проверку: укажите словарь, который создали на шаге 1.
  3. Подкорректируйте код в Страница -> Шапка -> Глобальный: Текстовое поле и Корень каталога -> Поведение при отсутствии результатов -> Глобальный: Текстовое поле: замените значение переменной $vocabulary_machine_name на машинное имя словаря таксономии каталога.
  4. Добавьте раскрытые фильтры и поля одинаковые для всех категорий в отображение Страница

Шаг 3. Типы, фильтры и поля

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

  1. Создать тип материала, такой же как и базовый, с теми же полями и добавить в него новые;
  2. В нужном термине таксономии в поле из шага 1 задать машинное имя нового типа материала;
  3. Клонируйте отображение Страница, добавьте для него дополнительные поля и фильтры. Путь для этой страницы укажите что-нибудь типа sdfsdfsdfgsdgde. В настройках Прочие -> Машинное имя укажите машинное имя соответствующего типа материала.
  4. Теперь финт ушами. В собственном модуле пишем код:

    /**
    * Implements hook_views_pre_build().
    */
    function mymodule_views_pre_build(&$view) {
    $view_name = 'catalog'; // имя вида
    $field_name = 'field_catalog_type'; // имя поля прикрепленного к термину

    if ($view->name == $view_name) {
    if ($view->current_display == 'page') {
    $tid = $view->args[0];
    $term = taxonomy_term_load($tid);

    if (!empty($term->{$field_name})) {
    $display = $term->{$field_name}['und'][0]['value'];
    if (isset($view->display[$display])) {
    $view->display_handler->handlers['filter'] = &$view->display[$display]->handler->get_handlers('filter');
    $view->filter = &$view->display[$display]->handler->get_handlers('filter');

    $view->display_handler->handlers['field'] = &$view->display[$display]->handler->get_handlers('field');
    $view->field = &$view->display[$display]->handler->get_handlers('field');
    }
    }
    }
    }
    }


    Данный код проверяет какой тип материала указан в термине из аргумента и подменяет фильтры и поля из отображения с машинным именем этого материала.
    Не забудьте подправить значения переменных $view_name и $field_name.
    Если модуля нет можете скачать заготовку модуля.

Комментарии

спасибо все работает но выдает такие ошибки при перемещение по каталогу:

Notice: Trying to get property of non-object в функции eval() (строка 4 в файле D:\xampp\htdocs\site\modules\php\php.module(80) : eval()'d code).

Strict warning: Only variables should be passed by reference в функции views_page_title_pattern_alter() (строка 33 в файле D:\xampp\htdocs\site\sites\all\modules\page_title\modules\views.page_title.inc).

На работу вроде не влияет,но видят данную ошибку все пользователи ((

кажется ошибка в модуле page_title, у вас какой-то php код не работает в настройках

Модуль page отключил,.

Попробовал на чистой установки, эта ошибка осталась

Notice: Trying to get property of non-object в функции eval() (строка 4 в файле D:\xampp\htdocs\site\modules\php\php.module(80) : eval()'d code).

а результат поглядеть можно где нибудь?

pen-exe, а как быть с тем, что в корне каталога (catalog/all) ссылки на разделы немного унылые:
catalog/1
catalog/2
catalog/3

ведь есть алиасы...

Во что превратилось taxonomy_term_path в Drupal 7?

А у меня вот что вылезло при попытке вывести клонированное представление:

здесь он ругается на модуль, хук которого взят отсюда, вот строки на которые он ругается

и фильтров на странице нету, хотя на предварительном просмотре они отображаются,
что может быть не так?

А что насчет изображений у терминов как в Drupal 6?

Подскажите как добавить изображения к родительским категориям в этом каталоге?

LVMH takeover will Fashion Women's Clothing not affect Hermes family views and business philosophy, Hermes from the management jewelry began, after six generations talent created now of Hermes. Of course we have the power to make certain defence, and do so completely is logical, just like you found your own garden into the unknown visitors, you would have said the same.

The Fabric contrast liningand brass hardware show the good quality of Coach, coming with Coach charm and hangtag. You can pick up this hot new bag at Coach for $368.Everytime when browsing the official site of Coach, I am so excited to see that they have offered a brand new series of fashion collection. Among the recent bags they've made, I like the Coach Studded Sabrina Bag most. It is so dazzling that I Cheap Handbags can hardly withdraw my eyes from it.

With signature jacquard fabric, and graphic Coach monogram decals, this Coach Pop C Large Spotlight Handbag is made of crinkled patent leather features glitter trim with a top zipper closure. The interior has a zip pocket and cellphone/multifunction pockets and a front zip pocket outside guaranteeing the safety as well. Enough spacious to carry whole world of yours for the size approximately is 12 (L) x 14 (H) x 5 (W) in dimension. Bag is easy to carry Sun Hats as it has detachable 32" shoulder strap with 18" drop can be worn on shoulder or crossbody. Besides, a ring to clip an accessory or keyfob is attached to the bag, double straps with 8" drop.