#1 2010-08-29 23:28

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

How-To: просмотренные пользователем товары

Если кому-то интересно, вот рецепт, как добавить в Ваш магазин список просмотренных посетителем товаров. Пример можно посмотреть у меня на сайте (должен быть в подписи), если походить по страницам товаров, слева появляется табичка *Просмотренные*.

UPD: добавил картинки. Новый код пометил коментариями, если картинки не нужны, его можно просто вырезать. Обратите внимание на второй добавляемый блок кода, там в коментарии есть обьяснение, как менять картинки на большие или маленькие...

Итак, для начала нужно добавить запоминание посещенных товаров. Для этого открываем /includes/product_detailed.php и правим его таким образом:

После кода

Код:

 if (isset($productID) && $productID>0)
{

вставляем:
           

Код:

 if (!isset($_SESSION["watched"]))
                {
                    $_SESSION["watched"] = array();
                    $_SESSION["watched_id"] = array();
                    $_SESSION["watched_pic"] = array();         // Строка для записи изображения
                }

Далее, немного ниже, после строчки

Код:

if ($a) //product found
{

Добавляем:

Код:

$temp=array();
$p=5-1;
$temp[]=$a[1];
for ($i=0; $i<$p && i<count($_SESSION["watched"]); $i++) {
    if($a[1]!=$_SESSION["watched"][$i]) $temp[]=$_SESSION["watched"][$i];
    else $p++;}
$_SESSION["watched"]=$temp;

$p=5-1;
$temp=array();
$temp[]=$a[11];
for ($i=0; $i<$p && i<count($_SESSION["watched_id"]); $i++) {
    if($a[11]!=$_SESSION["watched_id"][$i]) $temp[]=$_SESSION["watched_id"][$i];
    else $p++;}
$_SESSION["watched_id"]=$temp;

                     // Код, добавляющий картинки
$p=5-1;
$temp=array();

$temp[]=$a[5];  //  $a[5] - обычное изображение, меняем на: $a[7] - маленькое, $a[9] - большое

for ($i=0; $i<$p && i<count($_SESSION["watched_pic"]); $i++) { 
    if($a[11]!=$_SESSION["watched_pic"][$i]) $temp[]=$_SESSION["watched_pic"][$i];
    else $p++;}
$_SESSION["watched_pic"]=$temp;
                     // Конец кода

$smarty->assign("w", $_SESSION["watched"]);
$smarty->assign("w_id", $_SESSION["watched_id"]);
$smarty->assign("w_pic", $_SESSION["watched_pic"]);     // и опять картинки)

Далее, открываем index.php в корневой папке сайта и после строки $smarty_mail = new Smarty; //for e-mails
добавляем следующий код:

Код:

if (isset($_SESSION["watched"])) $smarty->assign("w", $_SESSION["watched"]);
if (isset($_SESSION["watched_id"])) $smarty->assign("w_id", $_SESSION["watched_id"]);
if (isset($_SESSION["watched_pic"])) $smarty->assign("w_pic", $_SESSION["watched_pic"]);       // Картинки

Все, теперь в переменных $w, $w_id и $w_pic будут храниться соответсвенно названия, id и название файла с картинкой последних просмотренных посетителем товаров.
Например, чтобы вывести список со ссылками на эти товары, достаточно кода:

Код:

{section name=i loop=5}{if $w[i]}
    <img src="products_pictures/{$w_pic[i]}" alt="{$w[i]}">
    <a href="index.php?productID={$w_id[i]}">{$w[i]}</a><br />
{/if}{/section}

Сохраняется максимум 5 страниц, если нужно другое число - просто поменяйте в четырех местах 5 на нужные вам числа.

Отредактировано buzb (2010-08-30 13:19)

Неактивен

 

#2 2010-08-30 12:17

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

Re: How-To: просмотренные пользователем товары

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

Отредактировано nictboom (2010-08-30 12:18)

Неактивен

 

#3 2010-08-30 13:13

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

Re: How-To: просмотренные пользователем товары

Добавил картинки, смотрите описание способа...

Неактивен

 

#4 2010-08-31 20:56

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

Re: How-To: просмотренные пользователем товары

Я только за! Только не вижу, как тут переименовать тему, так что предлагаю это все просто перенести в новую...

Неактивен

 

#5 2011-04-08 16:22

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

Re: How-To: просмотренные пользователем товары

Отличное дополнение к магазину....

Только с картинками трабл.

Когда переходишь на товар уже находящийся в списке просмотренных товаров, то ссылка переходит в начало списка (как и задумано), а вот картинки начинают не совпадать с ссылкой на страничку с товаром. И происходит "разносортица".

Как можно устранить этот трабл ?

-------------------------
Нашел ошибочку:
в коде

Код:

 if($a[11]!=$_SESSION["watched_pic"][$i]) $temp[]=$_SESSION["watched_pic"][$i];

$a[11] нужно поменять на соответсвующую $a[X] картинки которую вы выбрали.

Отредактировано favn (2011-04-10 12:14)

Неактивен

 

#6 2011-04-12 16:27

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

Re: How-To: просмотренные пользователем товары

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

Неактивен

 

#7 2011-04-15 21:48

Мяф
Пользователь

Re: How-To: просмотренные пользователем товары

favn написал:

Нашел ошибочку:
в коде

Код:

 if($a[11]!=$_SESSION["watched_pic"][$i]) $temp[]=$_SESSION["watched_pic"][$i];

$a[11] нужно поменять на соответсвующую $a[X] картинки которую вы выбрали.

А что означает $a[X] картинки, которую выбрали? id товара или - ?

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

Неактивен

 

#8 2011-04-23 01:16

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

Re: How-To: просмотренные пользователем товары

buzb написал:

Если кому-то интересно, вот рецепт, как добавить в Ваш магазин список просмотренных посетителем товаров. Пример можно посмотреть у меня на сайте (должен быть в подписи), если походить по страницам товаров, слева появляется табичка *Просмотренные*.

UPD: добавил картинки. Новый код пометил коментариями, если картинки не нужны, его можно просто вырезать. Обратите внимание на второй добавляемый блок кода, там в коментарии есть обьяснение, как менять картинки на большие или маленькие...

Итак, для начала нужно добавить запоминание посещенных товаров. Для этого открываем /includes/product_detailed.php и правим его таким образом:

После кода

Код:

 if (isset($productID) && $productID>0)
{

вставляем:
           

Код:

 if (!isset($_SESSION["watched"]))
                {
                    $_SESSION["watched"] = array();
                    $_SESSION["watched_id"] = array();
                    $_SESSION["watched_pic"] = array();         // Строка для записи изображения
                }

Далее, немного ниже, после строчки

Код:

if ($a) //product found
{

Добавляем:

Код:

$temp=array();
$p=5-1;
$temp[]=$a[1];
for ($i=0; $i<$p && i<count($_SESSION["watched"]); $i++) {
    if($a[1]!=$_SESSION["watched"][$i]) $temp[]=$_SESSION["watched"][$i];
    else $p++;}
$_SESSION["watched"]=$temp;

$p=5-1;
$temp=array();
$temp[]=$a[11];
for ($i=0; $i<$p && i<count($_SESSION["watched_id"]); $i++) {
    if($a[11]!=$_SESSION["watched_id"][$i]) $temp[]=$_SESSION["watched_id"][$i];
    else $p++;}
$_SESSION["watched_id"]=$temp;

                     // Код, добавляющий картинки
$p=5-1;
$temp=array();

$temp[]=$a[5];  //  $a[5] - обычное изображение, меняем на: $a[7] - маленькое, $a[9] - большое

for ($i=0; $i<$p && i<count($_SESSION["watched_pic"]); $i++) { 
    if($a[11]!=$_SESSION["watched_pic"][$i]) $temp[]=$_SESSION["watched_pic"][$i];
    else $p++;}
$_SESSION["watched_pic"]=$temp;
                     // Конец кода

$smarty->assign("w", $_SESSION["watched"]);
$smarty->assign("w_id", $_SESSION["watched_id"]);
$smarty->assign("w_pic", $_SESSION["watched_pic"]);     // и опять картинки)

Далее, открываем index.php в корневой папке сайта и после строки $smarty_mail = new Smarty; //for e-mails
добавляем следующий код:

Код:

if (isset($_SESSION["watched"])) $smarty->assign("w", $_SESSION["watched"]);
if (isset($_SESSION["watched_id"])) $smarty->assign("w_id", $_SESSION["watched_id"]);
if (isset($_SESSION["watched_pic"])) $smarty->assign("w_pic", $_SESSION["watched_pic"]);       // Картинки

Все, теперь в переменных $w, $w_id и $w_pic будут храниться соответсвенно названия, id и название файла с картинкой последних просмотренных посетителем товаров.
Например, чтобы вывести список со ссылками на эти товары, достаточно кода:

Код:

{section name=i loop=5}{if $w[i]}
    <img src="products_pictures/{$w_pic[i]}" alt="{$w[i]}">
    <a href="index.php?productID={$w_id[i]}">{$w[i]}</a><br />
{/if}{/section}

Сохраняется максимум 5 страниц, если нужно другое число - просто поменяйте в четырех местах 5 на нужные вам числа.

Все замечательно, только подскажите у меня последняя версия Shop-skript и как-то в папке /includes/product_detailed.php НЕТ этого файла(

Неактивен

 

#9 2011-04-25 12:50

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

Re: How-To: просмотренные пользователем товары

а для webasyst можно применить? как?

Неактивен

 

#10 2011-04-26 00:37

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

Re: How-To: просмотренные пользователем товары

buzb подскажите пожалуйста, а как сделать чтобы сама надпись "Просмотренные товары" появлялась только если таких товаров больше 0, как сделано у Вас на сайте в подписи?

Неактивен

 

#11 2011-04-26 18:00

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

Re: How-To: просмотренные пользователем товары

Жах, идея хорошая, реализация отвратительная:
1. Вы совершенно забыли что такое алгоритм (должен быть простым и универсальным)
У вас же простым его не назовеш, а про универсальность вообше говорить не приходится допустим удалили това а он у вас так и будет висеть в просмотреных, а его уже ислед на сайте простыл
2. Расковыряли все ядро а если потом обновляться опять ковырять?

я бы делал так
создал файл myview.php и ложим его в паку includes
с содержимым

Код:

<?php
 if (isset($productID) && $productID>0)
 {
    if (!isset($_SESSION["watched"]))
    $_SESSION["watched"]=$productID;
    elseif (!preg_match('/(^|,)'.$productID.'(,|$)/',$_SESSION["watched"])) $_SESSION["watched"] .=','.$productID;
 }
if (isset($_SESSION["watched"]))
{
$q = db_query('select productID,name, hurl,picture from '.PRODUCTS_TABLE.' where enabled=1 and  productID in ('.$_SESSION["watched"].') ORDER BY Field(productID,'.$_SESSION["watched"].')');
$result = array();
 while ($row = db_fetch_row($q))
 {
    if (!file_exists("./products_pictures/".$row[3]) || $row[3] == "")
    {$row[3] = "";}
   else 
    {
     $s = rtrim($row[3], '.jpg');
     $row[3] = $s."-H.jpg"; #Картика для хитов, $row[3] = $s."-SC.jpg"; - картинка которую мы видем в корзине (эти картики из лего не знаю каие имена в фри но идея должна быть понятна)
    }
    if ($row[2] != "" && CONF_CHPU)  $row[2] = REDIRECT_PRODUCT."/".$row[2]; else #Эта строка нужна если у вас лего если фри то без нее
   $row[2] = "index.php?productID=".$row[0];
  $result[]=$row;
 }
$smarty->assign('watched',$result);
unset($result,$row);
}
?>

теперь делаем шаблон
создаем в паке темы фаил watched.tpl.html
такого содержимого

Код:

<div class="box">
        <div class="top">" />Просмотренные</div>
        <div class="top_l"></div> 
        <div class="middle">
          <ul>
      {section name=i loop=5}
            <li><a href="{$watched[i][[2]}">{$watched[i][[2]}</a></li>
          {/section}
          </ul>
        </div>
        <div class="bottom">&nbsp;</div>
</div>

в "{$watched[i][[3]} картинка


и теперь в index.tpl.html в правую или левую колонку или куда там вам надо по дизайну вставляем
{if $watched}
{include file="watched.tpl.html"}
{/if}

Как видете сдесь мы редактируем только шаблон и не затрагиваем файлы ядра

Отредактировано pehser (2011-04-26 18:31)

Неактивен

 

#12 2011-04-26 22:51

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

Re: How-To: просмотренные пользователем товары

Скажите как сделали форму акции и скидки заранее благодарен!

Неактивен

 

#13 2011-04-27 00:30

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

Re: How-To: просмотренные пользователем товары

да как-как, спец цена - вот вам и акция(чуть ковырнуть home.tpl.html, можно и в category перенести), а скидки в скрипте предусмотрены от суммы(либо через доп.параметры импровизировать, либо через "условия").

Отредактировано nictboom (2011-04-27 00:31)

Неактивен

 

#14 2011-04-27 10:58

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

Re: How-To: просмотренные пользователем товары

pehser плиз подскажите как это реализовать в webasyst?
попробовал вставить код из 11-го поста
не выводится...
ps. myview.php клал и в /includes/ и в /published/SC/html/scripts/includes/ - безрезультатно

Неактивен

 

#15 2011-04-28 13:02

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

Re: How-To: просмотренные пользователем товары

Hunter написал:

pehser плиз подскажите как это реализовать в webasyst?
попробовал вставить код из 11-го поста
не выводится...
ps. myview.php клал и в /includes/ и в /published/SC/html/scripts/includes/ - безрезультатно

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

Отредактировано pehser (2011-04-28 13:02)

Неактивен

 

#16 2011-04-28 15:14

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

Re: How-To: просмотренные пользователем товары

pehser написал:

Hunter написал:

pehser плиз подскажите как это реализовать в webasyst?
попробовал вставить код из 11-го поста
не выводится...
ps. myview.php клал и в /includes/ и в /published/SC/html/scripts/includes/ - безрезультатно

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

эх, отбашляли то отбашляли, уже спрашивали про эту функцию у них, а воз и ныне там к сожалению...
жаль

Неактивен

 

#17 2011-04-29 11:56

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

Re: How-To: просмотренные пользователем товары

Если кому интересно. У меня плагин, предложенный pehser'ом, завелся в немного измененном виде.

Код:

<?php
 if (isset($productID) && $productID>0)
 {
    if (!isset($_SESSION["watched"]))
    $_SESSION["watched"]=$productID;
    elseif (!preg_match('/(^|,)'.$productID.'(,|$)/',$_SESSION["watched"])) $_SESSION["watched"] .=','.$productID;
 }
if (isset($_SESSION["watched"]))
{
$q = db_query('select productID, name, picture from '.PRODUCTS_TABLE.' where enabled=1 and productID in ('.$_SESSION["watched"].') ORDER BY name ASC');
$result=array();
while($row = db_fetch_row($q))
{ $result[]=$row;
}
$smarty->assign('watched',$result);
}
unset($result,$row);
?>

Единственная беда. Он формирует массив данных обо всех товарах, просмотренных пользователем. Интересно, можно ли как-то сделать, чтобы выводились последние просмотренные товары. У меня стоит возможность показывать последние восемь просмотренных товаров, но если посетитель посмотрел, например, десять, то он увидит только первые восемь из списка, отсортированного по имени. Но, в принципе, это не критично.

Неактивен

 

#18 2011-05-15 10:31

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

Re: How-To: просмотренные пользователем товары

У меня вот такую ошибку выдает: Fatal error: Smarty: [in watched.tpl.html line 7]: syntax error: unrecognized tag: $watched[i][[2] (smarty_compiler.class.php, line 417) in Z\home\.....\www\smarty\smarty_compiler.class.php on line 2062

Неактивен

 

#19 2011-05-15 17:55

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

Re: How-To: просмотренные пользователем товары

maks1m1 написал:

У меня вот такую ошибку выдает: Fatal error: Smarty: [in watched.tpl.html line 7]: syntax error: unrecognized tag: $watched[i][[2] (smarty_compiler.class.php, line 417) in Z\home\.....\www\smarty\smarty_compiler.class.php on line 2062

поправьте/удалите лишние [ в watched.tpl.html: {$watched[i][[2]}

Неактивен

 

#20 2011-05-15 22:32

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

Re: How-To: просмотренные пользователем товары

Спасибо! работает но не особо красиво... ссылки выдает типа index.php?productID=137, и не отображает картинки.

Неактивен

 

#21 2011-05-16 23:22

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

Re: How-To: просмотренные пользователем товары

При вот таком myview.php

Код:

<?php
 if (isset($productID) && $productID>0)
 {
    if (!isset($_SESSION["watched"]))
    $_SESSION["watched"]=$productID;
    elseif (!preg_match('/(^|,)'.$productID.'(,|$)/',$_SESSION["watched"])) $_SESSION["watched"] .=','.$productID;
 }
if (isset($_SESSION["watched"]))
{
$q = db_query('select productID, thumbnail from '.PRODUCTS_TABLE.' where enabled=1 and productID in ('.$_SESSION["watched"].') ORDER BY name ASC');
$result=array();
while($row = db_fetch_row($q))
{ $result[]=$row;
}
$smarty->assign('watched',$result);
}
unset($result,$row);
?>

или

Код:

<?php
 if (isset($productID) && $productID>0)
 {
    if (!isset($_SESSION["watched"]))
    $_SESSION["watched"]=$productID;
    elseif (!preg_match('/(^|,)'.$productID.'(,|$)/',$_SESSION["watched"])) $_SESSION["watched"] .=','.$productID;
 }
if (isset($_SESSION["watched"]))
{
$q = db_query('select productID, name, thumbnail from '.PRODUCTS_TABLE.' where enabled=1 and  productID in ('.$_SESSION["watched"].') ORDER BY Field(productID,'.$_SESSION["watched"].')');
$result = array();
 while ($row = db_fetch_row($q))
 {
    if (!file_exists("./products_pictures/".$row[3]) || $row[3] == "")
    {$row[3] = "";}
   else 
    {
     $s = rtrim($row[3], '.jpg');
     $row[3] = $s.".jpg"; #Картика для хитов, $row[3] = $s."-SC.jpg"; - картинка которую мы видем в корзине (эти картики из лего не знаю каие имена в фри но идея должна быть понятна)
    }
    if ($row[2] != "" && CONF_CHPU)  $row[2] = REDIRECT_PRODUCT."/".$row[2]; else #Эта строка нужна если у вас лего если фри то без нее
   $row[2] = "index.php?productID=".$row[0];
  $result[]=$row;
 }
$smarty->assign('watched',$result);
unset($result,$row);
}
?>

и вот таком watched.tpl.html

Код:

{section name=i loop=5}
    <li>
        <a href="{$watched[i][2]}" title="{$watched[i][1]}">{$watched[i][1]}</a><br />
        <img src="./products_pictures/{$watched[i][3]}" alt="{$watched[i][1]}" />
    </li>
{/section}

не работает.

Неактивен

 

#22 2011-05-17 10:53

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

Re: How-To: просмотренные пользователем товары

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

Неактивен

 

#23 2011-05-18 00:02

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

Re: How-To: просмотренные пользователем товары

Движок Shop-Script FREE
Не работает, т.е. ссылки выдает типа index.php?productID=137, или такие http://blabla/REDIRECT_PRODUCT/134t_blablab_enl_enl.jpg и не отображает картинки.

Неактивен

 

#24 2011-05-18 01:46

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

Re: How-To: просмотренные пользователем товары

попробуй так

Код:

<?php
 if (isset($productID) && $productID>0)
 {
    if (!isset($_SESSION["watched"]))
    $_SESSION["watched"]=$productID;
    elseif (!preg_match('/(^|,)'.$productID.'(,|$)/',$_SESSION["watched"])) $_SESSION["watched"] .=','.$productID;
 }
if (isset($_SESSION["watched"]))
{
$q = db_query('select productID, name, thumbnail from '.PRODUCTS_TABLE.' where enabled=1 and productID in ('.$_SESSION["watched"].') ORDER BY name ASC');
$result=array();
while($row = db_fetch_row($q))
{ $result[]=$row;
}
$smarty->assign('watched',$result);
}
unset($result,$row);
?>

Код:

{section name=i loop=5}
    <li>
        <a href="index.php?productID={$watched[i][0]}" title="{$watched[i][1]}">{$watched[i][1]}</a><br />
        <img src="./products_pictures/{$watched[i][2]}" alt="{$watched[i][1]}" />
    </li>
{/section}

Неактивен

 

#25 2011-05-18 09:49

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

Re: How-To: просмотренные пользователем товары

Теперь работает все. Спасибо огромное!

Неактивен

 

Board footer

Powered by PunBB