[РЕШЕНО] Сравнить в Ubercart

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

Аватар пользователя swingsss@drupal.org swingsss@drupal.org 14 декабря 2010 в 17:45

Уважаемые специалисты по Drupal!
Возник вопрос: как реализовать сравнение товаров в Ubercart.

Существуют ли для этого модули или есть встроенная возможность.

Заранее благодарю за предоставленные ответы.

Комментарии

Аватар пользователя sv2109 sv2109 14 декабря 2010 в 19:28

Почти гениально. Есть один недостаток - нельзя сравнить товары, которые находятся на разных страницах.

Аватар пользователя Andruxa Andruxa 15 декабря 2010 в 15:30

"annya" wrote:
Вот здесь я ручками делала(вывод вьюшка)

Расскажите, пожалуйста, поподробнее?

Чекбоксы с помощью модуля flag делали?

Аватар пользователя annya annya 15 декабря 2010 в 18:05

1. Создаем вьюшку исходных товаров(В1).
2. Создаем вьюшку товаров которые будут сравниваться(В2). В ней добавляем аргумент по node nid, и ставим множественное количество возможных аргументов. по ссылке compare/1+5+8+28 у нас будет выводится сравнение для node c id = 1,2,8,28.
3. Теперь у нас задача сформировать ссылку в зависимости от того какие чекбоксы отмечены.
3.1. Как сформировать чекбоксы. Так как сделать вьюшку частью формы сложно, я сделала по-другому: каждый чекбокс === отдельная форма. Так как формы идентичны, за исключением, ид формы, я их создавала через hook_forms. В этом хуке создаем форму с чекбоксом, значение которого(value) === id ноды(это можно передать в дополнительных параметрах хука).
3.2. Создаем во вьюшке В1 поле Сustom text. Создаем для него тплку, в ипле прописываем <?php print drupal_get_form("id формы", $row->nid); ?>
3.3. Последний шаг - с помощью джава скриптов, вешаем обработчик события change на чекбокс. В теле события формируем ссылку(на сайте это "Сравнить выбранные товары" -compare/1+5+8+28 ). В зависимости от того отмечен чекбокс или нет, добавляем к ссылке/убираем из ссылки id ноды.
З.Ы. У этого решения есть недостаток, с отключенными скриптами оно не работает.

Аватар пользователя swingsss@drupal.org swingsss@drupal.org 16 декабря 2010 в 10:48

Брагодарю Вас [user=annya] за столь подробное объяснения. Конечно интересный способ решения. Жаль что нету модуля, который бы выполнял что нибудь подобное.

Аватар пользователя Andruxa Andruxa 16 декабря 2010 в 18:39

annya Спасибо!

"annya" wrote:
3.1. Как сформировать чекбоксы. Так как сделать вьюшку частью формы сложно, я сделала по-другому: каждый чекбокс === отдельная форма. Так как формы идентичны, за исключением, ид формы, я их создавала через hook_forms. В этом хуке создаем форму с чекбоксом, значение которого(value) === id ноды(это можно передать в дополнительных параметрах хука).
3.2. Создаем во вьюшке В1 поле Сustom text. Создаем для него тплку, в ипле прописываем <?php print drupal_get_form("id формы", $row->nid); ?>

Я решил немного упростить с помощью модуля Views Custom Field, создав в В1 поле Customfield: PHP code, и прописав в нем:
<input id='add-to-compare-'<?php print $data->nid; ?>' type='checkbox'>

Заодно можно сделать локализацию, добавив <label> с кодом <?php print t('Add to compare'); ?>

Аватар пользователя annya annya 16 декабря 2010 в 19:00

Andruxa
Вы не правы в 2-ух моментах. Во-первых использование Views Custom Field на сайте считается не очень хорошим тоном, так как это вынуждает использовать PHP-фильтр, а это является потенциальной дырой в безопасности.
Во вторых, насколько я помню использовать тег <input> вне тега <form> невалидно.

Аватар пользователя Andruxa Andruxa 16 декабря 2010 в 21:05

"annya" wrote:
использование Views Custom Field на сайте считается не очень хорошим тоном, так как это вынуждает использовать PHP-фильтр

а можно попробробнее?
А то я в последнее время как-то увлекся Customfield: PHP, по принципу "сиди, я сам открою"

Quote:
вне тега

Полностью оформить <form><label><input></label></form>
Но по сути, js нужен элемент с nid и каким-нибудь классом.
Громоздкое решение получается.

Посмотрел на Я.М - там добавить/убрать оформлено ссылкой, ее можно вывести Сustom text.
В rel можно прописать класс jQuery.
Роботам оно без надобности, а Человекам там можно свистелки делать.