Наверх

Импорт правил для autoRedirector из CSV

Загружаем CSV в папку assets/components/autoredirector/. В этой же папке создаём файл, в котором указываем имя файла для импорта. Открываем файл в браузере.
<?php
define('MODX_API_MODE', true);
require dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php';

if (($handle = fopen(dirname(__FILE__) . '/import.csv', "r")) !== FALSE) {
    $modelPath = $modx->getOption('autoredirector_core_path',null,$modx->getOption('core_path').'components/autoredirector/').'model/';
    $modx->addPackage('autoredirector', $modelPath);
    $processorProps = array('processors_path' => $modx->getOption('autoredirector_core_path',null,$modx->getOption('core_path').'components/autoredirector/').'processors/');
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $uri = str_replace($modx->getOption('site_url'), '', $data[0]);
        $id = $data[1];
        $arRule = array('uri' => $uri, 'res_id' => $id);
        if (!$modx->getObject('arRule', $arRule)) {
            $response = $modx->runProcessor('mgr/item/create', $arRule, $processorProps);
            if ($response->isError()) {
                print '<span style="color: #c00;">AutoRedirector creating error. Message: ' .
                $response->getMessage() . '<br></span>';
                $modx->error->reset();
            } else {
                print '<span style="color: #060;">AutoRedirector created rule. URL: ' .
                $uri . '<br></span>';
            }
        } else {
            print '<span style="color: #666;">AutoRedirector rule dublicate. URL: ' .
            $uri . '<br></span>';
        }
    }
    fclose($handle);
}


11 комментариев

  1. Владимир Новопашин 04 июля 2016, 11:58 # 0
    Вот тут указано следующее:
    $arRule = array('uri' => $uri, 'res_id' => $id);
    А затем используется проверка
    if (!$modx->getObject('arRule', $arRule))
    Но если у нас допустим уже есть ссылка «test/» указывающая на ресурс с id = 2, а мы попытаемся добавить ссылку «test/», указывающую на ресурс 3, она же должна будет создаться? Я правильно понимаю? И как в таком случае поведет себя autoRedirector, если будем обращаться к ссылке «test/»?
    1. Илья Уткин 04 июля 2016, 12:09 # 0
      Хм… я думаю, что правило-то будет создано, но работать будет то, которое создано раньше, то есть редирект будет на id = 2
      1. Владимир Новопашин 04 июля 2016, 12:38 # 0
        Тогда наверное лучше использовать проверку
        if (!$modx->getObject('arRule', array('uri' => $arRule['uri'])))
        И как раз будет выдавать дублирование правила.
        1. Илья Уткин 04 июля 2016, 14:42 # 0
          Да, можно так. А можно при обнаружении дублирования использовать процессор update — чтобы правило перезаписывалось.
    2. Андрей 30 сентября 2016, 10:11 # 0
      Добрый день, Илья. Столкнулся с проблемой, написал пост здесь. Там предложили решение, но не пойму в каком виде должен быть csv файл, какие колонки в него нужно включить?
      Или может что-то подскажете по моей проблеме другое?
      1. Илья Уткин 30 сентября 2016, 10:30 # 0
        В CSV только 2 столбца должны быть — URL и id ресурса
        1. Андрей 30 сентября 2016, 10:31 # 0
          Ага, а url именно полным должен быть или только alias ресурса?
          1. Илья Уткин 30 сентября 2016, 10:33 # 0
            Полный, старый URL
            1. Андрей 30 сентября 2016, 11:00 # 0
              Илья, подскажите, пожалуйста. Чего-то я накосепорил)))
              Вот такой файл csv
              prntscr.com/co2kcd
              А вот такие правила получились))
              prntscr.com/co2kgc
              1. Илья Уткин 30 сентября 2016, 11:28 # 0
                Эту строчку
                while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                надо заменить на
                while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
                (запятую на точку с запятой)
      2. Андрей 30 сентября 2016, 10:38 # 0
        Хорошо, спасибо, Илья.

        Авторизация

        через сервис Loginza:


        Шаблоны MODX

        1 2 Дальше »

        Объектная
        модель
        MODX