И снова привет! Сегодня снова Битрикс! И сегодня мы сделаем компонент вывода случайного отзыва для главной страницы сайта.
HTML
Примерно, макет этого блока на главной странице выглядит так:
<h4 class="recomend">Отзыв:</h4> <p class="p1">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <span class="clr"><strong>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</strong>, <a href="http://roothelp.ru/" class="link1">roothelp.com</a></span>
Создадим новый инфоблок "Рекомендации" с символьным кодом "RECOMEND" в типе инфоблоков "Контент". Не будем пока задавать особые настройки поисковой индексации или структуры данного инфоблока, поскольку вероятно будем выводить эту информацию не только на главной, но и на внутренних страницах сайта.
Зададим 3 свойства:
Должность - RECOMEND_PERSON_POST
Компания - RECOMEND_PERSON_COMPANY
Сайт - RECOMEND_PERSON_SITE
Имя автора отзыва мы будем хранить в названии элемента инфоблока, это удобно, а текст отзыва для главной в тексте анонса (если мы будем хранить развёрнутый отзыв где-то на внутренних страницах, то для него есть текст детального описания).
Разместим на тестовой странице компонент bitrix:news.list и скопируем шаблон .default в шаблон сайта, переименовав в random_recomend_on_main.
Важный момент, очень удобно организовывать вывод случайного элемента инфоблока с помощью установки случайно сортировки и отключением кэширования. Соответствующие моменты можно легко указать в параметрах компонента.
Во-первых зададим в параметрах компонента название ленты:
"RECOMEND_TITLE" => Array( "NAME" => GetMessage("RECOMEND_TITLE"), "TYPE" => "HTML", "DEFAULT" => "Рекомендации", ),
А в шаблоне выведем заголовок (при условии, что параметр не пуст):
<?if (!empty($arParams['RECOMEND_TITLE'])):?><h4 class="recomend"> <?=$arParams['RECOMEND_TITLE']?>:</h4><?endif?>
Во-вторых зададим в параметр, который будет регулировать будем ли мы выводить полноценную кликабельную ссылку или только адрес сайта в виде текста. Уместно так же будет задать 2 дополнительных параметра, которые будут регулировать будет ли открываться эта ссылка в новом окне или в уже существующем, а так же будет ли доступна ссылка поисковым системам (будет ли в ней параметр nofollow). Последние 2 параметра имеет смысл выводить только в случае, если установлен параметр выводить полноценную ссылку.
Тогда этот блок в .parameters.php будет выглядеть следующим образом:
$arTemplateParameters = array( "USE_LINKS" => Array( "NAME" => GetMessage("USE_LINKS"), "TYPE" => "CHECKBOX", "MULTIPLE" => "N", "VALUE" => "Y", "DEFAULT" =>"Y", "REFRESH"=> "Y", ), ); if ($arCurrentValues["USE_LINKS"] == "Y"){ $arTemplateParameters["USE_LINKS_NOFOLLOW"] = array( "NAME" => GetMessage("USE_LINKS_NOFOLLOW"), "TYPE" => "CHECKBOX", "DEFAULT" => "Y", ); $arTemplateParameters["USE_LINKS_BLANK"] = array( "NAME" => GetMessage("USE_LINKS_BLANK"), "TYPE" => "CHECKBOX", "DEFAULT" => "Y", ); }
Тогда целиком .parameters.php будет выглядеть:
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); $arTemplateParameters = array( "USE_LINKS" => Array( "NAME" => GetMessage("USE_LINKS"), "TYPE" => "CHECKBOX", "MULTIPLE" => "N", "VALUE" => "Y", "DEFAULT" =>"Y", "REFRESH"=> "Y", ), "TESTIMONIALS_TITLE" => Array( "NAME" => GetMessage("RECOMEND_TITLE"), "TYPE" => "HTML", "DEFAULT" => "Рекомендации", ), ); if ($arCurrentValues["USE_LINKS"] == "Y"){ $arTemplateParameters["USE_LINKS_NOFOLLOW"] = array( "NAME" => GetMessage("USE_LINKS_NOFOLLOW"), "TYPE" => "CHECKBOX", "DEFAULT" => "Y", ); $arTemplateParameters["USE_LINKS_BLANK"] = array( "NAME" => GetMessage("USE_LINKS_BLANK"), "TYPE" => "CHECKBOX", "DEFAULT" => "Y", ); }
Не забудем, что в шаблоне так же придётся сделать проверку на значение этих параметров, так что конечный вид шаблона компонента будет таким:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> <?if (!empty($arParams['RECOMEND_TITLE'])):?><h4 class="indent-1"> <?=$arParams['RECOMEND_TITLE']?>:</h4><?endif?> <?foreach($arResult["ITEMS"] as $arItem):?> <? $this->AddEditAction($arItem['ID'], $arItem['EDIT_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_EDIT")); $this->AddDeleteAction($arItem['ID'], $arItem['DELETE_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_DELETE"), a rray("CONFIRM" => GetMessage('CT_BNL_ELEMENT_DELETE_CONFIRM'))); ?> <div id="<?=$this->GetEditAreaId($arItem['ID']);?>"> <p class="p1"><?echo $arItem["PREVIEW_TEXT"];?></p> <span class="clr"><strong><?echo $arItem["NAME"]?></strong> <?if (!empty($arItem['PROPERTIES']['RECOMEND_PERSON_POST']['VALUE'])):?>, <?=$arItem['PROPERTIES']['RECOMEND_PERSON_POST']['VALUE']?><?endif?> <?if (!empty($arItem['PROPERTIES']['RECOMEND_PERSON_COMPANY']['VALUE'])):?>, <?=$arItem['PROPERTIES']['RECOMEND_PERSON_COMPANY']['VALUE']?><?endif?> <?if (!empty($arItem['PROPERTIES']['RECOMEND_PERSON_SITE']['VALUE'])):?>, <?if($arParams["USE_LINKS"]=="Y"):?> <a class="link-2" <?if($arParams["USE_LINKS_NOFOLLOW"]=="Y"):?>rel="nofollow" <?endif?> <?if($arParams["USE_LINKS_BLANK"]=="Y"):?>target="_blank" <?endif?>href="http:// <?=$arItem['PROPERTIES']['RECOMEND_PERSON_SITE']['VALUE']?>"> <?=$arItem['PROPERTIES']['RECOMEND_PERSON_SITE']['VALUE']?></a> <?else:?> <?=$arItem['PROPERTIES']['RECOMEND_PERSON_SITE']['VALUE']?> <?endif?> <?endif?></span> </div><br/> <?endforeach;?>
Как видите, в конечном итоге шаблон получился очень коротким, несмотря на проверку условий при выводе ссылки. Да и сам шаблон очень прост, мы просто вывели наши свойства, созданные в инфоблоке? в нужных нам местах с массива PROPERTIES.
Осталось только разместить на главной странице вместо разметки код вызова компонента:
<?$APPLICATION->IncludeComponent("bitrix:news.list", "random_recomend_on_main", array( "IBLOCK_TYPE" => "-", "IBLOCK_ID" => "RECOMEND", "NEWS_COUNT" => "2", "SORT_BY1" => "RAND", "SORT_ORDER1" => "DESC", "SORT_BY2" => "SORT", "SORT_ORDER2" => "ASC", "FILTER_NAME" => "", "FIELD_CODE" => array( 0 => "", 1 => "", ), "PROPERTY_CODE" => array( 0 => "", 1 => "RECOMEND_PERSON_POST", 2 => "RECOMEND_PERSON_COMPANY", 3 => "RECOMEND_PERSON_SITE", 4 => "", ), "CHECK_DATES" => "Y", "DETAIL_URL" => "", "AJAX_MODE" => "N", "AJAX_OPTION_JUMP" => "N", "AJAX_OPTION_STYLE" => "N", "AJAX_OPTION_HISTORY" => "N", "CACHE_TYPE" => "N", "CACHE_TIME" => "36000000", "CACHE_FILTER" => "N", "CACHE_GROUPS" => "Y", "PREVIEW_TRUNCATE_LEN" => "", "ACTIVE_DATE_FORMAT" => "d.m.Y", "SET_TITLE" => "N", "SET_STATUS_404" => "N", "INCLUDE_IBLOCK_INTO_CHAIN" => "N", "ADD_SECTIONS_CHAIN" => "N", "HIDE_LINK_WHEN_NO_DETAIL" => "N", "PARENT_SECTION" => "", "PARENT_SECTION_CODE" => "", "INCLUDE_SUBSECTIONS" => "Y", "DISPLAY_TOP_PAGER" => "N", "DISPLAY_BOTTOM_PAGER" => "N", "PAGER_TITLE" => "Новости", "PAGER_SHOW_ALWAYS" => "N", "PAGER_TEMPLATE" => "", "PAGER_DESC_NUMBERING" => "N", "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000", "PAGER_SHOW_ALL" => "N", "USE_LINKS" => "Y", "TESTIMONIALS_TITLE" => "Рекомендации", "USE_LINKS_NOFOLLOW" => "Y", "USE_LINKS_BLANK" => "Y", "AJAX_OPTION_ADDITIONAL" => "" ), false );?>
Вот и все:)
Вызванный нами компонент подтянет все данные и выведет их на странице, используя созданный нами шаблон. Всем успехов!