Я изменяю запись канала механизма выражений, для этого канала есть несколько полей в группе, и два являются сетками. в шаблоне у меня есть циклы, которые проходят через строки в сетке и выводят различные поля. это все работает, как ожидалось.
Недавно я хотел добавить контент, и когда я это сделал, мои существующие циклы больше не анализировались, просто вывод
{grid_name0}
<div>stuff</div>
{/grid_name0}
и любой {grid_name0:fieldname}
были заменены на пустую строку / ничего. другие теги продолжали работать правильно, включая теги и цикл в новом контенте, который я добавил.
после небольшой отладки я обнаружил, что есть определенное количество текста, которое его сломает, я могу добавить комментарий к шаблону, например:
<!-- 01234567890123456789012345678901234567890123456789 -->
что когда я доберусь до определенной длины, это сломает страницу. может показаться, что предел памяти достигается до того, как механизм выражения обрабатывает весь контент, я проверил различные области на наличие ограничений памяти, и они, кажется, установлены на приемлемые значения (и это довольно простой / легкий сайт), однако я подозреваю, что там это предел, установленный где-то, о чем я не знаю.
это на движке выражений 2.7.2 с php 5.2.17, я могу предоставить дополнительную информацию из phpinfo при желании, но php memory_limit установлен на 512M (что, честно говоря, кажется слишком излишним).
возможно, связано, но одна из вещей, которые я добавил, это «расширенное» условие с {if:else}
Если у меня есть этот подарок, но меньше текста, чем требуется, чтобы разбить страницу, он также сломается точно так же.
Заранее благодарю за любую помощь!
Огромное спасибо поддержке ellis labs, они указали мне на увеличение pcre.backtrack_limit сверх 100000 по умолчанию, и теперь он обрабатывает все теги. Оглядываясь назад, я должен был это проверить раньше, но сталкивался с такими проблемами так редко, что это никогда не приходило мне в голову.
редактировать система / ExpressionEngine / Config / config.php и добавьте это сразу после начальной строки:
ini_set('pcre.backtrack_limit', 100000000);
Других решений пока нет …