Александр

Александр

Был в сети 03 февраля 2025, 17:16
Заказы принимаю
Хотя можно попробовать более изящное решение…
1) На всякий случай, приложение у Вас привязано к modx.com или к modstore? В офф репозитории обновления могут отставать от modstore. Если pdoTools все же привязано к офф репозиторию, попробуйте деинсталировать и удалить, потом скачать с modstore.
2) Если у Вас в данном примере класс ресурса только «документ» (а не символическая ссылка допустим), попробуйте поставить параметр в вызов 'useWeblinkUrl ' => false.

На крайний случай можно всегда откатиться до предыдущей версии pdoTools или использовать вместо pdoMenu — pdoResources
7рка строгая очень, увы, с ней знаком плохо.
Темнеменее 7ой версией пользуются в последнее время часто и с подобными проблемами вроде не сталкивались. Тут или Вы упустили важное обновление php (например 7.0.11), которое могло повлиять на данную функцию, или настройки к функциям черезмерно строгие. Боюсь, исправив данную проблему, легко посыпятся другие.
Но если уж говорить о исправлении ситуации, в фун-ию надо подставить строку, php воспринимает строчку, как массив.
Допишите выше:
$contentRow = $row['content'] . '';
А в фрагментах, указанных Вами поменяйте $row['content'] на $contentRow
Сразу оговорюсь, мое решение неправильное, но рабочее.
Хотя судя по тому, что Вы пользуетесь fenom и работаете на 7рке, опыта для такого решения у Вас должно быть достаточно
Не думал, что разница в этом столь многозначительна. Смотрел, что работает с массивами, и случайно клацнул не на ту вкладку (когда вставлял ссылку здесь). В любом случае старался помочь человеку, и вроде как получилось…
Не знаю, откуда Вы это вызываете, но там, где идет установка плейсхолдеров:
$modx->toPlaceholder('order_width',$width);
$modx->toPlaceholder('order_depth',$depth);
$modx->toPlaceholder('order_height',$height);
допишите:
$pdo = $modx->getService('pdoTools');
$tpl = "optionsTpl";
$c = '';
if (!empty($additional_modules) && is_array($additional_modules)) {
		foreach ($additional_modules as $key => $innervalue) {
			if (count($innervalue) == 2) {
				$c .= $pdo->getChunk($tpl, $innervalue);
			}
		}
}
$modx->toPlaceholder('order_options',$c);
Увы, я с работой miniShop очень слабо знаком. Дал бы более дельный совет, если бы работал с ним.

Далее в шаблоне указываете например:
<ul>[[+order_options]]</ul>
И система зарендерит Вам:
<ul>
<li>Блок ящиков ширина 40-60 см. в количестве 2 шт.</li>
<li>Угловой элемент правый 2 шт.</li>
<li>Приставной элемент №3 ширина 60 см 1 шт.</li>
и т.д.
</ul>
В документации написано, что вложенные массивы не могут использоваться методом toPlaceholders.
...the $placeholders array can not be deeply nested. It must be a simple associative array.
Могу только предложить пройтись по ним циклом.

Если же у Вас в примере подразумевается несколько простых массивов, тот факт, что выводится только последний элемент логичен. Имя плейсхолдера у Вас одно и тоже, следовательно при отправке массивов в плейсхолдер — оно заменяется. Подробнее код можете написать?
почему то не определяется текущий контекст. В исходниках так:

$this->context = $this->modx->getContext($this->getProperty('fk'));
        if (empty($this->context)) {
            return $this->modx->lexicon('setting_err_nf');
        }
Т.е. модX смотрит опцию контекста 'fk' и неможет его найти. Попробуйте пересоздать контекст. Или смотрите в права доступа.

{Имя текущего контекста}
{группа}Administrator
{ранг}9999
{политика доступа}Context