Вы не авторизованы.
Если кому-то интересно, вот рецепт, как добавить в Ваш магазин список просмотренных посетителем товаров. Пример можно посмотреть у меня на сайте (должен быть в подписи), если походить по страницам товаров, слева появляется табичка *Просмотренные*.
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)
Неактивен
да, тема хорошая. удобней посетителю всё таки перейти по ссылке просмотренного товара к заказу или повторному просмотру, чем опять шерстить каталог и категории. +++ )
чуть подправить бы и вывести картинку.)
Отредактировано nictboom (2010-08-30 12:18)
Неактивен
Добавил картинки, смотрите описание способа...
Неактивен
Я только за! Только не вижу, как тут переименовать тему, так что предлагаю это все просто перенести в новую...
Неактивен
Отличное дополнение к магазину....
Только с картинками трабл.
Когда переходишь на товар уже находящийся в списке просмотренных товаров, то ссылка переходит в начало списка (как и задумано), а вот картинки начинают не совпадать с ссылкой на страничку с товаром. И происходит "разносортица".
Как можно устранить этот трабл ?
-------------------------
Нашел ошибочку:
в коде
if($a[11]!=$_SESSION["watched_pic"][$i]) $temp[]=$_SESSION["watched_pic"][$i];
$a[11] нужно поменять на соответсвующую $a[X] картинки которую вы выбрали.
Отредактировано favn (2011-04-10 12:14)
Неактивен
buzb, делаю интернет-магазин, и хочу использовать этот код. подскажи куда его нужно вставлять??? не могу понять((( отпиши как можно быстрее. буду очень благодарен
Неактивен
favn написал:
Нашел ошибочку:
в кодеКод:
if($a[11]!=$_SESSION["watched_pic"][$i]) $temp[]=$_SESSION["watched_pic"][$i];$a[11] нужно поменять на соответсвующую $a[X] картинки которую вы выбрали.
А что означает $a[X] картинки, которую выбрали? id товара или - ?
Еще ошибка в том, что если просматривать один и тот же товар, то он добавляется в список просмотренных снова и снова, вытесняя остальные, нужно убрать повторы.
Неактивен
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 НЕТ этого файла(
Неактивен
а для webasyst можно применить? как?
Неактивен
buzb подскажите пожалуйста, а как сделать чтобы сама надпись "Просмотренные товары" появлялась только если таких товаров больше 0, как сделано у Вас на сайте в подписи?
Неактивен
Жах, идея хорошая, реализация отвратительная:
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"> </div>
</div>в "{$watched[i][[3]} картинка
и теперь в index.tpl.html в правую или левую колонку или куда там вам надо по дизайну вставляем
{if $watched}
{include file="watched.tpl.html"}
{/if}
Как видете сдесь мы редактируем только шаблон и не затрагиваем файлы ядра
Отредактировано pehser (2011-04-26 18:31)
Неактивен
Скажите как сделали форму акции и скидки заранее благодарен!
Неактивен
да как-как, спец цена - вот вам и акция(чуть ковырнуть home.tpl.html, можно и в category перенести), а скидки в скрипте предусмотрены от суммы(либо через доп.параметры импровизировать, либо через "условия").
Отредактировано nictboom (2011-04-27 00:31)
Неактивен
pehser плиз подскажите как это реализовать в webasyst?
попробовал вставить код из 11-го поста
не выводится...
ps. myview.php клал и в /includes/ и в /published/SC/html/scripts/includes/ - безрезультатно
Неактивен
Hunter написал:
pehser плиз подскажите как это реализовать в webasyst?
попробовал вставить код из 11-го поста
не выводится...
ps. myview.php клал и в /includes/ и в /published/SC/html/scripts/includes/ - безрезультатно
подержку webasyst не осушетвляю да и ветка не подходяшяя, долбайте тех подержку аситента вы же им денги отбашляли и по условию они оказвают тех подержку
Отредактировано pehser (2011-04-28 13:02)
Неактивен
pehser написал:
Hunter написал:
pehser плиз подскажите как это реализовать в webasyst?
попробовал вставить код из 11-го поста
не выводится...
ps. myview.php клал и в /includes/ и в /published/SC/html/scripts/includes/ - безрезультатноподержку webasyst не осушетвляю да и ветка не подходяшяя, долбайте тех подержку аситента вы же им денги отбашляли и по условию они оказвают тех подержку
эх, отбашляли то отбашляли, уже спрашивали про эту функцию у них, а воз и ныне там к сожалению...
жаль
Неактивен
Если кому интересно. У меня плагин, предложенный 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);
?>Единственная беда. Он формирует массив данных обо всех товарах, просмотренных пользователем. Интересно, можно ли как-то сделать, чтобы выводились последние просмотренные товары. У меня стоит возможность показывать последние восемь просмотренных товаров, но если посетитель посмотрел, например, десять, то он увидит только первые восемь из списка, отсортированного по имени. Но, в принципе, это не критично.
Неактивен
У меня вот такую ошибку выдает: 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
Неактивен
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]}
Неактивен
Спасибо! работает но не особо красиво... ссылки выдает типа index.php?productID=137, и не отображает картинки.
Неактивен
При вот таком 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}не работает.
Неактивен
ваше описание звучит примерно так, "трамвай не едит" туже хочется спросить какой трамвай куда не едит ...
Выб хоть указали что за движок фри или лего и описали что значит не работает
Неактивен
Движок Shop-Script FREE
Не работает, т.е. ссылки выдает типа index.php?productID=137, или такие http://blabla/REDIRECT_PRODUCT/134t_blablab_enl_enl.jpg и не отображает картинки.
Неактивен
попробуй так
<?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}Неактивен
Теперь работает все. Спасибо огромное!
Неактивен