lie2
@lie2

Как вывести комментарии из CBlogComment и связать их с CBlogPost?

Всем доброго дня.
Использую код:
<?CModule::IncludeModule("blog"); 

// выберем все комментарии к сообщению с идентификатором 1
$arOrder = Array(
        "ID" => "desc",
        "DATE_CREATE" => "desc"
    );
$arFilter = Array(

    );
$arSelectedFields = Array("ID", "BLOG_ID", "POST_ID", "PARENT_ID", "AUTHOR_ID", "AUTHOR_NAME", "AUTHOR_EMAIL", "AUTHOR_IP", "AUTHOR_IP1", "TITLE", "POST_TEXT", "DATE_CREATE","USER_NAME");

$dbComment = CBlogComment::GetList($arOrder, $arFilter, false, false, $arSelectedFields);
while ($arComment = $dbComment->Fetch())
{
?>
<div><div>
	<strong style="color: slategray;"><?=$arComment["AUTHOR_NAME"]?></strong><strong><?=$arComment["USER_NAME"]?></strong>
	<p style="    background-color: #fff4ca;    padding-top: 2px;    padding-bottom: 3px;
    padding-left: 4px;    padding-right: 4px;    color: #767676;    display: inline;">
<?=$arComment["DATE_CREATE"]?></p> товару ///<?=$arPost["TITLE"]?>///</div>

<br>
<?=$arComment["POST_TEXT"]?><br>
<?=$arComment["POST_ID"]?>
</div>
<hr>
<br>
<br>
<?
}
?>

Все работает, однако есть следующая трудность: нужно вывести наименование товара и ссылку к нему.
Нужная инфа хранится в CBlogPost: TITLE и URL.
Ещё я знаю, что поле ID в CBlogPost = POST_ID в CBlogComment.

Как это правильно сделать?
  • Вопрос задан
  • 817 просмотров
Решения вопроса 1
@PetrPo
Что-то типа того
\Bitrix\Main\Loader::includeModule('iblock');
\Bitrix\Main\Loader::includeModule('blog');

$iblockId = 2;
$arPostsId = $arElements = $arPosts = [];

$dbRes = \Bitrix\Iblock\PropertyTable::getList([
    'select' => ['ID', 'CODE'],
    'filter' => [
        '=IBLOCK_ID' => $iblockId,
        '=PROPERTY_TYPE' => \Bitrix\Iblock\PropertyTable::TYPE_NUMBER,
        '=MULTIPLE' => 'N',
        '=CODE' => [CIBlockPropertyTools::CODE_BLOG_POST]
    ]
]);

if($arRes = $dbRes->Fetch()) {
    $propertyPostId = $arRes['ID'];
}

$dbRes = CIBlockElement::GetList(
    [],
    ['=IBLOCK_ID' => $iblockId, '!PROPERTY_'.$propertyPostId => false],
    false,
    false,
    ['ID', 'NAME', 'DETAIL_PAGE_URL', 'PROPERTY_'.$propertyPostId]
);

while($arRes = $dbRes->GetNext()) {
    $propertyPostValue = $arRes['PROPERTY_'.$propertyPostId.'_VALUE'];

    $arPostsId[] = $propertyPostValue;
    $arElements[$propertyPostValue] = $arRes;
}

$arPostsId = array_unique($arPostsId);

$dbRes = CBlogPost::GetList(
    ['ID' => 'DESC'],
    ['ID' => $arPostsId]
);

while($arRes = $dbRes->Fetch()) {
    $arPosts[$arRes['ID']] = $arRes;
}

$dbRes = CBlogComment::GetList(
    ['ID' => 'DESC'],
    ['POST_ID' => $arPostsId]
);

while($arRes = $dbRes->Fetch()) {
    $arPosts[$arRes['POST_ID']]['COMMENTS'][] = $arRes;
    $arPosts[$arRes['POST_ID']]['ELEMENT'] = $arElements[$arRes['POST_ID']];
}

print_r($arPosts);


UPD добавил CBlogPost::GetList
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы