Не пойму почему не работает плагин на событие OnBeforeDocFormSave

Задача: При создании документа с определенным шаблоном, должен генериться текст и записываться в content.

Принцип генерации текста: Задан текст с возможными словосочетаниями. Идея СЕО-шника была в том, чтобы не писать 100500 уникальных текстов под практически одинаковую продукцию.

Код плагина (событие OnBeforeDocFormSave):

<?php
if ($modx->event->name == 'OnBeforeDocFormSave') {
  if($resource->get('template') == 5) {
    if($mode == 'new') {
      function textGenerator($text) {
        if(preg_match("/^(.*)\{([^\{\}]+)\}(.*)$/isU", $text, $matches)) {
          $p = explode('|', $matches[2]);
          $r = rand(1, count($p)) - 1;
          textGenerator($matches[1].$p[$r].$matches[3]);
        } else {
          echo $text;
        }
      }
      $string = 'Текст длинный текст еще немного текста {словосочетание один|словосочетание два} ну и дальше пошел текст и еще переменные словосочетания';
      $out = textGenerator($string);
      $resource->set('content', $out);
    }
  }
  
}

Суть проблемы: При создании ресурса текст не сохраняется в content при этом в логах просто выводится сгенеренный текст как ошибка. При этом если попытаться записать в content простой текст без обработки функцией textGenerator все пишется без ошибок.

Мне кажется я просто чего-то не знаю… чего-то важного))) Помогите пожалуйста
Evgesha
25 ноября 2017, 19:22
modx.pro
1 242
0

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

Володя
25 ноября 2017, 22:44
+1
нужно return
function textGenerator($text) {
        if(preg_match("/^(.*)\{([^\{\}]+)\}(.*)$/isU", $text, $matches)) {
          $p = explode('|', $matches[2]);
          $r = rand(1, count($p)) - 1;
          return textGenerator($matches[1].$p[$r].$matches[3]);
        } else {
          return $text;
        }
      }
    Evgesha
    25 ноября 2017, 22:56
    0
    Это я echo уже от безисходности влепил… return было первоначально, результат тот же только в логах ошибки нет… content пустой(
      Evgesha
      25 ноября 2017, 23:04
      0
      Ой блин… все пора отдыхать)) Не поставил return на return textGenerator($matches[1].$p[$r].$matches[3]);. Спасибо огромное за помощь
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3