2019-10-01 12:45:00
862

Если срочно требуется осуществить систему комментирования/отзывов, есть достаточно простой способ.

Записывать комментарии пользователей будем в инфоблок.

У меня на тестовом сайте создан инфоблок, в котором есть 2 раздела, комментарии и отзывы в зависимости от ситуации(страницы), комментарий записывается в один из разделов

Нам потребуется:

  • Форма для отправки комментариев
  • Файл в котором будет записываться комментарий в инфоблок
  • Файл где будут выводиться комментарии.
  • Подключить jQuery
  • js скрипт, который будет отправлять данные

Код под номером PHP #1 записывает комментарии в инфоблок. В моём случае получился инфоблок с ID 4 Вам нужно будет изменить Id

Код PHP #1


<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); // это подключаем если код ниже будет исполняться в отдельном файле php

CModule::IncludeModule('iblock');  // это подключит нужный класс для работы с инфоблоком

$el = new CIBlockElement; // обязательно указываем класс
$PROP = array();

$PORP[4] = $_POST['email']; // записываем email в свойство под id 4

$arLoadProductArray = Array( 
"ACTIVE_FROM" => date('d.m.Y H:i:s'), // обязательно нужно указать дату начала активности элемента
"MODIFIED_BY" => $USER->GetID(), // указываем какой пользователь добавил элемент
"IBLOCK_SECTION_ID" => 3, // В корне или нет
"IBLOCK_ID" => 4,              //  собственно сам id блока куда будем добавлять новый элемент
"NAME" => $_POST['name'], 
"ACTIVE" => "Y", // активен или  N не активен 
    "PREVIEW_TEXT" => $_POST['text'], // тест, который будет выводиться
"DETAIL_TEXT" => "", 
"PROPERTY_VALUES"=> $PROP,  // Добавим нашему элементу заданные свойства
"DETAIL_PICTURE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/images.png")  // ссылка на детальную картинку
); 

if($newElement = $el->Add($arLoadProductArray))  // с помощью Add добавляем новый элемент
echo "ID Нового элемента: ".$newElement; 
else 
echo "Error: ".$el->LAST_ERROR; 
?>

 

Код PHP #2 будет содержать вывод комментариев его же мы будем подключать с помощью include(); к странице

Код PHP #2


<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");?> 
<?$APPLICATION->IncludeComponent(
    "bitrix:news", 
    "template1", 
    array(
        "ADD_ELEMENT_CHAIN" => "N",
        "ADD_SECTIONS_CHAIN" => "Y",
        "AJAX_MODE" => "Y",
        "AJAX_OPTION_ADDITIONAL" => "",
        "AJAX_OPTION_HISTORY" => "N",
        "AJAX_OPTION_JUMP" => "N",
        "AJAX_OPTION_STYLE" => "Y",
        "BROWSER_TITLE" => "-",
        "CACHE_FILTER" => "N",
        "CACHE_GROUPS" => "Y",
        "CACHE_TIME" => "36000000",
        "CACHE_TYPE" => "A",
        "CHECK_DATES" => "Y",
        "DETAIL_ACTIVE_DATE_FORMAT" => "d.m.Y",
        "DETAIL_DISPLAY_BOTTOM_PAGER" => "Y",
        "DETAIL_DISPLAY_TOP_PAGER" => "N",
        "DETAIL_FIELD_CODE" => array(
            0 => "",
            1 => "",
        ),
        "DETAIL_PAGER_SHOW_ALL" => "Y",
        "DETAIL_PAGER_TEMPLATE" => "",
        "DETAIL_PAGER_TITLE" => "Страница",
        "DETAIL_PROPERTY_CODE" => array(
            0 => "",
            1 => "",
        ),
        "DETAIL_SET_CANONICAL_URL" => "N",
        "DISPLAY_BOTTOM_PAGER" => "Y",
        "DISPLAY_DATE" => "Y",
        "DISPLAY_NAME" => "Y",
        "DISPLAY_PICTURE" => "Y",
        "DISPLAY_PREVIEW_TEXT" => "Y",
        "DISPLAY_TOP_PAGER" => "N",
        "HIDE_LINK_WHEN_NO_DETAIL" => "N",
        "IBLOCK_ID" => "4",
        "IBLOCK_TYPE" => "comments",
        "INCLUDE_IBLOCK_INTO_CHAIN" => "Y",
        "LIST_ACTIVE_DATE_FORMAT" => "d.m.Y",
        "LIST_FIELD_CODE" => array(
            0 => "",
            1 => "",
        ),
        "LIST_PROPERTY_CODE" => array(
            0 => "",
            1 => "",
        ),
        "MESSAGE_404" => "",
        "META_DESCRIPTION" => "-",
        "META_KEYWORDS" => "-",
        "NEWS_COUNT" => "20",
        "PAGER_BASE_LINK_ENABLE" => "N",
        "PAGER_DESC_NUMBERING" => "N",
        "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
        "PAGER_SHOW_ALL" => "N",
        "PAGER_SHOW_ALWAYS" => "N",
        "PAGER_TEMPLATE" => ".default",
        "PAGER_TITLE" => "Новости",
        "PREVIEW_TRUNCATE_LEN" => "",
        "SEF_MODE" => "Y",
        "SET_LAST_MODIFIED" => "N",
        "SET_STATUS_404" => "N",
        "SET_TITLE" => "Y",
        "SHOW_404" => "N",
        "SORT_BY1" => "ACTIVE_FROM",
        "SORT_BY2" => "SORT",
        "SORT_ORDER1" => "DESC",
        "SORT_ORDER2" => "ASC",
        "STRICT_SECTION_CHECK" => "N",
        "USE_CATEGORIES" => "N",
        "USE_FILTER" => "N",
        "USE_PERMISSIONS" => "N",
        "USE_RATING" => "N",
        "USE_RSS" => "N",
        "USE_SEARCH" => "N",
        "USE_SHARE" => "N",
        "COMPONENT_TEMPLATE" => "template1",
        "SEF_FOLDER" => "/otzyvy/",
        "SEF_URL_TEMPLATES" => array(
            "news" => "",
            "section" => "",
            "detail" => "#ELEMENT_ID#/",
        )
    ),
    false
);?>

 

Код js #1 содержит скрипт для отправки текста, имени и email для записи в инфоблок. Ваша форма должна содержать такие поля с классами text, name, email, кнопка отправки должна иметь класс t-btns. На странице должен быть контейнер(div) с классом listOtsiv, здесь будут отображаться комментарии после обновления страницы.

Код Js #1


$(document).on('click', '.t-btns',function(e){
var post = 0;
var text = $('.text').val();
var name = $('.name').val();
var email = $('.email').val();

    $.ajax({  
type: "POST",  
url: "local/templates/.default/include/otsivAdd.php",  
data: {
text:text,
name:name, 
email:email
},  
success: function(r){
$('.text, .name, .email').val('');

    $.ajax({  
type: "GET",  
url: "local/templates/.default/include/otsivResult.php",  
data: {
post:post
},  
success: function(rList){
$('.listOtsiv').html(rList);
    } });
} });

})

 

Код PHP #3 должен находиться на странице вывода комментариев в контейнере с классом listOtsiv. Здесь подключается компонент новостей из PHP кода #3

Код PHP #3


<?include('local/templates/.default/include/otsivResult.php')?>
 

Если будут вопросы их можно задать в комментариях. Статья пока не полностью готова, но здесь освещены пока общие моменты. Спасибо за понимание!

Комментарии (44)