Я люблю Drupal 7 (создаем кататалог для drupal commerce)

Аватар пользователя gumk gumk 18 апреля 2011 в 20:58

Поставил drupal commerce, потыкал несколько дней, понял - весч! Все круто, все легко и гибко настраивается, легко имортируется из csv и xml при помощи модуля feeds. Вообщем то что надо! за одним НО, как мать его создать каталог?

Пробовал ставить разные модули, искать решение на d.org - ничего толового не нашел, побился головой об стену, и полез во .... views

Приступаем:
1) идем на страницу admin/structure/taxonomy и созадем словарь catalog
- на странице admin/structure/taxonomy/catalog/fields добавляем поле c изображением, например, imagecatalog
- добавляем термины, загружая и зображения и создавая иерархию словаря
2) идем на страницу admin/structure/views и включаем представление Taxonomy term
3) идем на страницу admin/structure/views/add и создаем новое представление

выбираем показатель - термины таксономии, и тип - наш словарь catalog

задаем заголовок страницы
путь ставим taxonomy/term/%
отображение ставим grid (сетка)
элементов для отображения ставим 12 - так как по умолчанию в grid 4 столбца, соответственно указываем значение кратное 4

нажимаем "продолжить и редактировать"

4) начинаем редактировать представление:
4a) в блок "Fields" добавляем поле изображение "imagecatalog", настраиваем его по своему вкусу
расскрываем правую колонку 'Advanced'
4б) добавляем Contextual filters

указываем значение - Таксономия: вложение

и добавляем ставим галлку - чтобы при не существующем термине показывалась 404 ошибка (этого можно не делать)

Сохраняем фильтр

таким образом мы перекрыли отображение страницы термина. Теперь по адресу taxonomy/term/id_термина будут отображаться его дочерние термины с их изображениями в виде сетки.
Но если у термина не будет дочерних терминов - ничего отображаться не будет. Такая ситуация нас не устраивает, поэтому делаем следующее:
5) Добавляем no results behavior

ставим галку возле views area

нажимаем далее и указываем какое представление может будет выводиться если у термина нет дочерних терминов, а именно taxonomy_term Dispaly: default
не забываем отметить inherit cotextual filters - это означает что аргумент (id термина) будет передаваться представлению, которое будет вызываться.

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

Как это работает?
если у термина есть дочерние термины - грузится вид catalog
если нет - грузится вид taxonomy term
если использовать с модулем taxonimy menu - получается каталог как на сайте ситилинка

Как сделать пункт меню?
вариант 1: делаем все термины таксономии дочерними какого-то одного, и указываем в меню ссылку на этот термин
вариант 2: берем модуль taxonomy menu, и выводим в блоке ссылки на категории

Ожидаемые проблемы:
1) На странице термина не отображаются его дочерние термины
Причина: представление taxonomy term перекрывает по весу наше представление
Выход: отключить отображение page у представления taxonomy term

2) Помимо словаря catalog есть другие словари, для них должно быть свое отображение
Выход: ждем, иди сами портируем модуль taxonomy redirect
- задаем разные пути для разных словарей
- клонируем представление taxonomy term, меняем в нем путь на заданный в taxonomy redirect
- меняем представление catalog - указываем новые пути, и меняем no results behavior на новое представление

ВложениеРазмер
Иконка изображения 1.png10.72 КБ
Иконка изображения 2.png14.02 КБ
Иконка изображения 3.png14.1 КБ
Иконка изображения 4.png8.96 КБ
Иконка изображения 5.png8.25 КБ
Иконка изображения 6.png13.07 КБ
Иконка изображения 7.png6.52 КБ
Иконка изображения 8.png6.65 КБ

Комментарии

Аватар пользователя Eugeny Eugeny 18 апреля 2011 в 22:33

а зачем включать представление taxonomy term ? Может проще его настройки перенести в свое представление ?

Аватар пользователя Eugeny Eugeny 18 апреля 2011 в 22:47

Тогда было бы не плохо описать вкратце что делает taxonomy term для данной задачи (т.е. зачем его включать). И еще спасибо за отличную статью!

Аватар пользователя ZanaDLucTyc ZanaDLucTyc 18 апреля 2011 в 22:54

Благодарю, оставлю коммент для отслеживания статьи.

P.S. Хотя, будет ли эта инфа актуальной к моменту, когда коммерц перестанет быть сырым?!... )))

Аватар пользователя Eugeny Eugeny 18 апреля 2011 в 22:57

"ZanaDLucTyc" wrote:
P.S. Хотя, будет ли эта инфа актуальной к моменту, когда коммерц перестанет быть сырым?!... )))

Безусловно будет, так как views дает намного больше гибкости при создании каталога нежели штатные средства.

Аватар пользователя gumk gumk 18 апреля 2011 в 23:03

"Eugeny" wrote:
Безусловно будет, так как views дает намного больше гибкости при создании каталога нежели штатные средства.

- это решение подойдет для создания любых каталогов в drupal 7
- после выходе taxonomy redirect позволит созадвать несколько каталогов одновременно
- есть возможность обвесить страницы каталога всевозможными расширенными фильтрами, создавать/выводить любые поля, и т.п. и т.д

Аватар пользователя Valeratal Valeratal 18 апреля 2011 в 23:09

очень интересно
но, блин, почему это по дефолту уже есть в убере? Почему надо ломать голову над даже простыми вещами?

Аватар пользователя ZanaDLucTyc ZanaDLucTyc 19 апреля 2011 в 0:50

"Eugeny" wrote:
Безусловно будет, так как views дает намного больше гибкости при создании каталога нежели штатные средства.

Насчет актуальности метода согласен, но...

"Valeratal" wrote:
но, блин, почему это по дефолту уже есть в убере? Почему надо ломать голову над даже простыми вещами?

... это и имелось ввиду. Кто знает, может и в коммерц добавят подобные инструменты. Я даже уверен, что добавят. Smile

Аватар пользователя gumk gumk 19 апреля 2011 в 1:13

"Ламер" wrote:
автор напиши лучше как ты товар выводил на страницу, чтоб его другие видели, а не только ты))))) вот это полезно будет, про костыли и изврат

вот это имелось в виду или что?

Кстати тоже думал что за изврат с созданием товара - но потом понял, что в магазе все равно будет импорт из csv или xml, модуль feeds хорошо с этим справляется.

Можно в принципе привести создание товара в нормальный вид - нужно просто написать widget для поля product_refernce, который реализует автозаполнение + форма через которую поля
из сущности продукта будут добавляться к форме заказа.
Тоесть пользователь указывает в автозаполнении ссылки на товары,
а ниже чекбокс (добваить товар), ставишь галку - ниже подгружается форма создание товара.
будет время попробую написать

Аватар пользователя kodo kodo 19 апреля 2011 в 5:49

"Valeratal" wrote:
но, блин, почему это по дефолту уже есть в убере? Почему надо ломать голову над даже простыми вещами?

Валера, обычно и в Убере каталог делается на Вьюсах, т.к. стандартный каталог убера - УГ и тяжело темизируется.
По созданию ноды товара на д.орг с месяца два назад шло обсуждение, что по Рулезам автоматом создовать ноду, чтобы не делать двойную работу. Но пока нет релиза в Коммерц делать нечего. Sad

Аватар пользователя Sun-fire Sun-fire 19 апреля 2011 в 11:52

Ну, бета 2 таки рабочая. А вот с фасетными отборами пока не совсем айс. Пришлось писать свое решение.

Аватар пользователя clubwave.ru clubwave.ru 21 апреля 2011 в 1:56

Valeratal, ты меня удивляешь.. столько лет знаком с друпалом, а до сих пор такие вопросы задаёшь))

А вот commerce я как-то пропустил.. пойду щупать.. убер это хорошо, но всё же что-то в нём не так.

Администрация друпал.ру.. цитата в хроме так и не работает!! Позор!

Аватар пользователя Crea Crea 14 мая 2011 в 1:00

clubwave.ru wrote:
http://www.commerceguys.com/ Опаньки! уберкарт и коммерц делает один и тот же человек? Интересно)

Торговым знаком Уберкарт владеет контора, которая его нанимала. На определенном этапе им не понравилось, куда движется проект, и они попытались использовать торговый знак как инструмент давления, чтобы изменить вектор развития. Но парень оказался не прост, сказал им "до свидания", уволился, и основал конкурирующий проект.

Аватар пользователя RoSk0 RoSk0 27 апреля 2011 в 20:04

2TS: как у Вас получило использовать в качестве no results behavior другой дисплей той же вьюхи?
мне вьюс его просто в списке не показывает...

Аватар пользователя gumk gumk 27 апреля 2011 в 21:37

"RoSk0" wrote:

2TS: как у Вас получило использовать в качестве no results behavior другой дисплей той же вьюхи?
мне вьюс его просто в списке не показывает...


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

Аватар пользователя podarok@drupal.org podarok@drupal.org 14 мая 2011 в 0:50

в моем случае я написал модуль генерации каталога на основе типов продуктов коммерса с переводом в иерархию таксономи словаря, последний уровень которого отображает ссылки на подборщики по полям в Видах.

пока для выкладки на дорг не готов, но попробую подточить для этого

Аватар пользователя Dan Dan 14 мая 2011 в 4:44

"ZanaDLucTyc" wrote:
P.S. Хотя, будет ли эта инфа актуальной к моменту, когда коммерц перестанет быть сырым?!... )))

Будет. Коммерц, в отличии от убера пытается максимально использовать ядро друпала, в результате получается решение более адаптируемое и "каркасное" (для большинства - сырое), но без кучи ненужных примочек и костылей.

"Valeratal" wrote:
но, блин, почему это по дефолту уже есть в убере? Почему надо ломать голову над даже простыми вещами?

Потому что CMF. Потому что нафига нужен каталог в убере, если есть views и т.д. Ну и опять же - если кому-то пока сложно использовать коммерц, подождите пока он пойдёт в массы - будут вам нужные модули-полезняшки.

Аватар пользователя Uberbags Uberbags 19 июля 2011 в 7:13

А как распихать имеющиеся товары по каталогам? Товары надо сделать терминами словаря?

Аватар пользователя Uberbags Uberbags 20 июля 2011 в 6:23

ненене ты чуть не так понял - товары созданы(с изображениями, нужными полями и тэ дэ) вопрос в том, как эти товары были не видны не только на главной странице, а еще и в каталоге

Аватар пользователя FORTIS FORTIS 19 августа 2011 в 0:41

хех если опечататься и создать страничный вид taxonomy/term?% - его потом хрен удалишь )))

Аватар пользователя FORTIS FORTIS 20 августа 2011 в 16:28

"gumk" wrote:
Как сделать пункт меню?
вариант 1: делаем все термины таксономии дочерними какого-то одного, и указываем в меню ссылку на этот термин
вариант 2: берем модуль taxonomy menu, и выводим в блоке ссылки на категории

если у вьюхи которую создаем (каталог) стоит фильтр по словарю каталога, то пункт в меню можно сделать ссылающимся на taxonomy/term/all - так лишнего термина не нужно

Аватар пользователя FORTIS FORTIS 21 августа 2011 в 13:31

отказался пока от комерца в пользу уберкарт 3, мне показалось диким использование булк адд или рулзов для сопоставления товара с представлением Wacko пока что управлять таким магазином жутко неудобно

Аватар пользователя RoSk0 RoSk0 22 августа 2011 в 22:15

Автору респект и уважуха!
Пара вопросов:
1 Хотелось бы по подробней узнать как сделать тоже самое в одной вьюхе?
2 Как бороться с тем что в созданной вьюхе с типом "категория" title страницы не перезаписывается значением названия категории из урл?

Аватар пользователя gumk gumk 22 августа 2011 в 22:45

"RoSk0" wrote:
Хотелось бы по подробней узнать как сделать тоже самое в одной вьюхе?

В одной вьюхе не получится, тут логика каталога такая - есть дочерние категории - выводим их (первая вьюха), если нет - выводим товары - вторая вьюха.
"RoSk0" wrote:
Как бороться с тем что в созданной вьюхе с типом "категория" title страницы не перезаписывается значением названия категории из урл?
это пока главный недостаток в реализации данного каталог, ждем пока вьюз 3 научится нормально поддерживать token ы

Аватар пользователя RoSk0 RoSk0 22 августа 2011 в 23:32

"gumk" wrote:
В одной вьюхе не получится,

ффух... а я то думал, что пропустил что то в этой жизни глядя на
"gumk" wrote:
Опубликовано Eugeny в пн, 18/04/2011 - 20:33.
Eugeny

а зачем включать представление taxonomy term ? Может проще его настройки перенести в свое представление ?

Опубликовано gumk в пн, 18/04/2011 - 20:36.
gumk

можно и так, но с для большинства включить проще будет

Аватар пользователя RoSk0 RoSk0 23 августа 2011 в 0:12

"gumk" wrote:
это пока главный недостаток в реализации данного каталог, ждем пока вьюз 3 научится нормально поддерживать token ы


интересно, а на уровне темы это как то можно поправить?

Аватар пользователя Uberbags Uberbags 26 августа 2011 в 8:01

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

Аватар пользователя DDDDD099 DDDDD099 2 сентября 2011 в 11:16

"FORTIS" wrote:

отказался пока от комерца в пользу уберкарт 3, мне показалось диким использование булк адд или рулзов для сопоставления товара с представлением Wacko пока что управлять таким магазином жутко неудобно


Я наоборор от убера в семерке отказался - не нашел интеграции с нашими популярными платсистемами - а это уже критично.
Этот урок мне очень помог - спасибо.

Аватар пользователя FORTIS FORTIS 26 октября 2011 в 2:40

как в комерце сейчас сдобавление продуктов и их представлений получше стало?

Аватар пользователя haver haver 11 ноября 2011 в 18:17

Если этому представлению catalog определить путь /frontpage вместо /taxonomy/term/% то представление все равно не отображается на главной.
Я копался в дефолтном представлении Front page , может есть еще что то что заставляет перекрыть главную кроме прописывания пути /frontpage?
Может модуль Front page, просто если это можно сделать с помощью вьюс, то модуль не хотелось бы

Аватар пользователя garegin garegin 6 января 2012 в 14:18

По умолчанию группа товаров выводится в виде выпадающего списка.
Как изменять виджет вывода группы товаров на странице товара для покупателя?

Аватар пользователя MuMaC MuMaC 8 января 2012 в 18:00

"gumk" wrote:
"RoSk0" написал(а):
Как бороться с тем что в созданной вьюхе с типом "категория" title страницы не перезаписывается значением названия категории из урл?
это пока главный недостаток в реализации данного каталог, ждем пока вьюз 3 научится нормально поддерживать token ы

Кто-то смог решить проблему с генерацией тайтлов для данного метода ? Сделал как вышеописано, все нормально, но просканировав сайт получил сотни тайтлов с одинаковыми заголовками, что не есть хорошо для оптимизации Sad

Аватар пользователя Dimm Dimm 30 апреля 2012 в 11:51

Вот спасибо!

Внес небольшие поправки: чтоб отображался первый уровень иерархии (те у кого нет родителей)
в разделе "Configure contextual filter: Taxonomy term: Parent term" -> "WHEN THE FILTER VALUE IS NOT AVAILABLE"-> "Provide default value"
поставил:
"Type=Fixed Value"->"Fixed value=NULL"

Ну а потом установил модуль Panels.
Добавил на сраницу /taxonomy/term/% сверху views-pane с разделами каталога, в вниз views-pane c товарами каталог.

Получился каталог как в уберкарте.

Аватар пользователя Artu Artu 4 июня 2012 в 4:05

Сделаю-ка я пока просто каталог продуктов на базе этого материала, без коммерца.

Аватар пользователя Artu Artu 4 июня 2012 в 4:26

но taxonomy redirect для D7 так и не появился.
Чем заменить когда есть views для разных такcономий?
TVI?
а может Taxonomy display?

Аватар пользователя Valeratal Valeratal 30 июля 2012 в 15:13

Попробую сделать каталог для убера по этому мануалу

В стандартном, мне не нравилось, что нельзя было фильтры прикрутить (например, по атрибутам)

Может в 7-ке уберкарта что-исправили. Но в 6-ке - поставил и все. Никакой кастомизации

Аватар пользователя anikadema anikadema 26 августа 2012 в 22:58

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

Аватар пользователя Valeratal Valeratal 30 октября 2012 в 0:23

что то у меня не выводит ничего. В смысле эта "Надстройка" которая должна показывать дочерние термины
Вот экспорт

$view = new view();
$view->name = '_5';
$view->description = '';
$view->tag = 'default';
$view->base_table = 'taxonomy_term_data';
$view->human_name = 'Каталог 5';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */

/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = 'Каталог';
$handler->display->display_options['use_more_always'] = FALSE;
$handler->display->display_options['use_more_text'] = 'подробнее';
$handler->display->display_options['access']['type'] = 'perm';
$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']['submit_button'] = 'Применить';
$handler->display->display_options['exposed_form']['options']['reset_button_label'] = 'Сбросить';
$handler->display->display_options['exposed_form']['options']['exposed_sorts_label'] = 'Сортировать по';
$handler->display->display_options['exposed_form']['options']['sort_asc_label'] = 'По возрастанию';
$handler->display->display_options['exposed_form']['options']['sort_desc_label'] = 'По убыванию';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['pager']['options']['items_per_page'] = '12';
$handler->display->display_options['pager']['options']['expose']['items_per_page_label'] = 'Элементов на страницу';
$handler->display->display_options['pager']['options']['expose']['items_per_page_options_all_label'] = '- Все -';
$handler->display->display_options['pager']['options']['expose']['offset_label'] = 'Пропустить';
$handler->display->display_options['pager']['options']['tags']['first'] = '« первая';
$handler->display->display_options['pager']['options']['tags']['previous'] = '‹ предыдущая';
$handler->display->display_options['pager']['options']['tags']['next'] = 'следующая ›';
$handler->display->display_options['pager']['options']['tags']['last'] = 'последняя »';
$handler->display->display_options['style_plugin'] = 'grid';
$handler->display->display_options['row_plugin'] = 'fields';
/* Поведение при отсутствии результатов: Глобальный: Область представления */
$handler->display->display_options['empty']['view']['id'] = 'view';
$handler->display->display_options['empty']['view']['table'] = 'views';
$handler->display->display_options['empty']['view']['field'] = 'view';
$handler->display->display_options['empty']['view']['empty'] = TRUE;
$handler->display->display_options['empty']['view']['view_to_insert'] = 'taxonomy_term:page';
$handler->display->display_options['empty']['view']['inherit_arguments'] = TRUE;
/* Поле: Термин таксономии: Изображение */
$handler->display->display_options['fields']['uc_catalog_image']['id'] = 'uc_catalog_image';
$handler->display->display_options['fields']['uc_catalog_image']['table'] = 'field_data_uc_catalog_image';
$handler->display->display_options['fields']['uc_catalog_image']['field'] = 'uc_catalog_image';
$handler->display->display_options['fields']['uc_catalog_image']['label'] = '';
$handler->display->display_options['fields']['uc_catalog_image']['element_label_colon'] = FALSE;
$handler->display->display_options['fields']['uc_catalog_image']['click_sort_column'] = 'fid';
$handler->display->display_options['fields']['uc_catalog_image']['settings'] = array(
'image_style' => 'uc_category',
'image_link' => 'content',
);
/* Поле: Термин таксономии: Название */
$handler->display->display_options['fields']['name']['id'] = 'name';
$handler->display->display_options['fields']['name']['table'] = 'taxonomy_term_data';
$handler->display->display_options['fields']['name']['field'] = 'name';
$handler->display->display_options['fields']['name']['label'] = '';
$handler->display->display_options['fields']['name']['alter']['word_boundary'] = FALSE;
$handler->display->display_options['fields']['name']['alter']['ellipsis'] = FALSE;
$handler->display->display_options['fields']['name']['link_to_taxonomy'] = TRUE;
/* Контекстный фильтр: Термин таксономии: Родительский термин */
$handler->display->display_options['arguments']['parent']['id'] = 'parent';
$handler->display->display_options['arguments']['parent']['table'] = 'taxonomy_term_hierarchy';
$handler->display->display_options['arguments']['parent']['field'] = 'parent';
$handler->display->display_options['arguments']['parent']['default_action'] = 'empty';
$handler->display->display_options['arguments']['parent']['exception']['title'] = 'Все';
$handler->display->display_options['arguments']['parent']['default_argument_type'] = 'fixed';
$handler->display->display_options['arguments']['parent']['summary']['number_of_records'] = '0';
$handler->display->display_options['arguments']['parent']['summary']['format'] = 'default_summary';
$handler->display->display_options['arguments']['parent']['summary_options']['items_per_page'] = '25';

/* Display: Page */
$handler = $view->new_display('page', 'Page', 'page');
$handler->display->display_options['defaults']['hide_admin_links'] = FALSE;
$handler->display->display_options['path'] = 'taxonomy/term/%';
$handler->display->display_options['menu']['title'] = 'каталог5';
$handler->display->display_options['menu']['weight'] = '0';
$handler->display->display_options['menu']['context'] = 0;
$translatables['_5'] = array(
t('Master'),
t('Каталог'),
t('подробнее'),
t('Применить'),
t('Сбросить'),
t('Сортировать по'),
t('По возрастанию'),
t('По убыванию'),
t('Элементов на страницу'),
t('- Все -'),
t('Пропустить'),
t('« первая'),
t('‹ предыдущая'),
t('следующая ›'),
t('последняя »'),
t('Все'),
t('Page'),
);

Аватар пользователя Valeratal Valeratal 30 октября 2012 в 0:31

Хм, предосмотр работает
А на сайте нет

Может потому что у меня вьюхи от каталога убера остались..

Аватар пользователя Valeratal Valeratal 30 октября 2012 в 11:00

Глупый вопрос возможно
Но как друпал определит, что мы перекрыли новой вьюхой вывод вьюхи-таксономии?

точнее, как он определит, какая вьюха какую перекрывает? Вьюхи 2, какая какую перекроет?

Аватар пользователя gumk gumk 30 октября 2012 в 19:39

Как это работает?
если у термина есть дочерние термины - грузится вид catalog
если нет - грузится вид taxonomy term

Аватар пользователя Valeratal Valeratal 31 октября 2012 в 11:57

У меня это "работает"
но до первого редактирования какой-либо вьюхи

Короче забил, включил обычный каталог убера (он тоже на вьюхах)

Эти танцы с бубном.... Кстати в коммерце тоже есть каталог, включаемый без танцев.