Перейти к содержимому


Блок случайных товаров


  • Вы не можете ответить в тему
Сообщений в теме: 9

#1 vsupport

    Продвинутый пользователь

  • Администраторы
  • 758 сообщений
Репутация: 31
Ассистент

Отправлено 21 May 2011 - 12:16 PM

Открываем фаил - \core\includes\home.php
Ищем:
/*
$result = array();
$q = db_query("select productID FROM ".PRODUCTS_TABLE." WHERE categoryID!=1 AND enabled=1");
while ($row = db_fetch_row($q))$result[] = $row[0];
$q = db_query("select s.productID, s.name, s.Price, s.enabled, t.filename FROM ".PRODUCTS_TABLE." AS s LEFT JOIN ".PRODUCT_PICTURES."
AS t on (s.default_picture=t.photoID AND s.productID=t.productID) WHERE s.productID=".$result[rand(0, count($result)-1)]);
$result = array();
$row = db_fetch_row($q);

if (strlen($row["filename"])>0 && file_exists( "data/small/".$row["filename"])){
$row["filename"] = "small/".$row["filename"];
$row["cena"] = $row["Price"];
$row["Price"] = show_price($row["Price"]);
$result[] = $row;

}else{
$row["filename"] = "empty.gif";
$row["cena"] = $row["Price"];
$row["Price"] = show_price($row["Price"]);
$result[] = $row;
}

$smarty->assign("rand_product", $result[0]);
*/
снимаем комментарии и ниже добавляем:
$result = array();
$whereSQL="";
$cifra = 8; //количество товаров для вывода в блоке случайных товаров

$q = db_query("select productID FROM ".PRODUCTS_TABLE." WHERE categoryID!=1 AND enabled=1");

while ($row = db_fetch_row($q))$result[] = $row[0];

for($i=0;$i<$cifra;$i++){
if($whereSQL==""){
$whereSQL.="s.productID=".$result[rand(0, count($result)-1)];
}
else{
$whereSQL.=" OR s.productID=".$result[rand(0, count($result)-1)];
}
}

$result = array();
$q = db_query("select s.productID, s.name, s.Price, s.enabled, t.filename FROM ".PRODUCTS_TABLE." AS s LEFT JOIN ".PRODUCT_PICTURES."
AS t on (s.default_picture=t.photoID AND s.productID=t.productID) WHERE ".$whereSQL);

while ($row = db_fetch_row($q))
{

if (strlen($row["filename"])>0 && file_exists( "data/small/".$row["filename"])){
$row["filename"] = "small/".$row["filename"];
$row["cena"] = $row["Price"];
$row["Price"] = show_price($row["Price"]);
$result[] = $row;

}else{
$row["filename"] = "empty.gif";
$row["cena"] = $row["Price"];
$row["Price"] = show_price($row["Price"]);
$result[] = $row;
}
}

$smarty->assign("rand_product", $result);
Дополнение:
Если вы хотите чтобы случайные товары выводились только из тех, у которых статус "есть на складе", то замените на этот:
$result = array();
$whereSQL="";
$cifra = 8; //количество товаров для вывода в блоке случайных товаров

$q = db_query("select productID FROM ".PRODUCTS_TABLE." WHERE categoryID!=1 AND enabled=1 AND in_stock > 0");

while ($row = db_fetch_row($q))$result[] = $row[0];

for($i=0;$i<$cifra;$i++){
if($whereSQL==""){
$whereSQL.="s.productID=".$result[rand(0, count($result)-1)];
}
else{
$whereSQL.=" OR s.productID=".$result[rand(0, count($result)-1)];
}
}

$result = array();
$q = db_query("select s.productID, s.name, s.Price, s.enabled, t.filename FROM ".PRODUCTS_TABLE." AS s LEFT JOIN ".PRODUCT_PICTURES."
AS t on (s.default_picture=t.photoID AND s.productID=t.productID) WHERE ".$whereSQL);

while ($row = db_fetch_row($q))
{

if (strlen($row["filename"])>0 && file_exists( "data/small/".$row["filename"])){
$row["filename"] = "small/".$row["filename"];
$row["cena"] = $row["Price"];
$row["Price"] = show_price($row["Price"]);
$result[] = $row;

}else{
$row["filename"] = "empty.gif";
$row["cena"] = $row["Price"];
$row["Price"] = show_price($row["Price"]);
$result[] = $row;
}
}

$smarty->assign("rand_product", $result);
А еще можно заменить в "core/tpl/user/шаблон/blocks/newprstatic.tpl.html" news_products на rand_product. Теперь блок новинок будет выводить случайные товары, а вообще можно скопировать код из newprstatic.tpl.html в например randproduct.tpl.html и добавить новый блок из файла :)
  • 0

#2 sta1ker

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 84 сообщений
Репутация: 3
Начинающий

Отправлено 22 May 2011 - 11:13 AM

и где же будет этот блок?

что то тут не так.

Обычно код выносится в файл, а потом добавляется в админке.

К тому же rand_product по умолчанию просто закоментирован в home.php

---------- Сообщение объединено ----------

\core\includes\home.php вставьте вместо закомментированного кода rand_product (ну и естественно сняв комментарии)
$result = array();
          $whereSQL="";
          $cifra = 8; //количество товаров для вывода в блоке случайных товаров
          
            $q = db_query("select productID FROM ".PRODUCTS_TABLE." WHERE categoryID!=1 AND enabled=1");
           
          while ($row = db_fetch_row($q))$result[] = $row[0];
          
          for($i=0;$i<$cifra;$i++){   
             if($whereSQL==""){
                $whereSQL.="s.productID=".$result[rand(0, count($result)-1)];
             }
             else{
                $whereSQL.=" OR s.productID=".$result[rand(0, count($result)-1)];
             }      
          }
          
          $result = array();
            $q = db_query("select s.productID, s.name, s.Price, s.enabled, t.filename FROM ".PRODUCTS_TABLE." AS s LEFT JOIN ".PRODUCT_PICTURES."
            AS t on (s.default_picture=t.photoID AND s.productID=t.productID) WHERE ".$whereSQL);
           
            while ($row = db_fetch_row($q))
          {

                  if (strlen($row["filename"])>0 && file_exists( "data/small/".$row["filename"])){
                                            $row["filename"] = "small/".$row["filename"];
                                            $row["cena"] = $row["Price"];
                                            $row["Price"] = show_price($row["Price"]);
                                            $result[] = $row;

                  }else{
                                            $row["filename"] = "empty.gif";
                                            $row["cena"] = $row["Price"];
                                            $row["Price"] = show_price($row["Price"]);
                                            $result[] = $row;
                  }
          }

            $smarty->assign("rand_product", $result);

Заменить в "core/tpl/user/шаблон/blocks/newprstatic.tpl.html" news_products на rand_product

Теперь блок новинок будет выводить случайные товары

---------- Сообщение объединено ----------

а вообще можно скопировать код из newprstatic.tpl.html в например randproduct.tpl.html и добавить новый блок из файла :)
  • 0

#3 vsupport

    Продвинутый пользователь

  • Администраторы
  • 758 сообщений
Репутация: 31
Ассистент

Отправлено 22 May 2011 - 11:36 AM

Спасибо за ваше предложение!!!
  • 0

#4 sta1ker

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 84 сообщений
Репутация: 3
Начинающий

Отправлено 22 May 2011 - 12:05 PM

admin, можете переписать первый пост, а то у людей не получится
  • 0

#5 vsupport

    Продвинутый пользователь

  • Администраторы
  • 758 сообщений
Репутация: 31
Ассистент

Отправлено 22 May 2011 - 04:05 PM

первый пост обновлен
  • 0

#6 Blanc

    Новичок

  • Пользователи
  • Pip
  • 3 сообщений
Репутация: 0
Начинающий

Отправлено 15 December 2011 - 12:11 AM

В предлагаемом выше коде есть ошибка. Количество выводимого товара не превысит заданного в переменной $cifra, в данном случае 8-ми. В это же время счетчик может вывести для показа менее 8 товаров, хотя товара в наличии гораздо больше.
Я не программист, как решить - не знаю. Просто указываю на ошибку в коде счетчика.

Могу дать часть кода файла home.php, который выводит случайный товар не со всего магазина, а только из определенной категории (например 3-й), который есть на складе или доступен под заказ.


$cifra = 5; //общий блок случайных товаров в категории ID=3
$result = array();
$whereSQL="";

$q = db_query("select productID FROM ".PRODUCTS_TABLE." WHERE categoryID=3 AND enabled=1 AND in_stock!=0");

while ($row = db_fetch_row($q))$result[] = $row[0];

for($i=0; $i<$cifra; $i++){
if($whereSQL==""){
$whereSQL.=" s.productID=".$result[rand(0, count($result)-1)];
}
else{
$whereSQL.=" OR s.productID=".$result[rand(0, count($result)-1)];
}
}
$result = array();
$q = db_query("select s.productID, s.name, s.Price, s.enabled, t.filename FROM ".PRODUCTS_TABLE." AS s LEFT JOIN ".PRODUCT_PICTURES."
AS t on (s.default_picture=t.photoID AND s.productID=t.productID) WHERE ".$whereSQL);

while ($row = db_fetch_row($q))
{
if (strlen($row["filename"])>0 && file_exists( "data/small/".$row["filename"])){
$row["filename"] = "small/".$row["filename"];
$row["cena"] = $row["Price"];
$row["Price"] = show_price($row["Price"]);
$result[] = $row;
}else{
$row["filename"] = "empty.gif";
$row["cena"] = $row["Price"];
$row["Price"] = show_price($row["Price"]);
$result[] = $row;
}
}
$smarty->assign("rand_product_3", $result);
Естественно, делаем копию блока rand_static.tpl.html, переименовываем и меняем в нем все rand_product на rand_product_3. Вставляем блок на нужной странице.
  • 0

#7 SHvonderSiN

    Пользователь

  • Пользователи
  • PipPip
  • 19 сообщений
Репутация: 0
Начинающий

Отправлено 16 January 2012 - 04:43 AM

реализовал это по своему... вывел в шапке сайта... в блоке как то не очень было... спасибо за дополнение. кому интересно как выглядит смотрите тут
  • 0

#8 lagaz

    Пользователь

  • Assistent vsupport.club
  • PipPip
  • 15 сообщений
Репутация: 0
Начинающий

Отправлено 27 April 2013 - 12:42 PM

В предлагаемом выше коде есть ошибка. Количество выводимого товара не превысит заданного в переменной $cifra, в данном случае 8-ми. В это же время счетчик может вывести для показа менее 8 товаров, хотя товара в наличии гораздо больше.
Я не программист, как решить - не знаю. Просто указываю на ошибку в коде счетчика.


не подскажите, как устранить эту ошибку??

выводится для показа либо 6 товаров, либо 7, либо 8. а нужно чтоб всегда выводилось 8
  • 0

#9 Valentin

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 146 сообщений
Репутация: 6
Начинающий
  • ГородШахты Ростовская область

Отправлено 28 December 2016 - 08:06 PM

В предлагаемом выше коде есть ошибка. Количество выводимого товара не превысит заданного в переменной $cifra, в данном случае 8-ми. В это же время счетчик может вывести для показа менее 8 товаров, хотя товара в наличии гораздо больше.
Я не программист, как решить - не знаю. Просто указываю на ошибку в коде счетчика.

Могу дать часть кода файла home.php, который выводит случайный товар не со всего магазина, а только из определенной категории (например 3-й), который есть на складе или доступен под заказ.


$cifra = 5; //общий блок случайных товаров в категории ID=3
$result = array();
$whereSQL="";

$q = db_query("select productID FROM ".PRODUCTS_TABLE." WHERE categoryID=3 AND enabled=1 AND in_stock!=0");

while ($row = db_fetch_row($q))$result[] = $row[0];

for($i=0; $i<$cifra; $i++){
if($whereSQL==""){
$whereSQL.=" s.productID=".$result[rand(0, count($result)-1)];
}
else{
$whereSQL.=" OR s.productID=".$result[rand(0, count($result)-1)];
}
}
$result = array();
$q = db_query("select s.productID, s.name, s.Price, s.enabled, t.filename FROM ".PRODUCTS_TABLE." AS s LEFT JOIN ".PRODUCT_PICTURES."
AS t on (s.default_picture=t.photoID AND s.productID=t.productID) WHERE ".$whereSQL);

while ($row = db_fetch_row($q))
{
if (strlen($row["filename"])>0 && file_exists( "data/small/".$row["filename"])){
$row["filename"] = "small/".$row["filename"];
$row["cena"] = $row["Price"];
$row["Price"] = show_price($row["Price"]);
$result[] = $row;
}else{
$row["filename"] = "empty.gif";
$row["cena"] = $row["Price"];
$row["Price"] = show_price($row["Price"]);
$result[] = $row;
}
}
$smarty->assign("rand_product_3", $result);
Естественно, делаем копию блока rand_static.tpl.html, переименовываем и меняем в нем все rand_product на rand_product_3. Вставляем блок на нужной странице.

Доброго всем времени суток.
Понимаю что этой теме уже много лет, но понадобилось вывести товары из конкретной категории в отдельном блоке сразу все.
Представленный кусок кода из шестого поста мог бы решить задачу, но в shopcms 3.1.3 он не желает работать.
Делал по топик посту:
После удаления начала и конца комментария, в конец home.php добавил кусок кода из шестого поста.
В результате белый экран.
В первом посте представленно два варианта подобного кода, поэтому в шестом посте счёл фрагмент аналогичным.
  • 0
Социально-информационный проект Nvda.ru о бесплатной программе экранного доступа Nvda для незрячих и слабовидящих.
С уважением ко всем Valentin-Kupriyanov.ru

#10 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 29 December 2016 - 12:34 PM

понадобилось вывести товары из конкретной категории в отдельном блоке сразу все.

Ниже более простой вариант. число 123 замените на номер нужной категории.

$result = array();
$q = db_query("SELECT s.productID, s.name, s.Price, s.enabled, t.filename FROM ".PRODUCTS_TABLE." AS s LEFT JOIN ".PRODUCT_PICTURES." AS t ON (s.default_picture=t.photoID AND s.productID=t.productID) WHERE categoryID=123");
while ($row = db_fetch_row($q))
{
$row["filename"] = (strlen($row["filename"])>0 && file_exists( "data/small/".$row["filename"]))?("small/".$row["filename"]):"empty.gif";
$row["cena"] = $row["Price"];
$row["Price"] = show_price($row["Price"]);
$result[] = $row;
}
$smarty->assign("rand_product_3", $result);

После удаления начала и конца комментария, в конец home.php добавил кусок кода из шестого поста.
В результате белый экран.

Белый экран говорит лишь о том, что сервер не вернул браузеру никаких данных. Т.е., скорее всего, где-то ошибка в коде.
А вот какая ошибка сказать по белому экрану довольно сложно.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)