Добрый день. Установил сборку. Начал заполнять карточки товара. Заполнил, но на сайте в каталоге отображаются только первые 15 позиций. Как снять ограничение?
сам каталог:
http://swisskarma.ru/catalog/iphone-cases/
Добрый день.
Там нет ограничения. Просто пагинация не выводится. Пропишите пагинацию в шаблоне категории. Смотрите как это работает на корневой странице каталога http://swisskarma.ru/catalog/ .
а можно по подробнее?
Нет. Если знаний не хватает здесь, лучше ShopModxBox забросить, так как там многое требует знаний в программировании.
Пусть пробует, смотри работу сниппетов и плейсхолдеров, забыл видимо вставить пагинацию.
Не понимаешь, смотри по примеру, как сказал Николай.
сегодня праздник нубов. тоже разбираюсь с этим. нид хелп.
очевидно править нужно category.tpl правильно? https://yadi.sk/i/_AkE-3PDbyJdF
но что-то не помогает.
еще задержка в том, что много одноименных файлов в разных категориях (list.tpl, layout.tpl)
Нет не правильно, внутри чанка где вызывается сниппет, для вывода товаров.
Сниппетом выводятся товары, я не знаю какой там, могу предположить getPage
Взято из проекта для примера:
[[!getPage? &elementClass=`modSnippet` &element=`getResources` &showHidden=`1` &tpl=`office_tpl` &limit=`1000` &includeContent=`1` &includeTVs=`1` &processTVs=`1` &hideContainers=`1` &pageLimit=`5` &pageNavVar=`page.nav` &sortby=`{"menuindex":"ASC"}` ]]
[[!+page.nav]]
вот, если он то забыли указать [[!+page.nav]]
Плохо нельзя редактировать комментарии:
При условии, что указали
&pageNavVar=`page.nav`
В целом правильно. Только надо еще дальше плясать. Там есть вызов:
{block name=content} {processor action="web/catalog/category/products/getdata" ns="modxsite" assign=result} {* Набиваем через единый шаблон листинга *} {include file="shop/catalog/list/fetch.tpl"} {/block}
Вот вложенные шаблоны и надо смотреть. И здесь два момента:
1. Во вложенном шаблоне прописан плейсхолдер [[+page.nav]], но в вызове процессора не прописан передаваемый параметр getPage => true. Без этого параметра не будет вызываться в процессоре сниппет getPage.
2. Сейчас все шаблоны некешируемые (включена настройка в шаблонах phptemplate.non-cached=true). Если некеширование выключить, то пагинация не будет корректно работать. В шаблоне tpl/category.tpl надо бы переделать на вызов некешируемого сниппета [!smarty?tpl=`...`]. Но это так, для справки.
Поправка: у нас не используются чанки, у нас не используется getResources, у нас не используются pdoTools и т.д. и т.п. У нас Smarty и процессоры. Поэтому человек написал выше правильно. Речь здесь о сборке магазина ShopModxBox.
Николай, вы предлагаете не использовать чанки и сниппеты, а пользоваться процессорами, получается под каждую задачу писать такой код который решает только данную задачу, а что быстрее будет работать, использовать стандартный сниппет в смарти шаблонах например:
{snippet name="getProducts" params="includeTVs=`1` &includeTVList=`price0,image0,tags,availability` &limit=`4` &tpl=`product` &resources=`{tv name="mainNew" contentid="1" parse="true"}`" parse="true"}
или воспользоваться процессорами, и насчёт чанков, не совсем понял как от них отказаться, предполагаю что создавать смарти шаблоны и их инклюдить каким то образом? Если что то напутал подправте, пытаюсь перейти на вами предложенный способ смарти+процессоры, пытаюсь вникнуть в суть, заранее спасибо.
Валентин, не обязательно писать код под каждую задачу. Во-первых, есть готовые процессоры (типа того же site/web/getdata), которые можно использовать. К тому же процессоры лучше сниппетов тем, что их можно расширять. Вот сниппеты как правило используются под конкретные задачи, так как их можно использовать только в том виде, в каком они поставляются. Вы не можете их модифицировать, иначе как сделать копию и там уже вносить правки. А вот процессоры запросто расширить и можно, к примеру, переопределить нужный метод. Во-вторых, у нас используется Smarty-шаблонизация, что позволяет во многих случаях вообще отказаться от вызова сниппетов, чанков и тех же процессоров, если задача простая. Простой пример: не раз видел вызов сниппета типа [[year]], который возвращает значение текущего года ( return date('Y'); ). От чего это происходит? От того, что ни в MODX-шаблонах, ни в чанках нет возможности выполнить php-код (то есть какую-то логику). В Смарти-шаблоне я просто напишу {date('Y')} и все. Не надо никаких сниппетов или чанков.
То есть призыв отказываться от чанков и сниппетов, это не какая-то тотальная борьба с ними, а просто такая парадигма разработки в рамках наших технологий. То есть если вы используете чистый MODX, то иначе как на чанках и сниппетах вы и не сможете работать. А если у вас phpTemplates+modxSmarty, то вы можете так же работать на чанках и сниппетах, но это уже не так эффективно. Зачем тогда вообще использовать phpTemplates+modxSmarty?
И справедливости ради следует отметить, что совсем от чанков и сниппетов не получится отказаться. Во-первых, как минимум чанки нужны для модулей Login и Wayfinder, от которых мы пока не отказались. Во-вторых, элементарно для вызова некешируемого Смарти-шаблона по прежнему используется некешируемый вызов сниппета [[!smarty?tpl=`...`]]. Но относительно традиционных методов разработки на MODX-е, когда чанков и сниппетов порой больше двух-трех сотен штук, можно сказать что мы не используем чанки и сниппеты.
Большое спасибо за ответ, и заметил что у вас нет поиска, приходится идти в гугл и искать ответ вот так "modxclub smarty и его приимущество", или у вас он где то есть, но спрятан?
Если бы у нас был поиск, вряд ли бы вы что-то через него нашли у нас по этому запросу :)
Нет, здесь поиск не сделан, все руки не доходят. А если вы хотите в гугле искать именно по нашему запросу, добавляйте к запросу site:modxclub.ru и все.
спасибо всем за комментарии,
неожиданно решил проблему, отредактировав category.tpl
{extends file="layout.tpl"} {block name=content} {processor action="web/catalog/category/products/getdata" ns="modxsite" params="limit=`6`&getPage=`1`" assign=result} {* Набиваем через единый шаблон листинга *} {include file="shop/catalog/list/fetch.tpl"} {/block}
Ничего неожиданного. Выше я писал:
1. Во вложенном шаблоне прописан плейсхолдер [[+page.nav]], но в вызове процессора не прописан передаваемый параметр getPage => true. Без этого параметра не будет вызываться в процессоре сниппет getPage.
Вы прописали этот параметр в params в вызове процессора, и постраничность заработала.
Но как я и писал там же, постраничность перестанет нормально работать, если отключить некеширование шаблонов. А не отключить - будет сайт медленней работать. Поэтому возьмите создайте новый Смарти-шаблончик, например inc/category/list.tpl, перекиньте в него ваш код:
{processor action="web/catalog/category/products/getdata" ns="modxsite" params="limit=`6`&getPage=`1`" assign=result} {* Набиваем через единый шаблон листинга *} {include file="shop/catalog/list/fetch.tpl"}
А вместо него пропишите некешируемый вызов [[!smarty?tpl=`inc/category/list.tpl`]].
Тогда можно будет отключить некеширование шаблонов (в параметрах MODX-шаблонов).
Беда,
Your text to link...
сделал как у вас, в принципе отсюда, лимит устанавливается, значит работает, но вот пагинация не появляется, а если в выводе списка товаров shop/catalog/list/fetch.tpl прописать
[[+page.nav]]
то пагинация появляется столько сколько должно быть страниц, но не переходит по ним.
1. Надо передавать в параметры вызываемого процессора «page» => $smarty.get.page, то есть $_GET-параметр запроса.
2. Если у вас свежая сборка, то вообще правильней не [[+page.nav]] вставлять, а инклюдить шаблон постраничности.
Спасибо, теперь все выводиться.
Но по страницам не переходит. При клике по пагинации не переходит. В чем еще может быть проблема. шаблоны я не правил.
В шаблоне Основной все работает, а если перейти в шаблон Категория то все пагинация не работает.
В контейнере товаров вызывают вот такой шаблон
{extends file="layout.tpl"} {block name=content} {processor action="web/catalog/category/products/getdata" ns="modxsite" params="&limit=`4`&getPage=`1`" assign=result} {* Набиваем через единый шаблон листинга *} {include file="shop/catalog/list/fetch.tpl"} {include "common/pagination/pagination.tpl"} {/block}
1. Надо передавать в параметры вызываемого процессора «page» => $smarty.get.page, то есть $_GET-параметр запроса.
У вас здесь где передача этого параметра? Во-вторых, это кешируемый блок, так как находится внутри самого шаблона документа. Сделайте так:
1. В шаблоне категории пропишите вызов своего субшаблона, типа так:
{block name=content} [[!smarty?tpl=`inc/shop/category/index.tpl`]] {/block}
А в inc/shop/category/index.tpl пропишите
{$params = [ "limit" => 4, "page" => $smarty.get.page ]} {processor action="web/catalog/category/products/getdata" ns="modxsite" params=$params assign=result} {* Набиваем через единый шаблон листинга *} {include file="shop/catalog/list/fetch.tpl"} {include "common/pagination/pagination.tpl"}
getPage не нужен для работы шаблона постраничности. Главное — чтобы был сам этот шаблон постраничности.
Ура спасибо, низкий вам поклон, Николай))) доперло до меня, заработало) [А то я в этом смарти вообще ничего не смыслю, а есть какие нибудь качественные уроки по этому смарти???]
с продажи сайта, отблагодарю.)))))
Про уроки я имею в виду те которые вы считаете, хорошими — правильными.
Спасибо, почитаю на досуге.)
Пожалуйста.