Simpla 2.0: табличное отображения и галерея товаров
Дата: 17 Фев ' 12 Автор: mart Рубрики: Программирование
Порой есть задача реализовать несколько типов отображения товаров в каталоге, например, табличного вида и галереи. Сделать это достаточно просто — тут поможет в реализации задачи работа с куками через яваскрипт.
Определим переменную в куках view, отвечающую за тип отображения. Создадим 2 ссылки с видом отображения в шаблоне products.tpl
<a onclick="document.cookie='view=table;path=/';document.location.reload();" href="javascript:;">таблицей</a> <a onclick="document.cookie='view=gallery;path=/';document.location.reload();" href="javascript:;">галереей</a> |
Тут мы пишем переменные в куки и перегружаем страницу. При желании можете по аналогии задать и третий. четвертый вид отображения.
Поскольку на выборку данных наши манипуляции никакого влияния не оказывают, то править PHP-файлы нет смысла.
Теперь сделаем непосредственное отображение каталога. Вся логика в шаблоне products.tpl сводится к добавлению условия
{if $smarty.cookies.view == 'table'}{* табличное отображение *} {foreach $products as $p} ... {/foreach} {else}{* иначе отображение галереей *} {foreach $products as $p} ... {/foreach} {/if} |
Вот и вся сложная логика. а применима не только в симпле, и не только во второй. Действую аналогичным образом в любом коде использующем шаблонизаторы — его можно использовать.
21 комментарий
-
Игорь
19|Фев|2012 1странно, у меня заработало только галереей, при клике на табличный вывод — перебрасывает на главную страницу …
-
Игорь
19|Фев|2012 2заработало как надо, но такая странность — привыборе стиля отображения — перебрасывает на главную, а когда возвращаешся обратно в категорию, она отображается как нужно …. а что нужно сделать, чтобы стиль менялся «на лету» ?
-
19|Фев|2012
3
Поставил вместо a href=»#» значение a href=»javascript:;». По идее должно сработать.
-
Игорь
19|Фев|2012 4Заработало 🙂
-
Игорь
19|Фев|2012 5Вопрос — как добавить 3-й вариант отображения?
Делаю так — не работает 🙁
{if $smarty.cookies.view == ‘table’}{* табличное отображение *}
{foreach $products as $p}
таблица
{/foreach}
{if $smarty.cookies.view == ‘spisok’}{* списком отображение *}
{foreach $products as $p}
список
{/foreach}
{/if}
{else}{* иначе отображение галереей *}
{foreach $products as $p}
галерея
{/foreach}
{/if}Где ошибка?
-
Шурик
27|Фев|2012 6Спасибо за статью. Попробовал применить, в результате получается, что условие if не проходит проверку. Посмотрел куки в браузере — все работает нормально, а вот проверка $smarty.cookies.view не проходит, все идет на ветку {else}.
Не подскажете почему? Движок shop-script -
Kpoxa
27|Фев|2012 7{if $smarty.cookies.view == ‘table’}{* табличное отображение *}
{foreach $products as $p}
таблица
{/foreach}
{elseif $smarty.cookies.view == ‘spisok’}{* списком отображение *}
{foreach $products as $p}
список
{/foreach}
{else}{* иначе отображение галереей *}
{foreach $products as $p}
галерея
{/foreach}
{/if} -
iluwka
25|Апр|2012 8{if $smarty.cookies.view == ‘table’}{* табличное отображение *}
{foreach $products as $p}
таблица
{/foreach}
{if $smarty.cookies.view == ‘spisok’}{* списком отображение *}
{foreach $products as $p}
список
{/foreach}
{/if}<——————————убери
{else}{* иначе отображение галереей *}
{foreach $products as $p}
галерея
{/foreach}
{/if} -
Cos
02|Май|2012 9Тот же вопрос, на 2.1 заработает?
-
Саша
06|Май|2012 10Спасибо все работает, вот только как к этому прикрутить selected, а то как то незаконченно смотрится
-
Евгений
14|Май|2012 11а как сделать по умолчанию загрузку «таблица» ?
-
Евгений
15|Май|2012 12понял, табличное отображение вывел после {else}, получается по умолчанию таблица
-
Евгений
17|Май|2012 13Подскажите пожалуйста, как можно сделать переключение по ссылкам с табличного на список без перезагрузки страницы?
-
Максим
23|Май|2012 14А как сделать чтобы товары всегда отображались в виде таблицы?
-
Евгений
28|Май|2012 15помогите сделать переключение каталога товаров с таблицы в список как на данном сайте без перезагрузки страницы:
-
Сергей
27|Авг|2012 16Подскажите, а как задать первоначальное значение для $smarty.cookies.view, которое учитывалось бы только в первый раз ?
Т.к. при первом запуске браузера изначально никакой вид в куках не прописан.
-
06|Сен|2012
17
Если есть переменная $smarty.cookies.view
{if $smarty.cookies.view} -
Анна
27|Мар|2013 18а у меня ничего не работает( как было список так и осталось. и хоть убейся. это уже второй вариант который я пытаюсь сделать. пристрелите меня кто нибудь. ибо 5 часов биться с одним и тем же моментов — это что то(
-
Влад
23|Май|2013 19Авто пожалуйста инструкцию для чайников
Я например как понял так и сделал — итог ничего не работает
в шаблоне products.tpl
Добавил код1
и код 2
итог не работает
Что делаю не так ? -
Антон
13|Июн|2013 20Глупости какие, зачем в ссылку зашивать установку куки?
А JS не работает?Надо в файл view/ProductsView.php добавить анализ и установку куки:
// Стиль вывода списка товаров
if($layout = $this->request->get(‘layout’, ‘string’))
$_SESSION[‘layout’] = $layout;
if (!empty($_SESSION[‘layout’]))
$filter[‘layout’] = $_SESSION[‘layout’];
else
$filter[‘layout’] = ‘galery’;
$this->design->assign(‘layout’, $filter[‘layout’]);А в шаблоне добавить пару ссылок, и анализировать переменную $layout:
{if $layout==’galery’}{include file=’products_galery.tpl’}{/if}
{if $layout==’album’} {include file=’products_album.tpl’}{/if}
{if $layout==’list’} {include file=’products_list.tpl’}{/if} -
13|Июн|2013
21
В куки зашивается, чтобы запомнить предпочтение клиента — чтобы при следующем заходе он не выбирал заново отображение.