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


Правила форума

Внимание!!! Если не можете скачать, пожалуйста ознакомьтесь с условиями получения доступа с файлам форума. Правила форума


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


Сообщений в теме: 9

#1 vsupport

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

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

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

Открываем фаил - \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 и добавить новый блок из файла :)

#2 sta1ker

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

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

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

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

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

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

К тому же 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 и добавить новый блок из файла :)

#3 vsupport

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

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

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

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

#4 sta1ker

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

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

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

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

#5 vsupport

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

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

Отправлено 22 мая 2011 - 16:05

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

#6 Blanc

    Новичок

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

Отправлено 15 декабря 2011 - 00:11

В предлагаемом выше коде есть ошибка. Количество выводимого товара не превысит заданного в переменной $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. Вставляем блок на нужной странице.

#7 SHvonderSiN

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

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

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

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

#8 lagaz

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

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

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

Цитата

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

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

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

#9 Valentin

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

  • Download User
  • PipPipPip
  • 141 сообщений
Репутация: 5
Начинающий
  • ГородШахты Ростовская область

Отправлено 28 декабря 2016 - 20:06

Просмотр сообщенияBlanc (15 декабря 2011 - 00:11) писал:

В предлагаемом выше коде есть ошибка. Количество выводимого товара не превысит заданного в переменной $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 добавил кусок кода из шестого поста.
В результате белый экран.
В первом посте представленно два варианта подобного кода, поэтому в шестом посте счёл фрагмент аналогичным.
Информационный сервис о бесплатной программе экранного доступа Http://nvda.ru для незрячих и слабовидящих.
С уважением ко всем http://valentin-kupriyanov.ru

#10 badisoft

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

  • VIP
  • 4 986 сообщений
Репутация: 761
Мастер

Отправлено 29 декабря 2016 - 12:34

Цитата

понадобилось вывести товары из конкретной категории в отдельном блоке сразу все.
Ниже более простой вариант. число 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 добавил кусок кода из шестого поста.
В результате белый экран.
Белый экран говорит лишь о том, что сервер не вернул браузеру никаких данных. Т.е., скорее всего, где-то ошибка в коде.
А вот какая ошибка сказать по белому экрану довольно сложно.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)