Автоматическое имя в pagetitle

Добрый день. Требуется реализовать автоматическую нумерацию в коллекциях (если так невозможно, то как-то иначе). Пример: есть пустая коллекция (Collections). Документы автоматически при создании должны получать инкрементное имя. К примеру: по шаблону Page 1, Page 2, Page 3. То есть, пользователь не должен вручную вводить pagetitle, а при создании документа автоматически подставлялось имя на единицу больше.

Спасибо.
Harmattan
31 января 2022, 13:13
modx.pro
1
704
0

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

Александр Туниеков
31 января 2022, 14:27
+1
Можно попробовать плагин на ondocformprerender. https://docs.modx.com/current/en/extending-modx/plugins/system-events/ondocformprerender
<?php
$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocFormPrerender':
        if($mode == 'new'){
            if($count = $modx->getCount("modResource',['parent'=>$resource->parent])){
                $count = $count +1;
            }
            $modx->regClientStartupHTMLBlock('
            <script type="text/javascript">
        		Ext.onReady(function() {
                    var pagetitle = Ext.select("#modx-resource-pagetitle");
                    pagetitle.setValue("Page '.$count.');
        		});
        	</script>');
        }
        break;
}
Не тестировал. Но вруг сработает. Главное чтоб $resource->parent был определен.
    Harmattan
    31 января 2022, 15:25
    0
    Спасибо. В коллекциях не работает, а в папках считает.
    Пробовал не через скрипт (подстановка в #modx-resource-pagetitle"), а через
    $resource->set('pagetitle',$count);
    Смысл тот же (подстановка в pagetitle), но не работает.
      Harmattan
      31 января 2022, 15:37
      0
      UPD. Прошу прощения — работает. Только почему-то только через Render — OnDocFormPrerender не хочет!
      <?php
      $eventName = $modx->event->name;
      switch($eventName) {
          case 'OnDocFormRender':
              if($mode == 'new'){
                  if($count = $modx->getCount('modResource',['parent'=>$resource->parent])){
                      $count = $count +1;
                  }
                  $resource->set('pagetitle',"Page $count");
              }
              break;
      }
      Спасибо большое.
        Александр Туниеков
        31 января 2022, 15:44
        0
        Рад что помог :-)
          Harmattan
          31 января 2022, 17:48
          0
          А ещё надоесть: как выполнить проверку на вложенность? То есть, данная функция должна быть доступна только для определённого ресурса (родителя). Чувствую, что надо использовать
          $parentObj = $object->get('parent');
          Но как осуществить проверку? К примеру, pagetitle должен подставляться только для потомков родителя с id=8.
    Harmattan
    31 января 2022, 19:17
    0
    Спасибо. Окончательно:
    <?php
    $eventName = $modx->event->name;
    switch($eventName) {
        case 'OnDocFormRender':
            if($mode == 'new'){
                if($resource->get('parent') == 8){
                    if($count = $modx->getCount('modResource',['parent'=>$resource->parent])){
                    $count = $count +1;
                }
                $resource->set('pagetitle',"Page  $count");}
            }
        break;
    }
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7