Массовое создание элементов
Есть текстовый файл вида
[[*pagetitle]]= имя элемента
[[*description]] = описание элемента
TV-параметр = категория элемента
имя элемента | описание элемента | категория элемента
на несколько сотен строк. можно как-то из него создать аналогичное количество ресурсов в MODX соответственно[[*pagetitle]]= имя элемента
[[*description]] = описание элемента
TV-параметр = категория элемента
Комментарии: 9
Да, можно. Это CSV?
Да. Оригинал в табличке xls, оттуда можно с любыми разделителями сформировать.
А тогда конечно можно. напишите в телеграм Electricaev
в итоге получился вот такой код
Все работает, только почему-то за раз добавляется 145 ресурсов. Это конечно лучше чем по одному и руками, но все равно хочется разобраться как это делать для любого количества элементов.
$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 ресурсов. Это конечно лучше чем по одному и руками, но все равно хочется разобраться как это делать для любого количества элементов.
А через что выполняешь? Веб или консоль?
в общем прошлый скрипт почему-то работал до первой запятой в тексте и требовал 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 создаст кучу ресурсов.Спасибо Михаилу за помощь!
Не за что)
Скрипт будет работать на версии 2.6.4? Пытаюсь выполнить, не получается, не создаются ресурсы.
А почему нет? Все должно работать и в следующей версии. В 3.* наверное не будет.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.