UMI перенос новостей, со старого сайта.
Задача, перенести около 300 новостей с сайта, созданного на HTML в UMI.CMS. В umi я пока новичок так что жду от более опытных в этой сфере комментариев. Я пишу свой макрос в модуле импорта данных. Это ж все-таки импорт.
В папке classes\modules\exchange лежит файл __custom.php примерно такого содержания
Добавляем туда метод
Первое что нужно сделать, это распарсить HTML. У меня есть список страниц новостей и пара страниц со списком новостей, картинкой анонса и анонсом.
Поэтому я руками из 10 файлов собираю 1 (лень было написать скрипт =)), который состоит только из анонсов. И собираю всю информацию в массив. Потом пробегаюсь по всем файлам новостей(тут их более 300, ручками не катит) и сразу же запихиваю их в UMI не забыв при этом найти нужный анонс и запихнуть его тудаже.
Вроде все просто, вот код:
set_time_limit(0);
//Получаем страницу со всеми анонсами
$anonsAll = file_get_contents("anons/all.html");
//Вытягиваем 1 регуляркой сразу все анонсы с отделенными картинками, описанием и названием
preg_match_all('#<img.*?src="(.*?)".*?<a.*?>(.*?)</a>.*?(<p>.*?</p>)#is', $anonsAll, $arrayAnons, PREG_SET_ORDER);
//сканируем дирректорию и получаем все новости
$files1 = scandir('news_text');
//здесь мы получаем ID типа объекта новости.
$typesCollection = umiObjectTypesCollection::getInstance();
$typeId = $typesCollection->getBaseType('news', 'subject');
foreach ($files1 as $var) {
if ($var != "." && $var != "..") {
$content = iconv("windows-1251", "UTF-8", file_get_contents($dir . "/" . $var));
//Здесь я не стал заморачиваться 1 регуляркой, все равно код на 5 минут.
preg_match_all("#<h1>(.*?)</h1>#is", $content, $arrayItem);
$h1 = $arrayItem[1][0];
preg_match_all("#<p>.*</p>#is", $content, $arrayItem);
$text = $arrayItem[0][0];
preg_match_all('#<img.*?src="(.*?)".*?>#is', $content, $arrayItem);
$img = str_replace("/images/news/", "files/news/", $arrayItem[1][0]);
//Находим нужный анонс
foreach ($arrayAnons as $an) {
if (strtolower($h1) == strtolower($an[2])) {
$anons = $an[3];
$imgAnons = str_replace("/images/news/", "files/news/", $an[1]);
}
}
//Создаем новый пустой элемент (новую новость)
$h = umiHierarchy::getInstance();
$element_id = $h->addElement(37, 36, $h1, str_replace(".html", "", $var), $typeId);
//Ставим права.
$p = permissionsCollection::getInstance();
$users_array = array(298);//298 - это ID объекта "Гость"
foreach ($users_array as $k => $v) {
$p->setElementPermissions($v, $element_id, 1);
}
//Получаем только что созданный элемент
$element = $h->getElement($element_id, true, true);
//Задаем ему все параметры
$element->setIsActive();
$element->setValue('content', $text);
$element->setValue('anons', $anons);
$element->setValue('h1', $h1);
$element->setValue('anons_pic', $imgAnons);
$element->setValue('publish_pic', $img);
$element->commit();
}
}
}
Какие у меня проблемы возникли кроме поиска информации обо всем, об этом.
1) Что такое 36 в addElement? В документации написано что это id иерархического типа (umiHierarchyType). Что это за зверь такой я не понял, но по моему это не ID шаблона данных.
2) ID группы пользователей “Все” я тоже не знал где найти, сделал ID пользователя “Гость”
Остальное вроде все понятно. Удачи.