Подскажите как правильно вытащить содержимое TV в плагин
у меня есть плагин который косит слова из контента ресурса, НО
хочу реализовать возможность добавления таких слов в TV поле в migx
а вопрос состоит в том как этот список слов вызвать в плагине
вот сам плагин
хочу реализовать возможность добавления таких слов в TV поле в migx
а вопрос состоит в том как этот список слов вызвать в плагине
вот сам плагин
<?php
switch ($modx->event->name) {
case 'OnDocPublished':
if ($resource->get('template') == 24 && !$resource->get('content')) $resource->set('published', 0);
$content = $resource->get('content');
$words = array('<p>word1</p>,<p>word2</p>,<p>word3</p>');
$pattern = '/(?:' . join('|', $words) . ')/i';
$content = preg_replace($pattern, '', $content);
$resource->set('content', $content);
$resource->save();
break;
case ' OnBeforeDocFormSave':
if ($resource->get('template') == 24 && !$resource->get('content')) $resource->set('published', 0);
$content = $resource->get('content');
$words = array('<p>word1</p>,<p>word2</p>,<p>word3</p>');
$pattern = '/(?:' . join('|', $words) . ')/i';
$content = preg_replace($pattern, '', $content);
$resource->set('content', $content);
$resource->save();
break;
case 'OnDocFormSave':
if ($resource->get('template') == 24 && !$resource->get('content')) $resource->set('published', 0);
$content = $resource->get('content');
$words = array('<p>word1</p>,<p>word2</p>,<p>word3</p>');
$pattern = '/(?:' . join('|', $words) . ')/i';
$content = preg_replace($pattern, '', $content);
$resource->set('content', $content);
$resource->save();
break;
} Комментарии: 32
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Код получения слов ресурса в виде массива будет такой:
например у него id=11 и TV со словами будет в нем
но увы не подчищает
может разделитель в параметрах вывода TV или чтото в коде не так? как найти причину непонятно
Значит вам нужно будет еще пробежаться по нему и получить все слова.
Т.
и такой код
не удаляет слова указанные в tv words
при этом для всех шаблонов хотя там в условиях указан конкретный
лог ошибок пуст
старый код плагина где я слова перечислял через запятую не вызывает проблем
$words = json_decode($res->getTVValue('words'), true);
а при такой $words = $res->getTVValue('words');
ее нет
в серверных логах ошибок нет
так же строчка $words = $res->getTVValue('words'); может вернуть уже готовый массив и не надо его вытаскивать из json, как я ранее писал надо смотреть что там возвращает. Вот так:
Потом смотреть в журнале ошибок модх
ну и само собой слова не чистятся
на 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';
$words = array('word1,word2`)
точнее не как брать а как в коде плагина прописать так чтобы исключало сразу слова из 2 или 3 TV?
сейчас это как я понимаю можно
1 сделать переменную words2
а в строке pattern добавить его в исключение (не знаю только как )
2 добавить сразу данные из TV поля words2 в переменную words