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

25.05.2018  11:48

В догонку к записи перенос записей из Joomla в Битрикс сделал скрипт переноса комментариев из богомерзкой Joomla в Битрикс.

Первым делом скопируем таблицу jos_jcomments (комменты) и jos_jshopping_products (товары) из базы Джумлы в базу Битрикса. Скрипт переноса комментов:

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 = 12;
$c = 0;
$c_empty = 0;
CModule::IncludeModule('iblock');
CModule::IncludeModule('blog');
CModule::IncludeModule('user');
global $USER;
if (!$USER->IsAdmin()){
exit;
}
// $UserIP = CBlogUser::GetUserIP();
$strSql = "SELECT * FROM `jos_jcomments` ORDER BY `id`";// LIMIT 1
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
$array=array();
while ($row = $res->Fetch())
{
$product_id = $row['object_id'];
$name = $row['name'];
if (empty($name)) $name = $row['username'];
$email = $row['email'];
$comment = $row['comment'];
$date = $row['date'];
$ip = $row['ip'];
$published = $row['published'];
////// check joomla product
$strSqlProd = "SELECT * FROM `jos_jshopping_products` WHERE `product_id`='{$product_id}' LIMIT 1";
$resProd = $DB->Query($strSqlProd, false, $err_mess.__LINE__);
while ($rowProd = $resProd->Fetch())
{
	$propuct_name = $rowProd["name_ru-RU"];
	if (!empty($propuct_name)) {
		/////// check bitrix product
		$arSelect = array(
				"ID",
				"NAME",
				"IBLOCK_ID",
				"IBLOCK_SECTION_ID",//added
				"PROPERTY_BLOG_POST_ID",//added
				"CODE",
				//"PROPERTY_USER_LAST_NAME",//added
			);
			$arFilter = array(
				"IBLOCK_ID" => $IBLOCK_ID,
				"IBLOCK_ACTIVE" => "Y",
				//"IBLOCK_SECTION_ID" => 17,
				"=NAME" => $propuct_name,
				// "=PROPERTY_COD" => false,//$USER->GetId(),
				"ACTIVE_DATE" => "Y",
				"ACTIVE" => "Y",
			);
			$r = CIBlockElement::GetList(
				array(), 
				$arFilter, 
				false, 
				false, 
				$arSelect
			);
while ( $arCurrentItem = $r->GetNext() ) {
if (empty($arCurrentItem["PROPERTY_BLOG_POST_ID_VALUE"])) {//костыль если BLOG_POST_ID пустой - создать пост и обновить товар
///////// create post
$arFieldsNewPost = array(
    "TITLE" => $arCurrentItem["NAME"],
    "DETAIL_TEXT" => $arCurrentItem["NAME"],
    "BLOG_ID" => 1,
    "AUTHOR_ID" => 1,//$USER->GetID,
    // "AUTHOR_NAME" => "admin",
    "=DATE_CREATE" => $DB->GetNowFunction(),
    "DATE_PUBLISH" => ConvertTimeStamp(false, "FULL"),//$DB->GetNowFunction(),
    "PUBLISH_STATUS" => 'Y',//BLOG_PUBLISH_STATUS_PUBLISH,
    "ENABLE_TRACKBACK" => 'N',
    "ENABLE_COMMENTS" => 'Y',
    // "CATEGORY_ID" => $CATEGORY_ID,
    // "PERMS_P" => Array("1" => BLOG_PERMS_READ, "2" => BLOG_PERMS_READ),
    // "PERMS_C" => Array("1" => BLOG_PERMS_READ, "2" => BLOG_PERMS_WRITE)
);
$newIDPost = CBlogPost::Add($arFieldsNewPost);
if(IntVal($newIDPost)>0)
{
    // foreach($CATEGORY_ID as $v)
        // CBlogPostCategory::Add(Array("BLOG_ID" => 1, "POST_ID" => $newID, "CATEGORY_ID"=>$v));
    // echo "Новое сообщение [".$newIDPost."] добавлено.";
}
else
{
    if ($ex = $APPLICATION->GetException())
        echo $ex->GetString();
}
///////// create post END
///////// update product
$obE = new CIBlockElement();
$arFields_update = Array(
	"ACTIVE" => "Y",
	"IBLOCK_ID" => $IBLOCK_ID,
	// "NAME" => $name,
	// "CODE" => $code,
	// "SECTION_ID" => $section,
	// "IBLOCK_SECTION_ID" => $section,
	// "PREVIEW_TEXT" => $atext,
	// "PREVIEW_TEXT_TYPE" => 'html',
	// "DETAIL_TEXT" => $text,
	// "DETAIL_TEXT_TYPE" => 'text',//вдруг понадобятся
);
if ($obE->Update($arCurrentItem["ID"], $arFields_update)){
	//echo ''.$name.' update
'; $arProps["BLOG_POST_ID"] = $newIDPost; $arCurrentItem["PROPERTY_BLOG_POST_ID_VALUE"] = $newIDPost; // if (!empty($arProps)) CIBlockElement::SetPropertyValuesEx($arCurrentItem["ID"], $IBLOCK_ID, $arProps); unset($arProps); } ///////// update product END } if (!empty($arCurrentItem["PROPERTY_BLOG_POST_ID_VALUE"])) { ///// check comment $arOrder = Array( "ID" => "ASC", "DATE_CREATE" => "ASC" ); $arFilterComment = Array( "POST_ID"=>$arCurrentItem["PROPERTY_BLOG_POST_ID_VALUE"], "AUTHOR_NAME"=>$name, "AUTHOR_EMAIL"=>$email, "POST_TEXT"=>$comment, ); $arSelectedFields = Array("ID", "BLOG_ID", "POST_ID", "PARENT_ID", "AUTHOR_ID", "AUTHOR_NAME", "AUTHOR_EMAIL", "AUTHOR_IP", "AUTHOR_IP1", "TITLE", "POST_TEXT", "DATE_CREATE"); $dbComment = CBlogComment::GetList($arOrder, $arFilterComment, false, false, $arSelectedFields); if ($arComment = $dbComment->Fetch()) { //update если нужен } else { ////////// comment add if ($published == '1') { $stmp = MakeTimeStamp($date, "YYYY-MM-DD HH:MI:SS"); $arFields = array( // "TITLE" => '', "POST_TEXT" => $comment, "BLOG_ID" => 1, "POST_ID" => $arCurrentItem["PROPERTY_BLOG_POST_ID_VALUE"], "PARENT_ID" => 0, //комментарий привязан к сообщению // "AUTHOR_ID" => $USER->GetID(), //добавляем неанонимный комментарий, //в противном случае необходимо задать AUTHOR_NAME, AUTHOR_EMAIL "AUTHOR_NAME" => $name, "AUTHOR_EMAIL" => $email, "DATE_CREATE" => ConvertTimeStamp($stmp, "FULL"),//$date,//ConvertTimeStamp(false, "FULL"), "AUTHOR_IP" => $ip, // "AUTHOR_IP1" => $UserIP[1] ); $newID = CBlogComment::Add($arFields); if(IntVal($newID)>0) { echo "Новый комментарий [".$newID."] добавлен."; } else { if ($ex = $APPLICATION->GetException()) echo $ex->GetString(); } } } $c++; } else {$c_empty++;} } /////// check bitrix product END } } ////// check product END } echo 'ok: '.$c.'
'; echo 'err: '.$c_empty.'
';
Андрей Панёвин
Здравствуйте! Я — Андрей Панёвин и занимаюсь профессиональной разработкой сайтов на платформе 1С-Битрикс (исключительно программирование). Есть вопросы по статье? Могу подсказать и помочь по скайпу (andrey.panevin.ru), WhatsApp (+7-911-091-0670) или перепиской в ВК.
1000 р./час.



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

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


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

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


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