Вырезать плагином слова из контента

Есть 2 десятка слов которые нужно вырезать из контента при сохранении и публикации ресурса. Все они в теге p
Например xxx и yyy
Подскажите как это сделать правильно? Плагин есть, надо только записать строку
Евгений
27 сентября 2022, 00:16
modx.pro
506
0

Комментарии: 16

Роман
27 сентября 2022, 08:58
+1
А в чем сложность? Сделайте плагин на событие 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);
    Роман
    27 сентября 2022, 09:00
    +1
    Единственное могут быть проблемы со склонениями, тут или расширить список или еще как-то переписать.
      Евгений
      27 сентября 2022, 09:24
      0
      выглядит годно но не вырезает например такое
      <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;
        Роман
        27 сентября 2022, 09:31
        0
        Я что-то это упустил это. Но тут уже сами перепишите, ничего сложного нет.
        $words = array('xxx', 'yyy', 'zzz', 'etc..');
        $pattern = '/<p>(?:' . join('|', $words) . ')<\/p>/i';
        $content = preg_replace($pattern, '', $content);
          Евгений
          27 сентября 2022, 09:50
          0
          почемуто все равно не цепляет :(
            Роман
            27 сентября 2022, 10:27
            +1
            Тут ошибка:
            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();
            Проверил, работает, поправьте ошибки и снова проверьте. Может быть проблема в том еще, что она когда удаляет не нужное, но на странице это не показывается, тут наверно нужно как-то отдельно перегружать блок.
              Евгений
              27 сентября 2022, 12:10
              0
              не удаляет, показывается и в админке и на странице
                Роман
                27 сентября 2022, 12:32
                +1
                Откройте консоль, и протестируйте. Откуда я знаю, что вы там отправляете.
                  Евгений
                  27 сентября 2022, 13:37
                  0
                  тааак, с этого момента подробнее плиз
                  ну я тестирую обычно, добавил в поле контент эти сочетания букв
                  <p>xxx</p><p>yyy</p><p>zzz</p>
                  и сохраняю и удаления не происходит
                    Роман
                    27 сентября 2022, 13:47
                    +1
                    Вы событие у плагина поставили: OnBeforeDocFormSave?
                      Евгений
                      27 сентября 2022, 15:02
                      0
                      да
                      и на паблишед стоит и на сейв
                      как я понимаю неверно массив внутри написан :)
                      $words = array('xxx,yyy,zzz,etc..');
                      вот так сработало пасиб

                      только нюансик есть, остаются пустые абзацы
                      $words = array('xxx,<p>yyy</p>,zzz,ddd');
                       $pattern = '/(?:' . join('|', $words) . ')/i';
                      все эти сочетания в документе в абзацах и все равно от всех остается пустой тег абзаца а точнее c nbsp;
                      <p> </p>
      Артур Шевченко
      27 сентября 2022, 11:14
      0
      Может этот компонет приспособить.
        Евгений
        27 сентября 2022, 11:27
        0
        тут вобщем то на коменты стоит запускалка
        case 'OnBeforeCommentSave':
        
                $comment = $modx->event->params['TicketComment']->get('text');
        
                $output = $matrous->filterText($comment);
        
                $modx->event->params['TicketComment']->set('text', $output);
                break;
        ну и непонятно как им управлять :)
          Артур Шевченко
          27 сентября 2022, 16:21
          0
          Так на странице документа есть блок Использование и ссылка на используемую библиотеку.
            Евгений
            28 сентября 2022, 11:20
            0
            его вообще реально перенастроить на ресурсы а не на комментарии?
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      16