Перенос записей из Joomla в Битрикс

24.05.2018  09:23

Я как-то описывал как из Wordpress перенести записи в Битрикс. Под Joomla придумал другое решение, на мой взгляд более простое.

Первым делом в базу Битрикса копирнём таблицу jos_content из базы Джумлы. Из этой таблицы мне нужны только поля: title (название), alias (код для урлы), introtext (текст) и created (дата создания). Я переносил только новости, записи с sectionid = 2 (id может быть другим).

Скрипт переноса записей из Joomla в Bitrix:
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
// подключим пролог, куда ж без него
set_time_limit(0);
ini_set('max_execution_time', '3600');
ini_set('memory_limit', '512M');
$IBLOCK_ID = 1;
$c = 0;
$c_empty = 0;
CModule::IncludeModule("iblock");
$obE = new CIBlockElement();
global $USER;
if (!$USER->IsAdmin()){
exit;//проверка на админа
}
// выберем записи из джумловской базы:
$strSql = "SELECT * FROM `jos_content` WHERE `sectionid`='2' ORDER BY `id`";// LIMIT 1
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
$array=array();
while ($row = $res->Fetch())
{
// echo $row['NAME'];//выводим все значения, которые вернул запрос
// array_push($array, $row);//если исключили создание массива, то исключите и эту строку, тут мы создаем массив со всеми значениями которые вернул запрос, чтобы потом этот массив использовать в любых целях.
	$name = $row['title'];
	$code = $row['alias'];
	$text = $row['introtext'];
	$date = $row['created'];
	// if (empty($name)) $name = $row['username'];
	// конвертнём дату:
	list($day,$time) = explode(' ',$date);
	list($year,$month,$dayc) = explode('-',$day);
	$date = $dayc.'.'.$month.'.'.$year.' '.$time;
	if ($row['state'] == '0') $active = "N";
	else $active = "Y";
	if (empty($code)) {
		$arParams = array("replace_space"=>"-","replace_other"=>"-");
		$code = Cutil::translit($name,"ru",$arParams);
	}
	// проверим записи на наличие и если есть, то обновим, а если нет - добавим
	$arSelect = array(
		"ID",
		"NAME",
		"IBLOCK_ID",
		"IBLOCK_SECTION_ID",//added
		"*",//added
		"DETAIL_TEXT",
		"ACTIVE",
		"ACTIVE_DATE",
		"SORT",
		"DETAIL_PICTURE"
	);
	$arFilter = array(
		"IBLOCK_ID" => $IBLOCK_ID,
		"IBLOCK_ACTIVE" => "Y",
		"CODE" => $code,
		//"ACTIVE_DATE" => "Y",
		//"ACTIVE" => "Y",
	);
	$r = CIBlockElement::GetList(
		array(), 
		$arFilter, 
		false, 
		false, 
		$arSelect
	);
	$arFields = Array(
		"ACTIVE" => $active,
		"IBLOCK_ID" => $IBLOCK_ID,
		"NAME" => $name,
		"CODE" => $code,
		// "PREVIEW_TEXT" => $atext,
		// "PREVIEW_TEXT_TYPE" => 'html',
		"DETAIL_TEXT" => $text,
		"DETAIL_TEXT_TYPE" => 'html',
		"DATE_CREATE" => $date,
		"DATE_ACTIVE_FROM" => $date,
		// "IPROPERTY_TEMPLATES"=>Array(
		// "ELEMENT_META_TITLE" => $title,
		// "ELEMENT_META_DESCRIPTION" => $description,
		// "ELEMENT_META_KEYWORDS" => $keywords,
		// )//вдруг понадобится и title/description заполнить автоматом
	);
	if ( $arCurrentItem = $r->GetNext() ) {//update
		$arFields_update = $arFields;
		// if (empty($name)) $name = 'Без названия';
		$obE->Update($arCurrentItem["ID"], $arFields_update);
		echo ''.$name.' update
'; } else {//insert $arFields_insert = $arFields; $arFields_insert["CODE"] = $code; // $arFields_insert["SECTION_ID"] = $SECTION_ID; if ( $ID = $obE->Add($arFields_insert) ) { echo ''.$name.' add
'; $c++; } else { //echo "Error: ".$obE->LAST_ERROR;exit; //$this->out["error"][] = 'Ошибка добавления товара "' . $name . ' ' . $size . '"'; echo $name.' ошибка добавления
'; $count_err++; } } } echo 'count: '.$c;//счётчик

Т.к. скрипт и добавляет записи и обновляет, то можно добавить любые манипуляции, например пакетно заменять пути до картинок в тексте.

Всё, теперь у нас не говноадминка Joomla, а рассово-правильный 1С-Битрикс.


перейти в Блог | Блог (стр. 3)

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): 1С-Битрикс 44  Joomla 2  PHP 56  web-программирование 80  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю:
Имя


email (не публикуется)