Добрый день!
Описание задачи: создал свой новый инфоблок новостей ID = 42. Нужно чтобы при добавления новости в него, они (новости) также попадали в живую ленту.
Я добавил в init.php обработчик но новости из моего инфоблока новостей в ЖЛ не попадают.
Кто может подсказать где ошибка?
Вот содержимое init.php
<?
// регистрируем обработчик
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("MyClass", "OnAfterIBlockElementAddHandler"));
class MyClass
{
// создаем обработчик события "OnAfterIBlockElementAdd"
function OnAfterIBlockElementAddHandler(&$arFields)
{
//здесь проверяем ID инфоблока из массива $arFields, если это ID инфоблока Пожеланий, используем код из статьи для добавления информации в живую ленту
if($arFields["ID"]==42)
{
AddEventHandler('socialnetwork', 'OnFillSocNetLogEvents', array('CSonetLogHandlers', 'OnFillSocNetLogEvents'));
AddEventHandler('socialnetwork', 'OnFillSocNetFeaturesList', array('CSonetLogHandlers', 'OnFillSocNetFeaturesList'));
AddEventHandler('socialnetwork', 'OnFillSocNetAllowedSubscribeEntityTypes', array('CSonetLogHandlers', 'OnFillSocNetAllowedSubscribeEntityTypes'));
}
}
}
class CSonetLogHandlers
{
public static function GetIBlockByID($ID)
{
if (CModule::IncludeModule('iblock'))
if ($arInfo = CIBlock::GetByID($ID)->GetNext())
return array('NAME_FORMATTED' => $arInfo['NAME'], 'URL' => $arInfo['LIST_PAGE_URL']);
}
public static function ShowEntityLink($arEntityDesc, $strEntityURL, $arParams)
{
return ''.$arEntityDesc['NAME_FORMATTED'].' ';
}
public static function OnFillSocNetLogEvents(&$arSocNetLogEvents)
{
$arSocNetLogEvents['news'] = array(
'ENTITIES' => array(
'MYNEWS' => array(
'TITLE' => 'Новости',
'TITLE_SETTINGS' => 'Все новости',
'TITLE_SETTINGS_1' => 'Уведомления о новостях',
'TITLE_SETTINGS_2' => 'Уведомления о новостях',
),
),
'CLASS_FORMAT' => 'CSonetLogHandlers',
'METHOD_FORMAT' => 'FormatEventNews'
);
}
public static function OnFillSocNetFeaturesList(&$arSocNetFeaturesSettings)
{
$arSocNetFeaturesSettings['news']['subscribe_events']['news']['ENTITIES']['MYNEWS'] = array();
}
public static function OnFillSocNetAllowedSubscribeEntityTypes(&$arSocNetAllowedSubscribeEntityTypes)
{
$arSocNetAllowedSubscribeEntityTypes[] = 'MYNEWS';
global $arSocNetAllowedSubscribeEntityTypesDesc;
$arSocNetAllowedSubscribeEntityTypesDesc['MYNEWS'] = array(
'TITLE_LIST' => 'Новости',
'CLASS_DESC_GET' => 'CSonetLogHandlers',
'METHOD_DESC_GET' => 'GetIBlockByID',
'CLASS_DESC_SHOW' => 'CSonetLogHandlers',
'METHOD_DESC_SHOW' => 'ShowEntityLink',
);
}
public static function FormatEventNews($arFields, $arParams, $bMail = false)
{
$arEventParams = unserialize(strlen($arFields['~PARAMS']) > 0 ? $arFields['~PARAMS'] : $arFields['PARAMS']);
$arResult = array('EVENT' => $arFields, 'ENTITY' => array(), 'URL' => '');
$arResult['ENTITY']['TYPE_MAIL'] = ' разделе';
if (!$bMail)
{
$arResult['ENTITY']['FORMATTED'] = array();
$arResult['ENTITY']['FORMATTED']['URL'] = $arEventParams['ENTITY_URL'];
$arResult['ENTITY']['FORMATTED']['NAME'] = $arEventParams['ENTITY_NAME'];
}
else
$arResult['ENTITY']['FORMATTED'] = 'Новости';
if (!$bMail)
$title = 'Добавлена новость'.$arFields['TITLE'].' ';
else
$title = 'Добавлена новость: ' . $arFields['TITLE'];
$arResult['EVENT_FORMATTED'] = array(
'TITLE' => $title,
'MESSAGE' => ($bMail ? CSocNetTextParser::killAllTags($arFields['MESSAGE']) : $arFields['MESSAGE']),
'IS_IMPORTANT' => true
);
if (!$bMail)
{
$arFieldsTooltip = array(
'ID' => $arFields['USER_ID'],
'NAME' => $arFields['~CREATED_BY_NAME'],
'LAST_NAME' => $arFields['~CREATED_BY_LAST_NAME'],
'SECOND_NAME' => $arFields['~CREATED_BY_SECOND_NAME'],
'LOGIN' => $arFields['~CREATED_BY_LOGIN'],
);
$arResult['CREATED_BY']['TOOLTIP_FIELDS'] = CSocNetLog::FormatEvent_FillTooltip($arFieldsTooltip, $arParams);
$arResult['AVATAR_SRC'] = CSocNetLog::FormatEvent_CreateAvatar($arFields, $arParams, 'CREATED_BY');
$arResult['EVENT_FORMATTED']['IS_MESSAGE_SHORT'] = CSocNetLog::FormatEvent_IsMessageShort($arFields['MESSAGE']);
$arResult['EVENT_FORMATTED']['URL'] = $arFields['URL'];
}
else
$arResult['EVENT_FORMATTED']['URL'] = 'http://' . $_SERVER['SERVER_NAME'] . $arFields['URL'];
return $arResult;
}
}
function AddToLog($elID, $entityType)
{
if (CModule::IncludeModule('socialnetwork') && CModule::IncludeModule('iblock'))
{
$arElfields = CIBlockElement::GetByID($elID)->GetNext(true, false);
$arIB = CIBlock::GetByID($arElfields['IBLOCK_ID'])->GetNext(true, false);
$site_id = $arIB['LID'];
$arSoFields = Array(
'SITE_ID' => $site_id,
'ENTITY_TYPE' => $entityType,
'ENTITY_ID' => $arElfields['IBLOCK_ID'],
'EVENT_ID' => $arIB['IBLOCK_TYPE_ID'],
'USER_ID' => $arElfields['CREATED_BY'],
'=LOG_DATE' => (
strlen($arElfields['ACTIVE_FROM']) > 0
?
(
MakeTimeStamp($arElfields['ACTIVE_FROM'], CSite::GetDateFormat('FULL', $site_id)) > time()
?
$GLOBALS['DB']->CharToDateFunction($arElfields['ACTIVE_FROM'], 'FULL', $site_id)
:
$GLOBALS['DB']->CurrentTimeFunction()
)
:
$GLOBALS['DB']->CurrentTimeFunction()
),
'TITLE_TEMPLATE' => 'Новость: #TITLE#',
'TITLE' => $arElfields['NAME'],
'MESSAGE' => $arElfields['PREVIEW_TEXT'],
'TEXT_MESSAGE' => '',
'URL' => $arElfields['DETAIL_PAGE_URL'],
'MODULE_ID' => 'iblock',
'CALLBACK_FUNC' => false,
'TMP_ID' => false,
'PARAMS' => serialize(array(
'ENTITY_NAME' => $arIB['NAME'],
'ENTITY_URL' => $arIB['LIST_PAGE_URL']
))
);
$logID = CSocNetLog::Add($arSoFields, false);
if (intval($logID) > 0)
{
CSocNetLog::Update($logID, array('TMP_ID' => $logID));
CSocNetLog::SendEvent($logID, 'SONET_NEW_EVENT');
}
}
}
?>
Описание задачи: создал свой новый инфоблок новостей ID = 42. Нужно чтобы при добавления новости в него, они (новости) также попадали в живую ленту.
Я добавил в init.php обработчик но новости из моего инфоблока новостей в ЖЛ не попадают.
Кто может подсказать где ошибка?
Вот содержимое init.php
<?
// регистрируем обработчик
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("MyClass", "OnAfterIBlockElementAddHandler"));
class MyClass
{
// создаем обработчик события "OnAfterIBlockElementAdd"
function OnAfterIBlockElementAddHandler(&$arFields)
{
//здесь проверяем ID инфоблока из массива $arFields, если это ID инфоблока Пожеланий, используем код из статьи для добавления информации в живую ленту
if($arFields["ID"]==42)
{
AddEventHandler('socialnetwork', 'OnFillSocNetLogEvents', array('CSonetLogHandlers', 'OnFillSocNetLogEvents'));
AddEventHandler('socialnetwork', 'OnFillSocNetFeaturesList', array('CSonetLogHandlers', 'OnFillSocNetFeaturesList'));
AddEventHandler('socialnetwork', 'OnFillSocNetAllowedSubscribeEntityTypes', array('CSonetLogHandlers', 'OnFillSocNetAllowedSubscribeEntityTypes'));
}
}
}
class CSonetLogHandlers
{
public static function GetIBlockByID($ID)
{
if (CModule::IncludeModule('iblock'))
if ($arInfo = CIBlock::GetByID($ID)->GetNext())
return array('NAME_FORMATTED' => $arInfo['NAME'], 'URL' => $arInfo['LIST_PAGE_URL']);
}
public static function ShowEntityLink($arEntityDesc, $strEntityURL, $arParams)
{
return '
}
public static function OnFillSocNetLogEvents(&$arSocNetLogEvents)
{
$arSocNetLogEvents['news'] = array(
'ENTITIES' => array(
'MYNEWS' => array(
'TITLE' => 'Новости',
'TITLE_SETTINGS' => 'Все новости',
'TITLE_SETTINGS_1' => 'Уведомления о новостях',
'TITLE_SETTINGS_2' => 'Уведомления о новостях',
),
),
'CLASS_FORMAT' => 'CSonetLogHandlers',
'METHOD_FORMAT' => 'FormatEventNews'
);
}
public static function OnFillSocNetFeaturesList(&$arSocNetFeaturesSettings)
{
$arSocNetFeaturesSettings['news']['subscribe_events']['news']['ENTITIES']['MYNEWS'] = array();
}
public static function OnFillSocNetAllowedSubscribeEntityTypes(&$arSocNetAllowedSubscribeEntityTypes)
{
$arSocNetAllowedSubscribeEntityTypes[] = 'MYNEWS';
global $arSocNetAllowedSubscribeEntityTypesDesc;
$arSocNetAllowedSubscribeEntityTypesDesc['MYNEWS'] = array(
'TITLE_LIST' => 'Новости',
'CLASS_DESC_GET' => 'CSonetLogHandlers',
'METHOD_DESC_GET' => 'GetIBlockByID',
'CLASS_DESC_SHOW' => 'CSonetLogHandlers',
'METHOD_DESC_SHOW' => 'ShowEntityLink',
);
}
public static function FormatEventNews($arFields, $arParams, $bMail = false)
{
$arEventParams = unserialize(strlen($arFields['~PARAMS']) > 0 ? $arFields['~PARAMS'] : $arFields['PARAMS']);
$arResult = array('EVENT' => $arFields, 'ENTITY' => array(), 'URL' => '');
$arResult['ENTITY']['TYPE_MAIL'] = ' разделе';
if (!$bMail)
{
$arResult['ENTITY']['FORMATTED'] = array();
$arResult['ENTITY']['FORMATTED']['URL'] = $arEventParams['ENTITY_URL'];
$arResult['ENTITY']['FORMATTED']['NAME'] = $arEventParams['ENTITY_NAME'];
}
else
$arResult['ENTITY']['FORMATTED'] = 'Новости';
if (!$bMail)
$title = 'Добавлена новость
else
$title = 'Добавлена новость: ' . $arFields['TITLE'];
$arResult['EVENT_FORMATTED'] = array(
'TITLE' => $title,
'MESSAGE' => ($bMail ? CSocNetTextParser::killAllTags($arFields['MESSAGE']) : $arFields['MESSAGE']),
'IS_IMPORTANT' => true
);
if (!$bMail)
{
$arFieldsTooltip = array(
'ID' => $arFields['USER_ID'],
'NAME' => $arFields['~CREATED_BY_NAME'],
'LAST_NAME' => $arFields['~CREATED_BY_LAST_NAME'],
'SECOND_NAME' => $arFields['~CREATED_BY_SECOND_NAME'],
'LOGIN' => $arFields['~CREATED_BY_LOGIN'],
);
$arResult['CREATED_BY']['TOOLTIP_FIELDS'] = CSocNetLog::FormatEvent_FillTooltip($arFieldsTooltip, $arParams);
$arResult['AVATAR_SRC'] = CSocNetLog::FormatEvent_CreateAvatar($arFields, $arParams, 'CREATED_BY');
$arResult['EVENT_FORMATTED']['IS_MESSAGE_SHORT'] = CSocNetLog::FormatEvent_IsMessageShort($arFields['MESSAGE']);
$arResult['EVENT_FORMATTED']['URL'] = $arFields['URL'];
}
else
$arResult['EVENT_FORMATTED']['URL'] = 'http://' . $_SERVER['SERVER_NAME'] . $arFields['URL'];
return $arResult;
}
}
function AddToLog($elID, $entityType)
{
if (CModule::IncludeModule('socialnetwork') && CModule::IncludeModule('iblock'))
{
$arElfields = CIBlockElement::GetByID($elID)->GetNext(true, false);
$arIB = CIBlock::GetByID($arElfields['IBLOCK_ID'])->GetNext(true, false);
$site_id = $arIB['LID'];
$arSoFields = Array(
'SITE_ID' => $site_id,
'ENTITY_TYPE' => $entityType,
'ENTITY_ID' => $arElfields['IBLOCK_ID'],
'EVENT_ID' => $arIB['IBLOCK_TYPE_ID'],
'USER_ID' => $arElfields['CREATED_BY'],
'=LOG_DATE' => (
strlen($arElfields['ACTIVE_FROM']) > 0
?
(
MakeTimeStamp($arElfields['ACTIVE_FROM'], CSite::GetDateFormat('FULL', $site_id)) > time()
?
$GLOBALS['DB']->CharToDateFunction($arElfields['ACTIVE_FROM'], 'FULL', $site_id)
:
$GLOBALS['DB']->CurrentTimeFunction()
)
:
$GLOBALS['DB']->CurrentTimeFunction()
),
'TITLE_TEMPLATE' => 'Новость: #TITLE#',
'TITLE' => $arElfields['NAME'],
'MESSAGE' => $arElfields['PREVIEW_TEXT'],
'TEXT_MESSAGE' => '',
'URL' => $arElfields['DETAIL_PAGE_URL'],
'MODULE_ID' => 'iblock',
'CALLBACK_FUNC' => false,
'TMP_ID' => false,
'PARAMS' => serialize(array(
'ENTITY_NAME' => $arIB['NAME'],
'ENTITY_URL' => $arIB['LIST_PAGE_URL']
))
);
$logID = CSocNetLog::Add($arSoFields, false);
if (intval($logID) > 0)
{
CSocNetLog::Update($logID, array('TMP_ID' => $logID));
CSocNetLog::SendEvent($logID, 'SONET_NEW_EVENT');
}
}
}
?>