Вырезать плагином слова из контента
Есть 2 десятка слов которые нужно вырезать из контента при сохранении и публикации ресурса. Все они в теге p
Например xxx и yyy
Подскажите как это сделать правильно? Плагин есть, надо только записать строку
Например xxx и yyy
Подскажите как это сделать правильно? Плагин есть, надо только записать строку
Комментарии: 16
А в чем сложность? Сделайте плагин на событие OnBeforeDocFormSave
if ($modx->event->name != 'OnBeforeDocFormSave') {return false;}
$content = $resource->get('content');
$words = array('xxx', 'yyy', 'zzz', 'etc..');
$pattern = '/\b(?:' . join('|', $words) . ')\b/i';
$content = preg_replace($pattern, '', $content);
$resource->set('content', $content);
Единственное могут быть проблемы со склонениями, тут или расширить список или еще как-то переписать.
выглядит годно но не вырезает например такое
<p>xxx</p>
сам код такойcase ' OnBeforeDocFormSave':
/** @var TYPE_NAME $resource */
if ($resource->get('template') == 24) {
if (!$resource->content) {
$resource->set('published', 0);
}
}
$content = $resource->get('content');
$words = array('<p>xxx</p>', '<p>yyy</p>', '<p>zzz</p>', '<p>ddd</p>');
$pattern = '/\b(?:' . join('|', $words) . ')\b/i';
$content = preg_replace($pattern, '', $content);
$resource->set('content', $content);
$resource->save();
break;
Я что-то это упустил это. Но тут уже сами перепишите, ничего сложного нет.
$words = array('xxx', 'yyy', 'zzz', 'etc..');
$pattern = '/<p>(?:' . join('|', $words) . ')<\/p>/i';
$content = preg_replace($pattern, '', $content);
почемуто все равно не цепляет :(
Тут ошибка:
if ($resource->get('template') == 24) {
if (!$resource->content) {
$resource->set('published', 0);
}
}
Можно просто переписать:if ($resource->get('template') == 24 && !$resource->get('content')) $resource->set('published', 0);
save можно не ставить, он потом все равно будет сохранять:$resource->save();
Проверил, работает, поправьте ошибки и снова проверьте. Может быть проблема в том еще, что она когда удаляет не нужное, но на странице это не показывается, тут наверно нужно как-то отдельно перегружать блок.
не удаляет, показывается и в админке и на странице
Откройте консоль, и протестируйте. Откуда я знаю, что вы там отправляете.
тааак, с этого момента подробнее плиз
ну я тестирую обычно, добавил в поле контент эти сочетания букв
ну я тестирую обычно, добавил в поле контент эти сочетания букв
<p>xxx</p><p>yyy</p><p>zzz</p>
и сохраняю и удаления не происходит
Вы событие у плагина поставили: OnBeforeDocFormSave?
да
и на паблишед стоит и на сейв
как я понимаю неверно массив внутри написан :)
только нюансик есть, остаются пустые абзацы
и на паблишед стоит и на сейв
как я понимаю неверно массив внутри написан :)
$words = array('xxx,yyy,zzz,etc..');
вот так сработало пасибтолько нюансик есть, остаются пустые абзацы
$words = array('xxx,<p>yyy</p>,zzz,ddd');
$pattern = '/(?:' . join('|', $words) . ')/i';
все эти сочетания в документе в абзацах и все равно от всех остается пустой тег абзаца а точнее c nbsp;<p> </p>
Может этот компонет приспособить.
тут вобщем то на коменты стоит запускалка
case 'OnBeforeCommentSave':
$comment = $modx->event->params['TicketComment']->get('text');
$output = $matrous->filterText($comment);
$modx->event->params['TicketComment']->set('text', $output);
break;
ну и непонятно как им управлять :)
Так на странице документа есть блок Использование и ссылка на используемую библиотеку.
его вообще реально перенастроить на ресурсы а не на комментарии?
Я не пробовал, но думаю да.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.