Привет коллеги, подскажите пожалуста как решить следующую задачу:
Есть задача создать интернет магазин. Категории выводяться через Taxonomy menu.
Пример:
-мячи:
--футбольные
--бейсбольные
Проблема состоит в следующем:
в карточке товара (ноде) нужно отобразить:
мяч футбольный,
мяч бесбольный,
и т.д.
каким образом это реализовать?
я вижу два способа, но у них есть свои недостатки
1 Создаем дополнительные поля в типе материала
+эти поля можно импортировать ввместе со всеми через FEEDS
-каждый раз нужно заполнять
2 Выводить через поля термина таксономии
+автоматизация процесса
-при большом количестве добавляемых терминов (не единовременно) придется пользоваться импортом feeds еще и для терминов.
Каким еще способом можно устранить недостатки или есть еще какой-нибудь метод либо модуль.
Комментарии
через поля
а если вы тахономи будите выводить то в ноде будет мячи футбольные, ведь таксономи именно так называется.
Можно создать поля и в термине таксономии, и выводить их через вьюс, установив связь(relationship) вот только если у ноды несколько такс терминов, то ноды будут дублироваться.
можно.
Еще проще способ.. хуком hook_node_preprocess (во вспомогательном модуле или в template.php) переопределить стандартный заголовок термина на альтернативный... 2-3 строчки кода..
Немогли бы вы првести пример, такой препроцес функции, у меня не получилось уложиться в три строчки, и вообще добиться результатов.
Все осложняется тем , что товары выводяться не через product display, а через вьювс, вытягиванием полей непосредственно из энтити(coommerce product).
Плюс ко всему термины таксономии это ссылки, их еще и несколько, нужно это сделать через луп как я понимаю.
Вот это то что нужно, а препроцесс функция будет выполняться до того как значение попадут во вьюс и пейдж менеджер.
А в словаре имена тегов будут отбражаться до препросес фугкции. Это очень важно потому что на основе именов тегов строиться меню с помощью модуля таксономи-меню. Как я понял альтернативный заголовок предлагаете брать из кастомного поля? Если вам не слоложно вы не могли бы скинуть ссылку на друпал орг для для этого хука.
Предлагаю пойти другим путём.
Сделать имена терминов таксономии в единственном числе. Это позволит не морочиться с отображением терминов в товаре.
Множественое число добавить в термин отдельным полем и строить меню уже самим,
ручкамив своём модуле.Как это сделать можно посмотреть в хорошей статье http://xandeadx.ru/blog/drupal/545. Только вместо 'data' => $term->name надо будет подставить поле множественного числа.
Это хорошее решие, но нашел более функциональное, не без вашей помощи, спасибо огромное!
Вот решение, кстати, код в комментариях.
http://api.drupal.org/api/drupal/modules%21taxonomy%21taxonomy.module/fu...
Это какой коммент? Надеюсь не этот?
Этот, а что с ним не так? От решения xandeadx , отличается тем что можно задать css классы вложенности тега и его tid.
Отличается тем, что там присутствуют html-тэги, превращающие код в наколенный.
Задать атрибуты (классы, id, и т.д.) можно и в методе xandeadx, см АПИ theme('item_list',...). А если хочется, чтобы этобы ло похоже на меню, то надо формировать массив данных для функции menu_tree_output.
Четно говоря я только начинаю рабираться в системе друпала, но хук theme_item_list нужно передавать в temlpate.php , а хотелось бы иметь решение в виде модуля. Не могли бы вы обьяснить чем в данном случем черевато присутствие HTML output в .module файле.
Ммм, зачем? Если надо переопределить его работу - то да. Но для данной задачи это не требуется. Просто используй эту функцию для формирования списка.
Вот пример вывода произвольного списка:
<?php
$items = array(
'Item1',
'Item2'
);
print
theme('item_list', array('items' => $items,
'title' => 'My list',
'attributes' => array('class' => array('my-list')))
);
?>
Этот код выведет:
<h3>My list</h3>
<ul class="my-list">
<li>Item1</li>
<li>Item2</li>
</ul>
</div>
И тут нет никакого шаманства с template.php.
HTML-код в модуле должен отсутствовать. Вернее он может быть только в препроцессинге и в шаблонах, то есть там, где его можно переопределить.
Если человек пишет для себя такой код, то это не беда - его код, его проблемы. Но если он выкладывает на офф. сайте, то это плохо. Как в театре громко говорить по телефону. Во время спектакля. Матом.
Правильно я понял, что разметка не через хук плохая практика иза того, что нельзя будет перепорелиться разметку воспользовавшись стандартным хуком?
Еще есть такая проблема, taxonomy_get_tree возвращает массив с обьектами(терминами) в свойствах которых только default поля, ксатомных нет, видимо нужно писать всой запрос к бд, ведь хотелось бы таскать информацию из собственного поля.
Да и спасибо огромное за ответы!
Да.
taxonomy_term_load или entity_load
Метод работает на ура! Спасибо огромное Dan за помощь!