Вывести самый позитивный отзыв
106 / 177
Задача: в шаблоне элемента детально вывести самый позитивный отзыв.

Вывести надо отзыв с максимальной оценкой, последний по дате. Выводить только достоинства. Если достоинства не заполнены, то текст.

Компонент catalog.element, файл result_modifier.php


$arResult["REVIEW"] = array();
if(CModule::IncludeModule("askaron.reviews"))
{
  $arParameters = array(
     'order' => array(
        "GRADE" => "DESC",
        'DATE' => 'DESC'
      ),
      "filter" => array(
        "=ELEMENT_ID" => $arParams["ELEMENT_ID"],
        "ACTIVE" => "Y",
      ),
      'select' => array(
        "*",
        "AUTHOR_USER.NAME",
        "AUTHOR_USER.LAST_NAME",
        "AUTHOR_USER.LOGIN",
      ),
      'limit' => 1,
  );

  $res = \Askaron\Reviews\ReviewTable::getList( $arParameters );
  while ( $arFields = $res->fetch() )
  {
    $arDisplayText = $arFields["PRO"];
   
    if ($arDisplayText == "")
    {
       $arDisplayText = $arFields["TEXT"];
    }

    $arFields["DISPLAY_TEXT"] = htmlspecialcharsbx($arDisplayText); $arFields["DISPLAY_TEXT"] = str_replace( "\n", "<br>", $arFields["DISPLAY_TEXT"] );

    $display_name = trim( $arFields["AUTHOR_NAME"] );

    if ($display_name == "")
    {
        $display_name = trim($arFields["ASKARON_REVIEWS_REVIEW_AUTHOR_USER_NAME"]." ".$arFields["ASKARON_REVIEWS_REVIEW_AUTHOR_USER_LAST_NAME"] );
    }
    
    if ($display_name == "" && $arFields["AUTHOR_USER_ID"] > 0 )
    {
         $display_name = "Пользователь №".$arFields["AUTHOR_USER_ID"];
    }

    if ($display_name == "" )
    {
         $display_name = "Гость";
    }
    $arFields["~DISPLAY_NAME"] = $display_name;
    $arFields["DISPLAY_NAME"] = htmlspecialcharsbx($display_name);
    $arResult["REVIEW"] = $arFields;
  }

  // добавим к кешу шаблона еще один ключ.
  // теперь кеш шаблона детальной страницы сбрасывается сразу, когда кто-то добавляет, изменяет или удаляет отзыв
  if (defined('BX_COMP_MANAGED_CACHE') && is_object($GLOBALS['CACHE_MANAGER'] ) )
  {
     if ( $arParams["CACHE_TIME"] > 0 )
     {
         $GLOBALS['CACHE_MANAGER']->RegisterTag( 'askaron_reviews_for_element_'.$arResult["ID"] ); // cache by element
     }
  }
}


В файле template.php можно вывести


<?if ( $arResult["REVIEW"] ):?>
  <table>
     <tr>
        <td>
            <?=$arResult["REVIEW"]["DISPLAY_NAME"]?>
        </td>
     </tr>
     <tr>
        <td>
           <?=$arResult["REVIEW"]["DISPLAY_TEXT"]?>
        </td>
     </tr>
   </table>
<?endif?>


0  


 Примеры API | Описание курса | Отказоустойчивый обмен с 1С