Массовое создание элементов

Есть текстовый файл вида
имя элемента | описание элемента | категория элемента
на несколько сотен строк. можно как-то из него создать аналогичное количество ресурсов в MODX соответственно
[[*pagetitle]]= имя элемента
[[*description]] = описание элемента
TV-параметр = категория элемента
Андрей
03 января 2018, 10:55
modx.pro
3
2 277
0

Комментарии: 9

Михаил
03 января 2018, 14:09
0
Да, можно. Это CSV?
    Андрей
    03 января 2018, 14:13
    0
    Да. Оригинал в табличке xls, оттуда можно с любыми разделителями сформировать.
      Михаил
      03 января 2018, 14:15
      +1
      А тогда конечно можно. напишите в телеграм Electricaev
        Андрей
        05 января 2018, 02:43
        0
        в итоге получился вот такой код
        $csv = array_map('str_getcsv', file(MODX_ASSETS_PATH . 'user.csv'));
        
        foreach($csv as $key){
            $key = str_getcsv($key[0], ';');
        }
        
          for ($i = 0; $i <= count($key)-1; $i++) 
          { 
                $response = $modx->runProcessor('resource/create', array(
        	'pagetitle' => $key[$i],
        	'longtitle' => $key[$i+1],
        	'description' => '',
        	'introtext' => '',
        	'content' => '',
        	'alias' => $key[$i],
        	'template' => 3,
        	'published' => 1,
        	'parent' => 2,
        	'hidemenu' => 1
        	
        ));    
            $i=$i+1;
        для простоты я пока оставил только 2 поля, все равно планируется регулярное обновление тогда и добавлю TV параметр.
        Все работает, только почему-то за раз добавляется 145 ресурсов. Это конечно лучше чем по одному и руками, но все равно хочется разобраться как это делать для любого количества элементов.
          Михаил
          05 января 2018, 07:29
          0
          А через что выполняешь? Веб или консоль?
            Андрей
            05 января 2018, 18:44
            0
            в общем прошлый скрипт почему-то работал до первой запятой в тексте и требовал csv в одну строку, в процессе борьбы с этими проблемами скрипт чуть изменился. Вот итоговый вариант, может кому пригодится. Создал 900 страниц за 1 минуту
            <?php
            require_once '/путь/до/data/www/конфига/config.core.php';
            require_once MODX_CORE_PATH.'model/modx/modx.class.php';
            $modx = new modX();
            $modx->initialize('web');
            $modx->getService('error','error.modError', '', '');
            $csvArray = array();
            $csvData = file_get_contents(MODX_ASSETS_PATH . 'file.csv');
            $lines = explode(PHP_EOL, $csvData);
            foreach ($lines as $line) {
            	$csvArray[] = str_getcsv($line, ';');
            }
            
              for ($i = 0; $i <= count($csvArray)-1; $i++) 
              { 
            	$response = $modx->runProcessor('resource/create', array(
            		'pagetitle' => $csvArray[$i][0],
            		'description' => 'описание '.$csvArray[$i][0],
            		'tv1' => $csvArray[$i][1],
            		'tv2' => $csvArray[$i][2],
            		'introtext' => '',
            		'content' => '',
            		'alias' => 'info-'.$csvArray[$i][0],
            		'template' => 3,
            		'published' => 1,
            		'parent' => 2,
            		'hidemenu' => 1
            	));    
              }
              ?>
            скрипт нужно положить где-то на сервере и запустить через консоль
            php /путь/до/скрипта/скрипт.php
            соответственно он из файла file.csv создаст кучу ресурсов.
            Спасибо Михаилу за помощь!
              Михаил
              05 января 2018, 20:29
              0
              Не за что)
                Никита Серов
                09 июля 2018, 13:03
                0
                Скрипт будет работать на версии 2.6.4? Пытаюсь выполнить, не получается, не создаются ресурсы.
                  Андрей
                  09 июля 2018, 13:25
                  0
                  А почему нет? Все должно работать и в следующей версии. В 3.* наверное не будет.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      9