We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 7368
    • 264 Posts
    Добрый день! Подскажите, как можно сделать так, чтобы при генерации русского псевдонима к странице, вначале добавлялся ID страницы, в формате id-transalias, например 1234-stranica-takaja-to.

    Потому как уже на сайте около 5000 страниц, это интернет магазин, и есть подозрения, что псевдонимы могут повторятся)

    И вопрос два. Можно ли как-то узнать повторяются ли псевдонимы на сайте?
      • 16289
      • 121 Posts
      И вопрос два. Можно ли как-то узнать повторяются ли псевдонимы на сайте?
      Если запрос
      "SELECT COUNT(alias) FROM `modx_site_content` WHERE alias<>''"

      вернет результат больший за
      "SELECT COUNT(DISTINCT alias) FROM `modx_site_content` WHERE alias<>''"

      тогда где-то повторяются
        How could number of mysql queries be more than number of tables in DB???
        • 16289
        • 121 Posts
        Quote from: Kollad at Aug 02, 2010, 04:00 AM

        Добрый день! Подскажите, как можно сделать так, чтобы при генерации русского псевдонима к странице, вначале добавлялся ID страницы, в формате id-transalias, например 1234-stranica-takaja-to.
        Раньше бы полез в сам плагин и правил код, но в modx можно сделать плагин самому:

        $e =& $modx->event;
        switch ($e->name) {
            case 'OnBeforeDocFormSave':
                global $alias;
                $alias=$_POST['id'].'-'.$alias;  
                break ;
            default:
                return ;
        }
        

        И отметить галочку в событии ’OnBeforeDocFormSave’.
        Должно работать!
          How could number of mysql queries be more than number of tables in DB???
          • 7368
          • 264 Posts
          Спасибо, попробую!
            • 1035
            • 81 Posts
            Quote from: kpoxas at Aug 02, 2010, 05:01 AM

            Quote from: Kollad at Aug 02, 2010, 04:00 AM

            Добрый день! Подскажите, как можно сделать так, чтобы при генерации русского псевдонима к странице, вначале добавлялся ID страницы, в формате id-transalias, например 1234-stranica-takaja-to.
            Раньше бы полез в сам плагин и правил код, но в modx можно сделать плагин самому:

            $e =& $modx->event;
            switch ($e->name) {
                case 'OnBeforeDocFormSave':
                    global $alias;
                    $alias=$_POST['id'].'-'.$alias;  
                    break ;
                default:
                    return ;
            }
            

            И отметить галочку в событии ’OnBeforeDocFormSave’.
            Должно работать!

            Странно решил попробовать... Документ зависает при сохранении.
            Может нужно добавить в конец $resource->save();?
            Чтобы было вот так

            $e =& $modx->event;
            switch ($e->name) {
                case 'OnBeforeDocFormSave':
                    global $alias;
                    $alias=$_POST['id'].'-'.$alias;  
                    break ;
                default:
                    return ;
                $resource->save();
            }
            


            Что скажете?
              Чем я занят на данный момент, читайте в этой теме: [EVO] Ресурс-контроллер?
              • 8643
              • 271 Posts
              Quote from: Alextekkk at Aug 04, 2010, 06:06 AM

              Что скажете?
              Нет не подойдёт grin
                • 1854
                • 2 Posts
                del
                  • 7368
                  • 264 Posts
                  $e =& $modx->event;
                  switch ($e->name) {
                      case 'OnBeforeDocFormSave':
                          global $alias;
                          $alias=$_POST['id'].'-'.$alias;  
                          break ;
                      default:
                          return ;
                  }
                  


                  Спасибо, kroxas, это работает:)

                  PS не обращайте внимания, что уже прошло немеряно времени, сейчас попробовал - работает. Но, возможно это работает, только в случае когда не добавляется ресурс, а редактируется и у него не было псевдонима

                  В таком случае спасает
                  $e =& $modx->event;
                  switch ($e->name) {
                      case 'OnBeforeDocFormSave':
                          global $alias;
                  // Если создаем новый документ, POST['id'] - будет пустым
                  	if (!isset($_POST['id']) || ($_POST['id'] == '')) {
                  		$table = $modx->getFullTableName('site_content'); // таблица документов
                  		$res = $modx->db->select("MAX(id)", $table); // запрос на получение последнего ID документа
                  		$id = $modx->db->getValue($res) + 1; // Добавляем +1 к этой цифре, и получаем ID текущего документа
                  		} else { // Если редактируем существующий, MODx передает его ID через POST
                  			$id = $_POST['id'];
                  		}
                          $alias = $id . '-' . $alias;  
                          break ;
                      default:
                          return ;
                  }
                  
                    • 1035
                    • 81 Posts
                    Quote from: kpoxas at Aug 02, 2010, 05:01 AM

                    Quote from: Kollad at Aug 02, 2010, 04:00 AM

                    Добрый день! Подскажите, как можно сделать так, чтобы при генерации русского псевдонима к странице, вначале добавлялся ID страницы, в формате id-transalias, например 1234-stranica-takaja-to.
                    Раньше бы полез в сам плагин и правил код, но в modx можно сделать плагин самому:

                    $e =& $modx->event;
                    switch ($e->name) {
                        case 'OnBeforeDocFormSave':
                            global $alias;
                            $alias=$_POST['id'].'-'.$alias;  
                            break ;
                        default:
                            return ;
                    }
                    

                    И отметить галочку в событии ’OnBeforeDocFormSave’.
                    Должно работать!

                    Аналогичный результат можно получить прописав в настройках modx.
                    Там где задается префикс алиаса пропишите "[*id*] - " только без ковычек(ясень пень smiley)
                    Должно работать.
                      Чем я занят на данный момент, читайте в этой теме: [EVO] Ресурс-контроллер?
                      • 785
                      • 2,113 Posts
                      Quote from: Kollad at Apr 19, 2011, 03:24 AM

                      В таком случае спасает
                      Во-первых максимальный ID+1 далеко не всегда является тем, что будет использован, строки могли быть ранее удалены и их ID в этом случае не учитывается, а при добавлении учитывается. Правильнее сделать примерно так:

                      $result = $modx->db->query( "SHOW TABLE STATUS LIKE '".$modx->db->config['table_prefix']."site_content'");
                      $info=$modx->db->getRow ($result);
                      $currentIncrement = $info['Auto_increment'];

                      Но и это не слишком хорошо, лучше привязать к событию OnDocFormSave, когда новая запись добавлена в базу, и изменить эту запись.

                      Во-вторых надо для определения ID использовать $e->params[’id’]. Кстати, по $e->params[’mode’] можно определить, новый или нет документ (значения new или upd).
                        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                        Статьи о MODx, регулярно новые публикации