Проверка на дубль alias

Плагин добавляет последние две цифры id в alias при сохранении.
<?php
switch ($modx->event->name) {
        case 'OnDocFormSave';
        // Для ресурсов, использующих определённый шаблон
        if ($resource->get('template') == 3) {
            $generated = $resource->cleanAlias($resource->pagetitle);
            $lasttwoid = substr($id, -2);
            $aliasid = $generated .'-'. $lasttwoid;
            $resource->set('alias', $aliasid);
            $resource->save();
        }

        break;
    }
А как сделать проверку и добавлять последние две цифры id не всем ресурсам, а только если такой alias уже существует у другого ресурса в том же контейнере?
Подскажите, пожалуйста.
Александр
02 декабря 2017, 13:01
modx.pro
2
3 051
0

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

Андрей
02 декабря 2017, 16:45
0
Ну видимо проверить есть ли такой алиас уже или нет

<?php
switch ($modx->event->name) {
  case 'OnDocFormSave';
    // Для ресурсов, использующих определённый шаблон
    if ($resource->get('template') == 3) {
      $generated = $resource->cleanAlias($resource->pagetitle);

      $tmp = $modx->getObject('modResource', array(
        'parent' => $resource->get('parent'),
        'alias' => $generated
      ));

      if ($tmp) {
        $lasttwoid = substr($id, -2);
        $aliasid = $generated .'-'. $lasttwoid;
        $resource->set('alias', $aliasid);
        $resource->save();
      }
    }

  break;
}
    Александр
    02 декабря 2017, 16:58
    0
    Спасибо, но с этим кодом все так же добавляет id всем ресурсам.
      Андрей
      02 декабря 2017, 17:42
      0
      А так?

      Вообще, при сохранении есть же проверка на дублирование и modx не даст создать 2 одинаковых алиаса.

      <?php
          
      switch ($modx->event->name) {
          case 'OnDocFormSave';    
       
              if ($resource->get('template') == 3) {
       
                  $alias = $resource->cleanAlias($resource->pagetitle);
                  
                  $count = $modx->getCount('modResource', array(
                      'parent' => $resource->parent,
                      'alias' => $alias,
                      'id:NOT' => $id
                  ));
                  
                  if ($count > 0) {
                      $postfix = substr($id, -2);
                      $alias = $alias.'-'.$postfix;
                      $resource->set('alias', $alias);
                      $resource->save();
                  }
                  
              }
              
          break;
      }
        Александр
        03 декабря 2017, 14:24
        0
        Так тоже не хочет, пишет при сохранении «Ресурс с идентификатором 24 уже использует URI. Пожалуйста, введите уникальный псевдоним или используйте «Заморозить URI», чтобы вручную заменить его.»
        MODX проверяет на дублирование, но у меня ресурсы автоматом создаются, надо избежать дублей.
          Андрей Степаненко
          19 января 2019, 13:50
          1
          +1
          С помощью компонента возможно найти дубликаты URL и там же устранить неисправность
          mspre
            Андрей
            16 июля 2019, 09:05
            0
            Добрый день. Решили свою проблему? Тоже такой вопрос возник
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6