Помощь в выводе похожих материалов в стиле сетки (grid) | Решено

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

Аватар пользователя sensei88 sensei88 29 мая 2010 в 22:18

Здравствуйте, уважаемые пользователи!

Уже далеко не первый день пытаюсь решить свою нерешаемую задачу, ответ на который к сожалению нигде не могу найти. Поэтому я решил все-таки обратиться за помощью к вам Дорогие друзья!

Я разрабатываю интернет-магазин, в котором товары как и у большинства веб-магазинов располагаются в виде сетки, колонок и столбцов, в моем случае я решил это с помощью модуля views, где в настройках установил вывод материала (картинок) в стиле grid (3 X 12), при нажатии на картинку товара или ссылку подробнее я собственно попадаю на страницу (ноду) с содержимым этого товара.

Задача вопроса следующая!

Необходимо под товаром вывести похожие товары (картинки) в таком же стиле сетки (grid). Как это будет выглядеть я привел на рисунке чуть ниже.

Как видно на примере, я сумел вывести похожие товары в прикрепленном снизу блоке с помощью данного сниппета,

$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 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.

За любую подсказку, помощь буду очень вам благодарен!

Комментарии

Аватар пользователя Serge66 Serge66 29 мая 2010 в 22:35

"sensei88" wrote:
$count = 9; // Максимальное количество выводимых нод.

"sensei88" wrote:
в стиле grid, в 3 столбца и 4 колонки
???
Можно только CSS обойтись. Обернуть картинки дивами шириной 1/3 ширины контента и float: left.
А для основного товара картинку желательно покрупнее.

Аватар пользователя sensei88 sensei88 29 мая 2010 в 22:57

в том то и дело, что я не знаю, какую именно часть в коде обернуть дивами, подскажите пожалуйста если знаете. Сниппет который я привел выше я окружал дивами полностью, где присваивал вот такой стиль

{width: 264px; height: 1000px; float: left; margin: 5px 5px; padding: 4px; }

, но на выходе получалась абракодабра, все картинки смешивались.

Картинку к основному товару я конечно сделал больше, чем к похожим Wink

Аватар пользователя sergeir sergeir 29 мая 2010 в 23:36

Замените цикл foreach на

<?php
$i
=1;
$output .= "<p>";
foreach (
$items as $item){
        
$output .=   $item ;
        if(
$i%3==0){
         
$output .= "</p><p>";
        } 
        
$i++;
    }
$output .= "</p>";
?>
Аватар пользователя sensei88 sensei88 30 мая 2010 в 0:14

"sergeir" wrote:
"sergeir" wrote:
Замените цикл foreach на
<?php
$i=1;
$output .= "";
foreach ($items as $item){
$output .= $item ;
if($i%3==0){
$output .= "";
}
$i++;
}
$output .= "";
?>

Заменил цикл, как Вы посоветовали, но теперь вообще похожие товары не выводятся, только одно пустое поле осталось Sad

Sergeir, Вы не могли бы показать цельный сниппет с замененным циклом foreach, а то может я что-то не то натворил.

Аватар пользователя Serge66 Serge66 30 мая 2010 в 0:20

sensei спроси у Стана. Он в Друпалогии так каталог выводит.

Тебе нужно сделать примерно так. Все картинки обернуть дивами. У основного товара свой класс, у похожего свой.

.картинка_основного_товара{
margin: 5px auto;
}
.картинка_похожего_товара{
width: 70px; /* 1/3 от общей ширины минус margin и pagging. Можно для верности еще 1 пиксель убрать */
margin: 5px;
padding: 4px;
float: left;
}
Аватар пользователя sensei88 sensei88 30 мая 2010 в 0:32

Serge66, спасибо большое за совет!

Стили то я подогнать смогу, это не проблема, проблема где, а точнее что именно оборачивать в сниппете дивами.

Аватар пользователя Serge66 Serge66 30 мая 2010 в 0:46
<?phpforeach ($items as $item){
        $output .=  "<div class='картинка_похожего_товара'>". $item . "</div>"; }
    }?>

Сейчас подумал. Можно ведь и картинкам этот класс прописать. Тогда дивы не нужны.

Аватар пользователя sensei88 sensei88 30 мая 2010 в 1:19

Вот где собака зарыта!!!

"Serge66" wrote:
<?phpforeach ($items as $item){
$output .= "

". $item . "

"; }
}?>

Задача решена!

Спасибо БОЛЬШОЕ Serge66 за простое и верное решение!

Я надеюсь оно поможет и многим другим участникам этого форума!

Аватар пользователя duramana duramana 18 июня 2010 в 21:59

Люди, если кто сделал напишите полный программный код, я попробовал не получилось, ошибку даёт, спасибо заранее

Аватар пользователя sensei88 sensei88 27 июня 2010 в 2:04

Вот готовый код,

<?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 .= "

". $item . "

"; }
}
print $output;
?>

Аватар пользователя Valeratal Valeratal 28 июня 2010 в 9:31

а какой смысл прописывать вручную тэг
разве тэг, для показа похожих товаров, не должен браться из основной ноды-товара?

Аватар пользователя sensei88 sensei88 28 июня 2010 в 11:27

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

А в этом варианте что удобно, например, товары с тегом "телефоны" могут выводить в нужном блоке и телефоны, а также и другие нужные типы, тот же термин "аксессуары для телефонов" и т.д., думаю Вы меня поняли?

Аватар пользователя Valeratal Valeratal 28 июня 2010 в 16:06

улавливаю
но не совсем
по идее, должны выводится товары с тем же термином + опционально введенные руками - так ли это?

Аватар пользователя sensei88 sensei88 28 июня 2010 в 17:42

В этом варианте все только ручками прописывать надо, иначе никак, т.к. привязка идет к термину, если не прописывать его, то под определенными типами, допустим те же <?php $tag = 'Телефоны'?>, будут выводиться абсолютно все ноды разных типов.