Писать на форуме DIAFAN.CMS могут только зарегистрированные пользователи. Войдите или зарегистрируйтесь.
Последние просмотренные товары
-
03 июня 2013 г.
-
Подскажите, схему как организовать хранениение списка последних просмотренных товаров, ну и потом вывода его в блоке, ну это наверное уже не сложно.
А вообще, было бы полезно и познавательно в документации в разделе практических примеров привести скелет примера, как сделать сохранение последних XX , просмотренных пользователем товаров, с возможностью настройки этого количества XX через личный кабинет, а также
выводом блока "последние просмотренные товары " -
-
-
-
04 июня 2013 г.
-
Все ж просто))
Делаем таблицу, при вызове функции _id пишем в нее нужные данные.
затем создаем шаблонный тег, где эти данные выводим.
В документации собственно все это есть, надо только немножко подумать. -
-
-
-
04 июня 2013 г. , редакция: 04 июня 2013 г.
-
Да не, можно без таблицы, можно сессией обойтись, думаю.
Давайте учиться думать алгоритм.
Первый шаг: когда пользователь открывает товар, он ему должен запомниться.
Т.е. идем в /modules/shop/shop.model.php, находим тамКодpublic function id() //генерирует данные для отображения карточки товара
id товара у нас это $this->diafan->show
Второй шаг: где-нибудь в этой функции собачим код:Кодif ( ! isset($_SESSION['shop_history']))
{
$_SESSION['shop_history'] = array();
}
if ( ! in_array($this->diafan->show, $_SESSION['shop_history']))
{
$_SESSION['shop_history'][] = $this->diafan->show;
}
Третий шаг: останется только создать шаблонный тег, типа insert name=show_lastview_goods
где сделать проверкуКодif ( ! empty($_SESSION['shop_history']))
{ ... }
затем перебор массива $_SESSION['shop_history']
и в цикле запросики в БД, выдергивая по готовым id наши товары.
Четвертый шаг: вывод товаров в нужном оформлении. -
-
-
-
05 июня 2013 г.
-
Виталий! Если бы был приз за самого полезного участника форума - Вы были бы на первом месте!
Спасибо! Вы изложили как раз все так как мне надо, кратко и не влезая в детали, которые уже можно посмотреть из документации. Постараюсь в ближайшие дни реализовать. -
-
-
-
- Denis (Drachoon)
- 154
-
06 июня 2013 г.
-
Хех. Конечно. Виталий разработчик. Эту кухню всяко лучше знает чем мы. Он знает что будет в следующей версии. Раньше ещё очень здорово Марина помогала, теперь вот Виталик остался.
-
-
-
-
-
03 декабря 2013 г.
-
. Никогда так не делайте :)Цитатаи в цикле запросики в БД
SELECT id,name FROM table WHERE id IN ( ". implode(',',$array_ids) ." ) - вот оптимальное решение :) -
-
-
-
28 мая 2015 г.
-
Цитатаid товара у нас это $this->diafan->show
Я так понял уже не работает
Теперь он сидит в $this->result['id']
Но и это уже походу не надо. Был случайно обнаружен вот такой штукКод$_SESSION['shop_view']
И в нем уже сидели id посещенных страниц... -
-
-
-
06 июня 2013 г.
-
Сегодня все сделал. Все получилось. Единтсенная доработочка, вместо кодаКод
if ( ! isset($_SESSION['shop_history']))
{
$_SESSION['shop_history'] = array();
}
if ( ! in_array($this->diafan->show, $_SESSION['shop_history']))
{
$_SESSION['shop_history'][] = $this->diafan->show;
}
сделал вот так:Код
$cur_id=$this->diafan->show;
if ( ! isset($_SESSION['shop_history']))
{
$_SESSION['shop_history'] = array(); // первый раз формируем сам массив
}
array_unshift($_SESSION['shop_history'], $cur_id); // вставляем элемент В НАЧАЛО массива
$_SESSION['shop_history']=array_unique($_SESSION['shop_history']); // Удаляем возможные дубликаты
В этом варианте блок выданет сначала самые последние товары, и нет повторов.
Виталию, еще раз спасибо! -
-
-
-
03 декабря 2013 г.
-
Как устроены массивы в PHP
Что такое SPL структуры данных
Проверка in_array не лишняя, и она "как мне кажется" выполнится быстрей чем array_unique. Если есть возможность я бы посоветовал использовать SPL.
Век живи, век учись (с) -
-
Поблагодарили: Denis (Drachoon)
-
-
-
- Denis (Drachoon)
- 154
-
05 декабря 2013 г.
-
Вау - ништяковые примочки здорово сокращают длину и количество строк кода :) Возьму на заметку.
-
-
-
-
-
18 ноября 2013 г.
-
добрый день!
Как я понимаю - на ВТОРОМ шаге мы записываем в массив просмотренные товары в текущей сессии
Не понятен Третий шаг:ЦитатаТретий шаг: останется только создать шаблонный тег, типа insert name=show_lastview_goods
где сделать проверку
В includes/function.php пишу:Кодpublic function show_lastview_goods ()
{
if ( ! empty($_SESSION['shop_history']))
{
for($i = 0; $i < count($_SESSION);$i++):
echo $_SESSION[$i];
endfor;
Затем вывожу в нужном месте:Код<insert name="show_lastview_goods" module="shop" count="4">
Подскажите, пожалуйста где ошибка? -
-
-
-
18 ноября 2013 г.
-
ЦитатаПодскажите, пожалуйста где ошибка?
Вот тутКод<insert name="show_lastview_goods" module="shop" count="4">
В модуле shop этой функции нет Вы же её в includes/function.php поместили.
count="4" не критическая ошибка, но этот параметр нигде не фигурирует и никак не обрабатывается в Вашей функции. Поэтому не нужен.
ПростоКод<insert name="show_lastview_goods">
-
-
-
-
18 ноября 2013 г.
-
Виталий, спасибо! Я новичок. Извините, если задаю глупые вопросы.
Но все равно почему-то ничего не выводит визуально.
Может шаблонный тег нужно выводить в каком то другом месте? я его пишу в site.php -
-
-
-
18 ноября 2013 г.
-
Виталий, module="shop" count="4" - придумал я, Анастасия изначально делала как Вы рекомендовали.
Но чего-то не хватает, на паблик ничего не выходит... Уж и кеш сайта обратно включили, хотя на период работ обычно отключаем.
Ни в какую... Сначала вылезал "Array" на паблике, а теперь и этого нет. -
-
-
-
- Denis (Drachoon)
- 154
-
19 ноября 2013 г.
-
Ну так надо было посмотреть, что за array вылезал. Может внутри было то что вам нужно.
да иКодecho $_SESSION[$i];
действительно выведет array
для вывода массивов и прочих сложных конструкций лучше использоватьКодprint_r($_SESSION[$i]);
-
-
-
-
19 ноября 2013 г.
-
Спасибо! Но снова ничего не работает.
Использую всего три файла site, function и shop.model . Может быть нужно еще где то прописывать? Почему-то мне кажется, что я пропускаю какой-то немаловажный шаг. И проблема либо в записи id товаров в массив, либо в выводе.
И еще вопрос - пошагово можно как-нибудь посмотреть работу кода? (Чтобы увидеть заполняется ли массив)
-
-
-
-
- Denis (Drachoon)
- 154
-
20 ноября 2013 г. , редакция: 20 ноября 2013 г.
-
Можно конечно и потрейсить для этого нужны инструменты.
Например: NetBeanse + XDebug
или можно посмотреть что в конкретной точке можем поиметь всё тем же print_r($this->diafan), print_r($_SESSION)
технология добавления тегов в документации описана хорошо.
Если хотите в модуле, как в примере то надо кастомизирвать файлы: shop.php, shop.model.php и шаблон shop.view.[x].php
тогда тег будет выглядеть как у Валерия Викторовича.
Если действия которые будут производится общего характера то достаточно внести правки в function.php тогда тег будет выглядеть как у Виталия. -
-
-
-
-
-
21 ноября 2013 г.
-
Виталий, не работает эта конструкция. Что мы с Анастасией упускаем, почему не работает?
-
-
-
-
- Denis (Drachoon)
- 154
-
21 ноября 2013 г.
-
Провёл небольшие исследования на момент погружения в условие
Кодif ( ! empty($_SESSION['shop_history']))
лично у меня массив $_SESSION пуст возможно у вас тоже пуст.
поэтому ничего и не выводит попробуйте написать print_r($_SESSION) перед условием
Кодprint_r($_SESSION);
if ( ! empty($_SESSION['shop_history'])){
...
} -
-
-
-
21 ноября 2013 г.
-
Денис, спасибо! Анастасия на выезде по личным делам. Как вернется, сразу же попробует.
-
-
-
-
21 ноября 2013 г.
-
Денис, и так что-то не прокатывает... зараза такая, в чем же проблема...
-
-
-
-
- Denis (Drachoon)
- 154
-
21 ноября 2013 г.
-
Это была проверка на присутствие каких либо данных.
Тогда встаёт вопрос, тег <insert name="show_lastview_goods"> стоит точно там где вы его пытаетесть смотреть или может быть вы смотрите другую страницу где этого тега нет?
Потому что print_r($_SESSION); полюбому должен вывести хотябы Array(), а если не пуст, то в скобках данные сессий.
По какойто причине не метод show_lastview_goods не отрабатывает (должен находится в includes/functuins.php).
Всё же просто. -
-
-
-
-
-
21 ноября 2013 г.
-
Виталий, Денис! Спасибо вам огромное! Не знаю, чтобы я без вас делала!
Теперь появилась следующая проблема - как вывести карточки этих товаров? -
-
-
-
22 ноября 2013 г.
-
Зависит от того, насколько полная информация нужна в "списке последних просмотренных". Обычно достаточно реально небольшой список, название товаров ссылками на карточки. Для этого id товаров из массива перебираются и формируются ссылки, что-то вродеКод
echo '<a href="/' . $this->diafan->_route->link(DB::title("shop", $_SESSION['shop_history'][$i], "site_id"), "shop", DB::title("shop", $_SESSION['shop_history'][$i], "cat_id"), $_SESSION['shop_history'][$i]) . ">' . DB::title("shop", $_SESSION['shop_history'][$i], "name") . '</a>';
(не проверял, но работать должно именно так)
По сути, надо вывестиКодecho '<a href="/' . URL . ">' . имя товара . '</a>';
Вместо имени товара пишем- это просто запрос в БД, чтобы узнать имя товара по его IDКодDB::title("shop", $_SESSION['shop_history'][$i], "name")
А вместо URL нам нужен ЧПУ до товара. Это метод link.
Куда мы суем ID товара из сессии, а site_id и cat_id выдергиваем через DB::title из той же таблицы shop.
________________________
Если нам надо выводить прям карточки товара, то надо заморачиваться с отбором товаров из БД, отбором всех их доп.характеристик, их цен, их изображений, затем формировать верстку всего этого. Это решаемо, но это подольше. Тогда лучше функцию действительно перенести в модельку shop, и там склонировать, например, show_block и использовать вьюху. -
-
-
-
27 ноября 2013 г.
-
Виталий, добрый день! Спасибо! с помощью вашего кода ссылки на просмотренные товары формируются.
Но нам как раз нужно выводить карточки товаров...
Функцию перенесла в модель shop/shop.php - именно тут и формирую ссылки просмотренных товаров
Создала файл в shop/view/shop.view.show_lastview_goods.php по шаблону shop.view.show_block.php
В нужном месте - шаблонная функция стала такого вида. Все верно? (В таком виде на паблик не выводится ничего)Код<insert name="show_lastview_goods" module="shop" template="show_lastview_goods">
Кроме того, Мне не понятно, как передавать ссылки или id товаров в шаблон shop/view/shop.view.show_lastview_goods.php
-
-
-
-
28 ноября 2013 г.
-
Наверно template="lastview_goods"? или вообще без template="" ?
-
-
-
-
28 ноября 2013 г. , редакция: 28 ноября 2013 г.
-
Да согласна, сделала не верно.
Клонировала shop.view.show_block.php и сделала shop.view.show_block_lastview_goods.php
Исправила в шаблонном тегеКод<insert name="show_lastview_goods" module="shop" template="lastview_goods">
но основная проблема то даже не в этом.. а в том как передать и какие параметры во вьюху и реализовать вывод карточек. -
-
-
-
28 ноября 2013 г. , редакция: 28 ноября 2013 г.
-
попыталась отдельно вывести на экранКод
$i1=DB::title("shop", $_SESSION['shop_history'][$i], "site_id");
$i2=DB::title("shop", $_SESSION['shop_history'][$i], "cat_id");
$i3=DB::title("shop", $_SESSION['shop_history'][$i], "name");
$row["link"] = $this->diafan->_route->link(DB::title("shop", $_SESSION['shop_history'][$i], "site_id"), "shop", DB::title("shop", $_SESSION['shop_history'][$i], "cat_id"), $_SESSION['shop_history'][$i]);
Выводит $i1 = 11,$i2 =7,$i3= ПУСТО, $row["link"]=ссылка
Имя товара не выводит(
Если я правильно понимаю, именно эти параметры нужно передавать? -
-
-
-
- Denis (Drachoon)
- 154
-
05 декабря 2013 г.
-
Для того чтобы из модела передать данные во вьюху формируется массив. В конце метода можно посмотреть какой именно массив передаётся, а если метод свой то на ваше усмотрение конечно.
Обычно както так выглядит.Кодreturn $this->result
Нарастите его необходимыми данными и всё. Естественно чтобы в него что-то положить нужно это что-то откудо то взять. Чаще всего из базы данных.
Если честно уже трудно что-то конкретное советовать, из за того что уже целостность исходных данных непонятна. -
-
-
-
-
- Denis (Drachoon)
- 154
-
05 декабря 2013 г.
-
Лучше данные формировать всётаки в моделе, а в конструктуре рулить процессами.
-
-
-
-
02 декабря 2013 г.
-
Сейчас глянул в Битрикс, оказывается в редакции малый бизнес он есть как самый обычный компонет "Просмотренные товары":Код
<?$APPLICATION->IncludeComponent(
"bitrix:sale.viewed.product"
Зараза такая...
А у нас даже подсказать не могут как его создать, раз нет в стандартной поставке.. -
-
-
-
04 декабря 2013 г. , редакция: 04 декабря 2013 г.
-
ну...так в диафане тоже есть, называется отложенные.
Нужно вставить добавление, в id прописать вызов.
В итоге получится полноценный компонент "просмотренные товары", и для авторизованных поль-ей всегда его последние просмотренные показываются.
Единственное что я дописывал это ограничение на кол-во добавленных отложенных товаров, но там пару строчек кода.
отдельно нету конечно, но части есть, и не надо обладать особенными знаниями, хватит знаний начального курса универа, если вы не прогуливали конечно, и не были двоешником. -
-
-
-
07 июня 2021 г.
-
А почему происходит сброс просмотренных товаров когда человек выходит из личного кабинет?
Где это можно подкрутить? -
-
-
-
- Степан (idxdoc)
- 334
-
07 июня 2021 г.
-
Дим, я ведь тебе ответил в другой теме
-
-
-
-
07 июня 2021 г.
-
ЦитатаХранить нужно просмотренные не в сессии потому что, а в куке просто. То есть переписать нужно функционал просмотренных товаров, а точнее немного исправить.
историю на куки поменять? -
-
-
-
- Степан (idxdoc)
- 334
-
07 июня 2021 г.
-
сессию на куки
-
-
-
-
08 июня 2021 г.
-
а есть где можно подглядеть как это сделать?
-
-
-
-
- Андрей (R4W)
- 140
-
09 июня 2021 г.
-
вот тут https://www.php.net/ :-D
-
-
-
-
10 июня 2021 г.
-
PHP (рекурсивный акроним словосочетания PHP: Hypertext Preprocessor) - это распространенный язык программирования общего назначения с открытым исходным кодом.
Куки (cookies) — текстовые файлы небольшого размера, записываемые сервером в браузер пользователя
А теперь вопрос :-D
Если вопрос про куки, то зачем человеку давать сайт про php? -
-
-
-
11 июня 2021 г.
-
Могу предположить, что надо поменять $_COOKIE на $_SESSION
А Андрей правильно ссылку дал.
Вы же в коде php будете менять куки на сессию и там разные методы записи.
Допустим для куки - setcookie(),
а для сессии у вас должны быть вызвана функция session_start();
-
-
-
-
11 июня 2021 г. , редакция: 11 июня 2021 г.
-
ЦитатаЕсли вопрос про куки, то зачем человеку давать сайт про php?
На какой сайт, по вашему мнению, должна быть ссылка? На этот? -
-
-
-
- Андрей (R4W)
- 140
-
11 июня 2021 г.
-
Алевтина просто толсто троллит )))
P.S. cookies это вообще печеньки -
-
-
-
-
-
Новости
-
18 июня
-
В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
-
24 апреля
-
В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
-
12 января
-
После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке.
Блоги
-
24.04.2024
-
Выпустили новую сборку DIAFAN.CMS 7.1.4.
Блоги
-
12.01.2024
-
В данном руководстве познакомим вас с панелью управления DIAFAN.CMS