Последние темы


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

  • Добрый день. Как можно массово изменить (обновить) alias у документов через catalogfill, чтобы он сгенерировал alias по своему и изменил url документов.

  • А чем вас функция imp_autoalias не устроила?

    //автоматически генерировать псевдоним (alias) при импорте
    //false - выключено; true - генерировать с переводом в транслит; 'notranslit' - генерировать без перевода в транслит.
    $cf_config['imp_autoalias'] = true;
    
  • Через нее обновляется у меня так: alias меняется в админке, а url у страницы не меняется. Только если зайдешь на страницу через админку и нажмешь сохранить, тогда меняется url.

  • а у вас никаких дурацких SEO плагинов не установлено?
    Типа stricturls и тп?
    По умолчанию должно простое обновление кеша помогать. Попробуйте зайти в управление ->очистить кеш -> обновить uri.

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

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

 

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

  • Что нового в Shopkeeper 4.0.3:

    Исправлено некорректное определение языка по умолчанию В настройках в админке скрываются пароли. Добавлена возможность загружать картинки для категорий. shopkeeper.js - добавлена функция updateProductsPrice() для поддержки текстовых полей для цены. Twig-функции contentList() и includeContent() вынесены в отдельный класс. Добавлено событие "order.before_create". Сортировка всех полей типа контента перетаскиванием. Автоматическое сохранение сортировки полей при сохранении типа контента (не нужно нажимать на отдельную кнопку). В интерфейсе админа добавлено поле поиска для списка Composer-пакетов.

    Скачать можно на главной странице https://modx-shopkeeper.ru/

    Читать далее
  • Вот этот плагин:
    0_1550334109280_screenshot_022.png

    Вроде по умолчанию он выключен. Надо включить. Но плагин работает только на редактирование товаров, при удалении он делалать ничего не будет. Только что проверил кнопку, всё работает корректно, фильтры удаляются и добавляются, когда нужно. Но нужно очищать корзину после удаления товаров (возможно баг).

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

    @Andchir Если нажимаю кнопочку "Обновить значения", то в фильтрах появляются как раз те самые удаленные значения фильтра.. Потом приходится Ручками выбирать эти удаленные значения.
    вот так выглядит Управление фильтрами когда удаляешь ручками: https://yadi.sk/i/_zw64CGkZ_sAYg
    А вот так выглядит когда просто нажимаешь "Обновить значения": https://yadi.sk/i/7WFbXC6xV5sQAw (красным выделено, то что приходится постоянно удалять

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

    Участник @Jokerit написал в TagManager2 отображает в фильтре удаленные значения TV-полей:

    tmRefresh

    Так и не смог найти как включить

    Читать далее