Дмитрий Кондаков

Дмитрий Кондаков

Был в сети 08 мая 2026, 19:20
Заказы принимаю
Илья Уткин
Илья Уткин
Fi1osof
Fi1osof
На самом деле предложенный багфикс вполне может спасти вашу работу. gist.github.com/Fi1osof/ff3ea018841b1bb1f99b
Обновите этот класс и все. Других ошибок я не обнаружил. Так же при наличии файла core/model/modx/processors/element/propertyset/update.class.php (если вы обновлялись, а не устанавливали с нуля, должен присутствовать), можно просто удалить файл core/model/modx/processors/element/propertyset/updatefromelement.class.php, все должно работать.
Василий Наумкин
Василий Наумкин
Проверил на скорую руку, вроде работает:
1. Берем
файл для Smarty.
2. Загружаем его на сервер как /assets/components/ace/ace/mode-smarty.js
3. В файле /assets/components/ace/modx.texteditor.js на 7й строке меняем mode c text на smarty.
4. Хорошенько чистим кэш браузера

Результат:
Dmitry Rodionov
Dmitry Rodionov
В итоге для категорий товара я пришел к простому решению, в 2 этапа:
1)сниппет с 1 sql запросом и рекурсивной генерацией меню, для большей быстроты генерации на лету вес можно еще хранить
2)js скрипт который пробегается по дереву и проставляет текущий пункт и родителей

Скорость генерации сократилась с 10s до 1s при первом вызове и потом до 0.05s при кешировании
Алексей Карташов
Алексей Карташов
Я для себя написал универсальную функцию изменения системной настройки, которая 100 пудов её изменяет и новое значение доступно сразу же и без дальнейших причуд:
function changeSetting ($key = '', $value, $config = array()) {
  global $modx;

  if (empty($key)) { return false; }

  /* @var $response modProcessorResponse */
  $response = $modx->runProcessor('system/settings/update', array_merge(array(
    'key' => $key,
    'value' => $value,
    'namespace' => 'core'
  ), $config));

  if ($response->isError()) {
    $modx->log(modX::LOG_LEVEL_ERROR, '[avk] Cann\'t update setting with messages: '. print_r($response->getAllErrors()));
    return false;
  }
  $modx->reloadConfig();
  return true;
}

Вызывать надо вот так:
changeSetting('pdoFetch.class', 'pdotools.mypdofetch', array(
  'namespace' => 'pdotools'
));

Namespace указывать надо обязательно, если настройка из стороннего компонента.
Максим Кузнецов
Максим Кузнецов
Если честно, я и прелести tagLister'a не оценил — он уж на случай крайней лени, как по мне.

Вот как реализованы теги у меня (может, кому пригодится):

1. Дополнительное поле «tags»
Параметры ввода: Авто-метка (можно и простой строкой, по желанию)

2. Сниппет «tags», делающий теги ссылками (для последующего поиска по ним)
<?php
	if ($input == ''){
		return;
	}
	$tags = explode(',',$input);
	foreach ($tags as $key => $value){
		$output[] = '<a href="'.$modx->makeurl($tagsPage, '').'/'.$value.'" itemprop="keywords">'.$value.'</a>'; 
	} 
	return implode(', ',$output);

3. Вывод в чанке
[[*tags:notempty=`
<div class="tagList" itemscope itemtype="http://schema.org/CreativeWork">
	[[!tags? &tagsPage=`91` &input=`[[*tags]]`]]
</div>
`]]
— где &tagsPage — параметр, определяющий айди страницы поиска по тегам для формирования ссылки

Ну и дополнительно, для «полного спектра услуг»:

4. Создаем страницу "Поиск по тегам" с псевдонимом tag, где будем выводить все теги, удовлетворяющие запросу:
[[!pdoPage &parents=`0` &includeContent=`1` &where=`{"tags:LIKE":"%[[!GET? &get=`tag`]]%"}` &includeTVs=`tags` &limit=`10` &sortby=`createdon` &sortdir=`DESC` &depth=`1` &tpl=`tag.Item`]]
— где сниппет GET перехватывает выбранный тег в адресной строке.

GET
<?php
	return $_GET[$get];

5. Дописываем .htaccess, чтобы адресная строка поиска приняла вид site.ru/tag/Название_тега
RewriteRule ^tag/([^/]+)$ /tag?tag=$1 [L]