[Решено] Множественное число в единственное

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

Аватар пользователя dru_and_I dru_and_I 12 марта 2012 в 21:04

Привет коллеги, подскажите пожалуста как решить следующую задачу:

Есть задача создать интернет магазин. Категории выводяться через Taxonomy menu.

Пример:
-мячи:
--футбольные
--бейсбольные

Проблема состоит в следующем:

в карточке товара (ноде) нужно отобразить:

мяч футбольный,
мяч бесбольный,
и т.д.

каким образом это реализовать?

я вижу два способа, но у них есть свои недостатки

1 Создаем дополнительные поля в типе материала

+эти поля можно импортировать ввместе со всеми через FEEDS
-каждый раз нужно заполнять

2 Выводить через поля термина таксономии

+автоматизация процесса
-при большом количестве добавляемых терминов (не единовременно) придется пользоваться импортом feeds еще и для терминов.

Каким еще способом можно устранить недостатки или есть еще какой-нибудь метод либо модуль.

Комментарии

Аватар пользователя AntonVTR AntonVTR 27 апреля 2012 в 9:33

через поля

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

Аватар пользователя dru_and_I dru_and_I 10 мая 2012 в 18:00

AntonVTR wrote:
через поля

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

Можно создать поля и в термине таксономии, и выводить их через вьюс, установив связь(relationship) вот только если у ноды несколько такс терминов, то ноды будут дублироваться.

Аватар пользователя AntonVTR AntonVTR 10 мая 2012 в 18:08

"dru_and_I" wrote:
Можно создать поля и в термине таксономии, и выводить их через вьюс, установив связь(relationship) вот только если у ноды несколько такс терминов, то ноды будут дублироваться.

можно.

Аватар пользователя Orion76 Orion76 10 мая 2012 в 23:52

Еще проще способ.. хуком hook_node_preprocess (во вспомогательном модуле или в template.php) переопределить стандартный заголовок термина на альтернативный... 2-3 строчки кода..

Аватар пользователя dru_and_I dru_and_I 11 мая 2012 в 14:07

Немогли бы вы првести пример, такой препроцес функции, у меня не получилось уложиться в три строчки, и вообще добиться результатов.
Все осложняется тем , что товары выводяться не через product display, а через вьювс, вытягиванием полей непосредственно из энтити(coommerce product).
Плюс ко всему термины таксономии это ссылки, их еще и несколько, нужно это сделать через луп как я понимаю.

Аватар пользователя dru_and_I dru_and_I 11 мая 2012 в 3:28

"orion76" wrote:
Еще проще способ.. хуком hook_node_preprocess (во вспомогательном модуле или в template.php) переопределить стандартный заголовок термина на альтернативный... 2-3 строчки кода..

Вот это то что нужно, а препроцесс функция будет выполняться до того как значение попадут во вьюс и пейдж менеджер.
А в словаре имена тегов будут отбражаться до препросес фугкции. Это очень важно потому что на основе именов тегов строиться меню с помощью модуля таксономи-меню. Как я понял альтернативный заголовок предлагаете брать из кастомного поля? Если вам не слоложно вы не могли бы скинуть ссылку на друпал орг для для этого хука.

Аватар пользователя Dan Dan 12 мая 2012 в 17:37

Предлагаю пойти другим путём.
Сделать имена терминов таксономии в единственном числе. Это позволит не морочиться с отображением терминов в товаре.
Множественое число добавить в термин отдельным полем и строить меню уже самим, ручками в своём модуле.
Как это сделать можно посмотреть в хорошей статье http://xandeadx.ru/blog/drupal/545. Только вместо 'data' => $term->name надо будет подставить поле множественного числа.

Аватар пользователя dru_and_I dru_and_I 12 мая 2012 в 20:28

Dan wrote:
Предлагаю пойти другим путём.
Сделать имена терминов таксономии в единственном числе. Это позволит не морочиться с отображением терминов в товаре.
Множественое число добавить в термин отдельным полем и строить меню уже самим, ручками в своём модуле.
Как это сделать можно посмотреть в хорошей статье http://xandeadx.ru/blog/drupal/545. Только вместо 'data' => $term->name надо будет подставить поле множественного числа.

Это хорошее решие, но нашел более функциональное, не без вашей помощи, спасибо огромное!

Вот решение, кстати, код в комментариях.

http://api.drupal.org/api/drupal/modules%21taxonomy%21taxonomy.module/fu...

Аватар пользователя Dan Dan 13 мая 2012 в 1:43

Отличается тем, что там присутствуют html-тэги, превращающие код в наколенный.
Задать атрибуты (классы, id, и т.д.) можно и в методе xandeadx, см АПИ theme('item_list',...). А если хочется, чтобы этобы ло похоже на меню, то надо формировать массив данных для функции menu_tree_output.

Аватар пользователя dru_and_I dru_and_I 13 мая 2012 в 14:49

"Dan" wrote:

Четно говоря я только начинаю рабираться в системе друпала, но хук theme_item_list нужно передавать в temlpate.php , а хотелось бы иметь решение в виде модуля. Не могли бы вы обьяснить чем в данном случем черевато присутствие HTML output в .module файле.

Аватар пользователя Dan Dan 13 мая 2012 в 15:11

"dru_and_I" wrote:
но хук theme_item_list нужно передавать в temlpate.php

Ммм, зачем? Если надо переопределить его работу - то да. Но для данной задачи это не требуется. Просто используй эту функцию для формирования списка.
Вот пример вывода произвольного списка:

<?php
$items 
= array(
  
'Item1',
  
'Item2'
);

print 

theme('item_list', array(
  
'items' => $items
  
'title' => 'My list',
  
'attributes' => array('class' => array('my-list')))
);
?>

Этот код выведет:

<div class="item-list">
  <h3>My list</h3>
  <ul class="my-list">
    <li>Item1</li>
    <li>Item2</li>
  </ul>
</div>

И тут нет никакого шаманства с template.php.

"dru_and_I" wrote:
Не могли бы вы обьяснить чем в данном случем черевато присутствие HTML output в .module файле.

HTML-код в модуле должен отсутствовать. Вернее он может быть только в препроцессинге и в шаблонах, то есть там, где его можно переопределить.
Если человек пишет для себя такой код, то это не беда - его код, его проблемы. Но если он выкладывает на офф. сайте, то это плохо. Как в театре громко говорить по телефону. Во время спектакля. Матом.

Аватар пользователя dru_and_I dru_and_I 10 ноября 2015 в 11:48

"Dan" wrote:

Правильно я понял, что разметка не через хук плохая практика иза того, что нельзя будет перепорелиться разметку воспользовавшись стандартным хуком?

Еще есть такая проблема, taxonomy_get_tree возвращает массив с обьектами(терминами) в свойствах которых только default поля, ксатомных нет, видимо нужно писать всой запрос к бд, ведь хотелось бы таскать информацию из собственного поля.

Да и спасибо огромное за ответы!

Аватар пользователя Dan Dan 13 мая 2012 в 16:53

"dru_and_I" wrote:
Правильно я понял, что разметка не через хук плохая практика иза того, что нельзя будет перепорелиться разметку воспользовавшись стандартным хуком?

Да.

"dru_and_I" wrote:
Еще есть такая проблема, taxonomy_get_tree возвращает массив с обьектами(терминами) в свойствах которых только default поля, ксатомных нет, видимо нужно писать всой запрос к бд, ведь хотелось бы таскать информацию из собственного поля.

taxonomy_term_load или entity_load