Как добавить дату из TV date к alias страницы?

Приветствую, подскажите пожалуйста, как делать кастомные URL страниц? Например к alias страницы при создании добавлять например id страницы, но только для страниц с определенным шаблоном. Как такое сделать?
Или не iв страницы, а дату из TV date этой страницы. Еще не завезли в настройки MODx такое по умолчанию?

Раньше был снипgет CustomUrls а теперь его нет в базе установщика :( а если установить из архива, Modx пишет он устарел и его код устарел, короче автор его не обновляет.
Роман
06 января 2023, 19:53
modx.pro
347
0

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

Alexey
06 января 2023, 20:19
1
+1
Привет!

rtfm.modx.com/current/ru/extending-modx/plugins/system-events/ondocformsave

Плагин на это событие не подойдёт?
    Роман
    06 января 2023, 20:48
    0
    Да спасибо! Пока сделал с плагином, по номеру шаблона добавляю просто id к alias через дефис, TV с датой пока решил не делать, там массив JSON и нужно только первую запись взять, в общем придется попыхтеть на php а я не так силен в нем.
      Роман
      07 января 2023, 14:05
      0
      Через плагин вроде разобрался, но при каждом обновлении добавляет id в конце alias, блин, получается ерунда типа tur-29-29-29 как это пофиксить?

      Использую так
      <?php
      if ($modx->event->name == 'OnDocFormSave') {
          
      if ($mode == 'new') {
          // resource created
          if (!empty($resource->get('alias'))) {
                  $resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
                  $resource->save();
              }else{
                  $resource->set('alias',$resource->get('pagetitle').'-'.$resource->get('id'));
                  $resource->save();
              }
      }
      else {
         // existing resource was updated
          if ($resource->get('template') == 2) {
        
               if (!empty($resource->get('alias'))) {
                  $resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
                  $resource->save();
              }else{
                  $resource->set('alias',$resource->get('pagetitle').'-'.$resource->get('id'));
                  $resource->save();
              }
          
          }
      }
      }
        Алексей Смирнов
        07 января 2023, 22:37
        0
        наверное, перед генерацией проверять по вхождению — есть или нет уже этот id И если есть, то не генерить.
          Роман
          07 января 2023, 22:51
          0
          Это первое что сделал, но это неверный подход, не работает почему-то, я хочу попробовать получить символы в конце строки до дефиса, и их сравнить с id страницы, если есть такое и сравнивается значит id уже висит на конце и ничего не делаем, сейчас все равно добавляет id при каждом нажатии на кнопу сохранить. Получается такая лажа tur-29-29-29

          else {
             // existing resource was updated
              if ($resource->get('template') == 2) {
                  
                  
                   if (!empty($resource->get('alias'))) {
                       if ($resource->get('alias') != $resource->get('pagetitle').'-'.$resource->get('id')) {
                         $resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
                         $resource->save();
                       }
                  }
              
              
              }
          }
            Алексей Смирнов
            07 января 2023, 23:17
            0
            так не проверяется у вас всегда будет не равно…
            if ($resource->get('alias') != $resource->get('pagetitle').'-'.$resource->get('id'))
            у вас же pagetitle русскими, а алиас английскими?
            Как вариант сравнивайте через функцию php strpos
            и ищите это '-'.$resource->get('id')
            можно еще посмотреть функции php которые в строке ищут. варианты есть.
              Роман
              08 января 2023, 00:30
              0
              Блиииин :)) точно, pagetitle же еще не обработан transalias ом, понял, попробую strpos
                Артур Шевченко
                09 января 2023, 12:10
                0
                Можно ещё так сделать
                $title = $resource->get('pagetitle') . '-' . $resource->get('id');
                $alias = $resource->cleanAlias($title);
                if ($resource->get('alias') != $alias){
                // тут остальное
                }
                  Роман
                  09 января 2023, 12:41
                  0
                  Пробовал $resource->cleanAlias($title) пусто почему-то в $resource->cleanAlias($title)
                    Артур Шевченко
                    09 января 2023, 12:50
                    0
                    Где-то у тебя ошибка. Я проверил у себя на сайте в плагине на сохранение всё работает.
                      Роман
                      09 января 2023, 12:55
                      0
                      Да тоже все работает, просто если прям подставить

                      $resource->set('alias',$resource->cleanAlias($title));
                      $resource->save();
                      то записывается пустота
                    Роман
                    09 января 2023, 12:46
                    0
                    тут один вариант, смотреть на конце строки ID и уже от этого плясать, пробую strpos
                      Артур Шевченко
                      09 января 2023, 13:14
                      1
                      +1
                      Я просто вариант предложил, а ты делай как больше нравится)))
                        Роман
                        09 января 2023, 13:20
                        0
                        Благодарю! Спасибо что откликаетесь.
                  Роман
                  09 января 2023, 15:12
                  0
                  В итоге сделал так, вроде работает :), может кому зайдет еще.
                  Для проверки ID на конце alias воспользовfлся explode и end

                  <?php
                  if ($modx->event->name == 'OnDocFormSave') {
                      
                  if ($mode == 'new') {
                      // resource created
                           if ($resource->get('template') == 2) {
                      if (!empty($resource->get('alias'))) {
                                $resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
                                $resource->save();
                          }else{
                              $resource->set('alias',$resource->get('pagetitle').'-'.$resource->get('id'));
                              $resource->save();
                          }
                  }
                  }
                  else {
                     // existing resource was updated
                      if ($resource->get('template') == 2) {
                    
                           if (!empty($resource->get('alias'))) {
                              
                                   $array = explode('-', $resource->get('alias'));
                                   $altid = end($array);
                  
                             if ($altid != $resource->get('id')) {
                                 $resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
                                 $resource->save();
                               }
                              
                          }else{
                              //$resource->set('alias',$resource->get('pagetitle').'-'.$resource->get('id'));
                              //$resource->save();
                          }  
                      }
                  }
                  }
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          15