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. Создаем для него тплку, в ипле прописываем <?phpprintdrupal_get_form("id формы", $row->nid); ?>
3.3. Последний шаг - с помощью джава скриптов, вешаем обработчик события change на чекбокс. В теле события формируем ссылку(на сайте это "Сравнить выбранные товары" -compare/1+5+8+28 ). В зависимости от того отмечен чекбокс или нет, добавляем к ссылке/убираем из ссылки id ноды.
З.Ы. У этого решения есть недостаток, с отключенными скриптами оно не работает.
Брагодарю Вас [user=annya] за столь подробное объяснения. Конечно интересный способ решения. Жаль что нету модуля, который бы выполнял что нибудь подобное.
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-'<?phpprint$data->nid; ?>' type='checkbox'>
Заодно можно сделать локализацию, добавив <label> с кодом <?phpprintt('Add to compare'); ?>
Andruxa
Вы не правы в 2-ух моментах. Во-первых использование Views Custom Field на сайте считается не очень хорошим тоном, так как это вынуждает использовать PHP-фильтр, а это является потенциальной дырой в безопасности.
Во вторых, насколько я помню использовать тег <input> вне тега <form> невалидно.
использование Views Custom Field на сайте считается не очень хорошим тоном, так как это вынуждает использовать PHP-фильтр
а можно попробробнее?
А то я в последнее время как-то увлекся Customfield: PHP, по принципу "сиди, я сам открою"
Quote:
вне тега
Полностью оформить <form><label><input></label></form>
Но по сути, js нужен элемент с nid и каким-нибудь классом.
Громоздкое решение получается.
Посмотрел на Я.М - там добавить/убрать оформлено ссылкой, ее можно вывести Сustom text.
В rel можно прописать класс jQuery.
Роботам оно без надобности, а Человекам там можно свистелки делать.
Комментарии
Подписываюсь на комментарии.
Заранее присоединяюсь к благодарностям.
http://www.ironsystem.ru/catalog/15
Вот здесь я ручками делала(вывод вьюшка). Помню искала модуль(правда не очень активно), не нашла.
Почти гениально. Есть один недостаток - нельзя сравнить товары, которые находятся на разных страницах.
Расскажите, пожалуйста, поподробнее?
Чекбоксы с помощью модуля flag делали?
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 ноды.
З.Ы. У этого решения есть недостаток, с отключенными скриптами оно не работает.
Брагодарю Вас [user=annya] за столь подробное объяснения. Конечно интересный способ решения. Жаль что нету модуля, который бы выполнял что нибудь подобное.
annya Спасибо!
Я решил немного упростить с помощью модуля 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'); ?>
Andruxa
Вы не правы в 2-ух моментах. Во-первых использование Views Custom Field на сайте считается не очень хорошим тоном, так как это вынуждает использовать PHP-фильтр, а это является потенциальной дырой в безопасности.
Во вторых, насколько я помню использовать тег
<input>
вне тега<form>
невалидно.а можно попробробнее?
А то я в последнее время как-то увлекся Customfield: PHP, по принципу "сиди, я сам открою"
Полностью оформить
<form><label><input></label></form>
Но по сути, js нужен элемент с
nid
и каким-нибудь классом.Громоздкое решение получается.
Посмотрел на Я.М - там добавить/убрать оформлено ссылкой, ее можно вывести Сustom text.
В
rel
можно прописать класс jQuery.Роботам оно без надобности, а Человекам там можно свистелки делать.