Здравствуйте, уважаемые пользователи!
Уже далеко не первый день пытаюсь решить свою нерешаемую задачу, ответ на который к сожалению нигде не могу найти. Поэтому я решил все-таки обратиться за помощью к вам Дорогие друзья!
Я разрабатываю интернет-магазин, в котором товары как и у большинства веб-магазинов располагаются в виде сетки, колонок и столбцов, в моем случае я решил это с помощью модуля views, где в настройках установил вывод материала (картинок) в стиле grid (3 X 12), при нажатии на картинку товара или ссылку подробнее я собственно попадаю на страницу (ноду) с содержимым этого товара.
Задача вопроса следующая!
Необходимо под товаром вывести похожие товары (картинки) в таком же стиле сетки (grid). Как это будет выглядеть я привел на рисунке чуть ниже.
Как видно на примере, я сумел вывести похожие товары в прикрепленном снизу блоке с помощью данного сниппета,
//$tags = "'термин1','термин2','термин3'";
$type = "image";
$count = 9; // Максимальное количество выводимых нод.
$result = db_query_range(db_prefix_tables("SELECT n.nid, n.title
FROM {node} n
INNER JOIN {term_node} tn ON n.nid = tn.nid
INNER JOIN {term_data} td ON tn.tid = td.tid
WHERE td.name = '%s' AND
n.status = 1
ORDER BY n.created DESC"),$tag,0,$count);
while ($node = db_fetch_object($result)) {
$items[] = node_view(node_load(array('nid' => $node->nid)), $teaser = FALSE, $page = TRUE, $links = FALSE) ;
}
if (isset($items) && is_array($items) && count($items) > 0) {
foreach ($items as $item){
$output .= $item . ""; }
}
print $output;
?>
ВОПРОС!
Как вывести похожие материалы (картинки) в стиле grid, в 3 столбца и 4 колонки, посоветуйте пожалуйста ваш вариант (сниппет).
Пробывал настроить в стилях не выходит, думаю нужно создавать таблицу, а как в ней вывести похожие товары (картинки) понятия не имею, т.к. не очень силен в php.
За любую подсказку, помощь буду очень вам благодарен!
Комментарии
???
Можно только CSS обойтись. Обернуть картинки дивами шириной 1/3 ширины контента и float: left.
А для основного товара картинку желательно покрупнее.
Попробуйте модуль viewfield http://drupalmodules.com/module/viewfield
Он позволяет создать CCK поле с содержимым одного view и добавить это поле в результаты другого view .
в том то и дело, что я не знаю, какую именно часть в коде обернуть дивами, подскажите пожалуйста если знаете. Сниппет который я привел выше я окружал дивами полностью, где присваивал вот такой стиль
{width: 264px; height: 1000px; float: left; margin: 5px 5px; padding: 4px; }
, но на выходе получалась абракодабра, все картинки смешивались.
Картинку к основному товару я конечно сделал больше, чем к похожим
Замените цикл foreach на
<?php
$i=1;
$output .= "<p>";
foreach ($items as $item){
$output .= $item ;
if($i%3==0){
$output .= "</p><p>";
}
$i++;
}
$output .= "</p>";
?>
Заменил цикл, как Вы посоветовали, но теперь вообще похожие товары не выводятся, только одно пустое поле осталось
Sergeir, Вы не могли бы показать цельный сниппет с замененным циклом foreach, а то может я что-то не то натворил.
sensei спроси у Стана. Он в Друпалогии так каталог выводит.
Тебе нужно сделать примерно так. Все картинки обернуть дивами. У основного товара свой класс, у похожего свой.
margin: 5px auto;
}
.картинка_похожего_товара{
width: 70px; /* 1/3 от общей ширины минус margin и pagging. Можно для верности еще 1 пиксель убрать */
margin: 5px;
padding: 4px;
float: left;
}
Serge66, спасибо большое за совет!
Стили то я подогнать смогу, это не проблема, проблема где, а точнее что именно оборачивать в сниппете дивами.
<?phpforeach ($items as $item){
$output .= "<div class='картинка_похожего_товара'>". $item . "</div>"; }
}?>
Сейчас подумал. Можно ведь и картинкам этот класс прописать. Тогда дивы не нужны.
Вот где собака зарыта!!!
Задача решена!
Спасибо БОЛЬШОЕ Serge66 за простое и верное решение!
Я надеюсь оно поможет и многим другим участникам этого форума!
Люди, если кто сделал напишите полный программный код, я попробовал не получилось, ошибку даёт, спасибо заранее
Вот готовый код,
<?php
$tag = 'Нужный тег'; // Настраиваем нужный тег. Если нужен вывод материалов по нескольким терминам, то вместо этого кода пишем следующий:
//$tags = "'термин1','термин2','термин3'";
$type = "image";
$count = 9; // Максимальное количество выводимых нод.
$result = db_query_range(db_prefix_tables("SELECT n.nid, n.title
FROM {node} n
INNER JOIN {term_node} tn ON n.nid = tn.nid
INNER JOIN {term_data} td ON tn.tid = td.tid
WHERE td.name = '%s' AND
n.status = 1
ORDER BY RAND()"),$tag,0,$count);
while ($node = db_fetch_object($result)) {
$items[] = node_view(node_load(array('nid' => $node->nid)), $teaser = FALSE, $page = TRUE, $links = FALSE) ;
}
if (isset($items) && is_array($items) && count($items) > 0) {
foreach ($items as $item){
$output .= "
"; }
}
print $output;
?>
а какой смысл прописывать вручную тэг
разве тэг, для показа похожих товаров, не должен браться из основной ноды-товара?
В данном случае, если убрать тег из вышеприведенного сниппета, то в блоке отображаться будут все товары подрят, даже те, которые не принадлежат определенному термину.
А в этом варианте что удобно, например, товары с тегом "телефоны" могут выводить в нужном блоке и телефоны, а также и другие нужные типы, тот же термин "аксессуары для телефонов" и т.д., думаю Вы меня поняли?
улавливаю
но не совсем
по идее, должны выводится товары с тем же термином + опционально введенные руками - так ли это?
В этом варианте все только ручками прописывать надо, иначе никак, т.к. привязка идет к термину, если не прописывать его, то под определенными типами, допустим те же <?php $tag = 'Телефоны'?>, будут выводиться абсолютно все ноды разных типов.
понятно, не очень практично