Конфликт при вызове msProduct внутри pdoResource
В общем, хочу вывести список категорий и у каждой категории рандомный товар из неё (любой вложенности).
Делаю так:
1. В шаблоне вызываю pdoResource:
Делаю так:
1. В шаблоне вызываю pdoResource:
[[!pdoResources?
&depth=`0`
&tpl=`tpl.categories.preview`
&tplWrapper=`tpl.categories.preview.wrapper`
&where=`{"class_key:=": "msCategory"}`
&sortby=`menuindex`
&sortdir=`ASC`
]]2. Чанк tpl.categories.preview.wrapper:<section class="products-list">
[[+output]]
</section>3. Чанк tpl.categories.preview. В нём вызываю msProduct, чтобы вытащить рандомный товар. Но сейчас в нём нет никаких плейсхолдеров, чтобы показать происходящую ошибку:<div class="product-preview">
Это превью категории
<b>[[!msProducts?
&parents=`[[+id]]`
&tpl=`tpl.msProducts.row.preview.without.container`
&includeContent=`1`
&includeThumbs=`x220`
&sortby=`RAND()`
&limit=`1`
]]</b>
</div>4. Чанк tpl.msProducts.row.preview.without.container:Это превью рандомного товараПо логике должно быть вот так:<section class="products-list">
<div class="product-preview">
Это превью категории
<b>Это превью рандомного товара</b>
</div>
<div class="product-preview">
Это превью категории
<b>Это превью рандомного товара</b>
</div>
<div class="product-preview">
Это превью категории
<b>Это превью рандомного товара</b>
</div>
<div class="product-preview">
Это превью категории
<b>Это превью рандомного товара</b>
</div>
</section>Но получается вот так:<section class="products-list">
<div class="product-preview">
Это превью категории
<b>Это превью рандомного товара</b>
</div>
Это превью рандомного товара
Это превью рандомного товара
Это превью рандомного товара
Это превью рандомного товара
Это превью рандомного товара
Это превью рандомного товара
Это превью рандомного товара
Это превью рандомного товара
Это превью рандомного товара
</section>Ума не приложу, почему так. Возможно из-за использования pdoTools в качестве класса для выборки и сниппеты где-то как-то между собой конфликтуют… Комментарии: 11
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Ну и если в pdoTools возникает ошибка при запросе — он пишет её в системный журнал.
Вот лог, который выдаёт pdoResource:
А вот лог, который отдаёт msProduct:
Т.е. в итоге pdoResource формирует запрос, который должен формировать msProduct!
Логи я включал по отдельности, так что это на самом деле так.
Нужно будет так все pdoTools сниппеты потом переделать, во избежание.
Вызов сниппета pdoTools в чанке другого сниппета pdoTools меняет pdoTools::config, поэтому всё ломается.
Пока не знаю, как лечить, позже подумаю.
у меня такая же проблема была, пока выход — использовать вместо pdoResource что то другое…
Это из-за использования $modx->getService(), который отдаёт один и тот же экземпляр класса сниппетам, типа синглтон.
pdoResources пофикшен, остальные — в порядке необходимости.