Новости

Обновить alias документов через catalogfill

  • @slaad должно быть:
    automatic_alias Да
    friendly_alias_realtime Нет

    это в системных настройках

  • automatic_alias Да
    friendly_alias_realtime Нет
    так и было

    cache_alias_map поставил нет, обновил, не помогло, все по прежнему.

    Так catalogfill должен генерировать такие же alias, как и система? Это у меня, что-то не так? Например, у меня catalogfill, может ставить нижнее подчеркивание и двойной дефис, а система так не делает.

  • @CIAO Нет, catalogfill не будет генерить такие же alias как система.
    Но сгенерированные alias должны работать и ссылки будут открываться. Т.е. должно работать [[~123]]

    Если вам нужно один в один, как генерит modx, то делайте с помощью filter_import($value_arr)

  • Блин, по всему сайту сейчас поменялись урлы, убрались нижние подчеркивания и т.д., то вроде было, только одному разделу, но может я ошибаюсь. Сейчас будет куча 404 ошибок и потеря поискового трафика. Почему же так сделали, чтоб catalogfill генерировал урлы отличные от системы, не понятно.

    К сожалению, я не знаю, как можно привести генерацию урлов к едниному виду через filter_import($value_arr).

    Неужели, раньше этот вопрос никого не интересовал.

  • @CIAO
    Ну так стоит разбираться в том что делаете прежде чем делать. И никогда на боевом не делайте ничего без сохранения.

    Рекомендую следующее

    1. Откатите систему.

    2. Сделайте локальный тестовый вариант openserver, например

    3. Загрузите с помощью catalogfill и определите в чем отличия.

    4. Залезьте в \core\components\catalogfill\model\catalogfill.class.php

    Функция makeAlias и поправьте как вам нужно:

        public function makeAlias($str){
            $str = mb_strtolower($str, mb_detect_encoding($str));
            $str = strtr($str, 
                array(
                    " "=>"-", "."=>"_", ","=>"", "$"=>"", "?"=>"", "!"=>"", "\""=>"", "'"=>"", "/"=>"",
                    "\\"=>"", "("=>"", ")"=>"", "{"=>"", "}"=>"", "["=>"", "]"=>"", "+"=>"p", "&"=>"",
                    "?"=>"", "!"=>"", "«"=>"", "»"=>"", "%"=>""
                )
            );
            if($this->config['imp_autoalias'] !== 'notranslit'){
              $str = strtr($str, 
                  array(
                      "а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"yo","ж"=>"zh","з"=>"z",
                      "и"=>"i","й"=>"y","к"=>"k","л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
                      "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch",
                      "ь"=>"","ъ"=>"","ы"=>"y","э"=>"e","ю"=>"yu","я"=>"ya"
                  )
              );
            }
            return $str;
        }
        
    
    1. Чтобы в будущем каждый раз при обновлении catalogfill не лезть в эту функцию, разберитесь как править через filter_import($value_arr).

    2. Разберитесь как настроить redirect в htaccess. Вам это еще много нервов сэкономит в будущем.

    Кстати, Андрей, вынесите, пожалуйста, функцию makeAlias в конфиг или сделеайте возможность ее поменять/расширить. Не первый раз такие вопросы встречаются.

  • Спасибо, буду пробовать. А можно посмотреть такой же скрипт правил генерации псевдонима в самой системе и там сравнить? Может знаете, где он находится?

  • @CIAO
    скорее всего core\components\translit\model\modx\translit\tables\russian.php

    и настройки

    
    friendly_alias_restrict_chars_pattern
    /[\0\x0B\t\n\r\f\a&=+%#<>"~:`@\?[]\{\}\|\^'\]/
    —
     friendly_alias_strip_element_tags
    Да
    —
     
    friendly_alias_translit
    russian
     
    
    friendly_alias_translit_class
    modx.translit.modTransliterate
    
     
    
    friendly_alias_trim_chars
    /.-_
    —
     
    
    friendly_alias_word_delimiter
    -
    —
     
    
    friendly_alias_word_delimiters
    -_
    —
     
    
    
  • @slaad Отдельно спасибо за подсказку с настройкой редиректов в htaccess. Настроил все через регулярку как надо.

  • Почему же так сделали, чтоб catalogfill генерировал урлы отличные от системы, не понятно.

    Для увеличения производительности. При импорте большого числа товаров это очень важно.

  • Появилась похожая проблема. Правда, в моем случае "обновить uri-ссылки" не работала и зависала с надписью "подождите..."

    Система была настроена на генерацию псевдонимов без вложенности.
    При импорте создавались документы с нужными алиасами, но они были доступны по ссылкам с вложенной структурой. Чтобы они заработали без вложенности, нужно было или зайти в этот документ и нажать кнопку "сохранить", или же в site_content изменить uri на нужный. Т. е. uri генерировались с вложенностью

    Решил данную проблему так:
    В файле core/components/catalogfill/model/catalogfill.class.php поменял:

    //$output = $this->config['parent_paths'][$fields['parent']].$fields['alias'].$this->config['extension'];
              $output = $fields['alias'].$this->config['extension'];
    

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

 

Последние комментарии

  • Добрый день! А сейчас на русском XML работает?

    Читать далее
  • Сам tmFilters не отображается хоть убей. Вывожу:

    Нужно показать где вы это выводите.

    Читать далее
  • @LoGruS ого, даже не ожидал, что спустя столько лет кто-то моими велосипедами воспользуется 😃 Благодарю за дополнения.

    Читать далее
  • M

    @Andchir
    Да, в TM2 в админке фильтр age включен. Все данные из TV подтянулись, все норм.

    Читать далее