Это тоже помогло с рекурсией или как?
Да, хорошая идея. Надо попробовать
У меня просто на одной странице выводится список городов (страна->регион->область->город), я решил так: {if {field name=id}==36} {processor action=«getmenu» ns=«site» propset=«cities» assign=«result»} {assign var=«items» value=$result.object} {include file=«cities/outer.tpl»} {else} {block name=«content»} {field name=«content»} {/block} {/if}
Кстати, как еще один вариант (чтобы обойтись без сниппетов), думаю, можно использовать Smarty-плагин для набивки менюшки. То есть написать свой плагинчик и после вызова процессора результат отправлять туда. А там уже вызывать Смарти-шаблончики для набивки. Вряд ли прекомпиллятор будет вызывать эту функцию.
А попробуйте завести источник файлов в MODX-е с указанием абсолютного пути на корневую директорию всех сайтов, или сразу до папки другого сайта. Я говорил здесь как это делается.
Пожалуйста.
Понял. Да, действительно в блоке. Спасибо!
Все, разобрался. У тебя этот код где-то в блоке находится? ( {block name=someblock}… {/block} ). У меня было это в блоке, и из-за этого рекурсия бесконечная и была. Здесь появляется логика в плане бесконечной подгрузки шаблона. Блок — это отдельная очень хитрая сущность, которая может расширяться, и в которой могут быть и другие блоки. Вот для того, чтобы быть «в курсе» по всем внутренним блокам, Smarty выполняет обход всех вложений {include file=} без учета всяких условий и т.п. (просто чтобы полностью скомпиллировать блок) (без условий — это в общих чертах). И так как там шаблон вызывает предыдущий шаблон, то и происходит бесконечная рекурсия. То есть память выжирается не на уровне выполнения процессора, а на уровне прекомпилляции шаблона. Если у тебя менюшка находится в блоке и обязана там быть, то лично я эту проблему обошел за счет сниппета. То есть Смарти-код с процессором менюшки и т.п. вынес в отдельный шаблон, который вызывается сниппетом, а в блоке прописал этот сниппет {snippet name=menu}. В результате при прекомпилляции блока Smarty не выполняет этот сниппет и не зацикливается без дела. Все нормально работает.
Как можно проверить изолированы сайты или нет?
На самом деле очень странное поведение. С этим тоже столкнулся на новом сайте. При чем что интересно — оба сайта на modxcloud.com, оба сделаны одинаково, но косяк лезет только на одном сайте. Потребление памяти связано с бесконечной рекурсией. Почему-то даже тогда, когда условие if не выполняется в шаблоне row.tpl, все равно (видимо на уровне прекомпилляции) вызывается шаблон outer.tpl Короче какая-то нелогичная фигня получается. Сейчас копаю. Как раскопаю, отпишусь.