Евгений

Евгений

Был в сети 25 ноября 2025, 09:46
Заказы принимаю
подскажите как сделать чтобы брало не только из одного TV а из двух или трех?
точнее не как брать а как в коде плагина прописать так чтобы исключало сразу слова из 2 или 3 TV?

сейчас это
$words = json_decode($res->getTVValue('words'), true);         
$pattern = '/(?:' . join('|', $words) . ')/i';
как я понимаю можно
1 сделать переменную words2
а в строке pattern добавить его в исключение (не знаю только как )

2 добавить сразу данные из TV поля words2 в переменную words
<?php
switch ($modx->event->name) {
        case 'OnDocPublished':
        case 'OnBeforeDocFormSave':
        case 'OnDocFormSave':
            if ($resource->get('template') == 27 && !$resource->get('content')) $resource->set('published', 0);
$res = $modx->getObject('modResource', 11);
$words = $res->getTVValue('words');
$modx->log(1, print_r($words,1));
           
            $content = $resource->get('content');
            $pattern = '/(?:' . join('|', $words) . ')/i';
            $content = preg_replace($pattern, '', $content);
            
            $resource->set('content', $content);
            $resource->save();
        break;
              
}
вот так выводит, надо по и дее без ковычек и в ...
["testx","testy"]

ну и само собой слова не чистятся
на coloricker плагин ругался я его отключил

[2023-05-25 11:39:37] (ERROR @ /var/www/www-root/data/www/.ru/core/cache/includes/elements/modplugin/59.include.cache.php: 9) [«testx»,«testy»]
[2023-05-25 11:39:37] (ERROR @ /var/www/www-root/data/www/.ru/core/cache/includes/elements/modplugin/59.include.cache.php: 12) PHP warning: join(): Invalid arguments passed

12 строка — $pattern = '/(?:'. join('|', $words). ')/i';
да, при сохранении выскакивает ошибка, но зависания нет, просто продолжаешь работать а сохранить не можешь :)

при этом для всех шаблонов хотя там в условиях указан конкретный
лог ошибок пуст
старый код плагина где я слова перечислял через запятую не вызывает проблем
<?php
switch ($modx->event->name) {
        case 'OnDocPublished':
        case 'OnBeforeDocFormSave':
        case 'OnDocFormSave':
            if ($resource->get('template') == 24 && !$resource->get('content')) $resource->set('published', 0);
$res = $modx->getObject('modResource', 11);
$words = json_decode($res->getTVValue('words'), true);
           
            $content = $resource->get('content');
            $pattern = '/(?:' . join('|', $words) . ')/i';
            $content = preg_replace($pattern, '', $content);
            
            $resource->set('content', $content);
            $resource->save();
        break;
              
}
когда делаю так получаю ошибку при сохранении… которую выше писал но на снипет colorpicker
tvsuperselect
и такой код
<?php
switch ($modx->event->name) {
        case 'OnDocPublished':
        case 'OnBeforeDocFormSave':
        case 'OnDocFormSave':
            if ($resource->get('template') == 24 && !$resource->get('content')) $resource->set('published', 0);
            $res = $modx->getObject('modResource', 11);
            $words = $res->getTVValue('words'); // тут получить слова, распарсить строку, смотря что там вернет.
           
            $content = $resource->get('content');
            $pattern = '/(?:' . join('|', $words) . ')/i';
            $content = preg_replace($pattern, '', $content);
            
            $resource->set('content', $content);
            $resource->save();
        break;
              
}
не удаляет слова указанные в tv words