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



  • URI попробовал обновить, не помогло.

    Плагинов нет, но у меня доработана сама генерация alias в файле настроек импорта. Может в этом дело. Вот такое у меня там есть:

    //функция для фильтрации значений при ИМПОРТЕ
    function filter_import($value_arr){
        $output_arr = $value_arr;
        
        if(isset($output_arr['content']))
            $output_arr['content']['alias'] = $output_arr['content']['alias'].'-'.$output_arr['tv']['5'];
            $output_arr['content']['pub_date'] = strtotime($output_arr['content']['pub_date']);
        return $output_arr;
    }
    

    Это сделано для уникализации урлов при одинаковых заголовках.



  • @CIAO нет, с функцией проблем нет.

    У вас товары документы modx? Как вы проверяете, что у вас урл не обновился? Папку с кешем удаляете после загрузки?

    Что выводится, когда на новой странице вызываете [[~123]] , где 123 id одного из загруженных доков?



  • Да, все страницы это стандартные документы modx. На сайте сейчас около 50 тыс. страниц.

    Проверяю обычно, просто смотрю, что в админке в поле alias написан один адрес сгенерированный catalogfill, а при нажатии на кнопку "просмотреть" переходишь на другой адрес, тот который сгенерировала система. Например, в админке есть в поле alias нижнее подчеркивание, а на самом деле его нет в фактическом адресе страницы. А вот если нажму в админке "Сохранить", то в строке alias меняется написание, на то как генерирует modx и это нижнее подчеркивание удаляется.

    Папку с кэшем не удалял, сейчас удалил, не помогло.

    При вызове [[~123]] выводится адрес страницы, который сгенерировала система, то есть не тот который перезалил сейчас через catalogfill и написан в поле alias.

    Идеально было бы сделать, чтобы catalogfill генерировал адреса такие же как и система modx, это очень нужно, может кто-нибудь делал такую синхронизацию?



  • Проблема в том, что catalogfill так и работает. Он перезаписывает alias, а modx из него формирует ссылку.
    Поэтому сложно представить то, что вы описываете.

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

    Еще попробуете отключить cache_alias_map, обновить кеш и из админки открыть документ.



  • @slaad и отключите friendly_alias_realtime - поставьте нет



  • @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'];
    

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



Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.