4453 Web Working 5 Июля 2017



Случайный отзыв на главной странице в Битрикс

Сегодня мы попробуем сделать компонент вывода случайного отзыва для главной страницы сайта.

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.</webworking>, 
 http://webworking.by/" class="link1">webworking.by

Создадим новый инфоблок "Рекомендации" с символьным кодом "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 
);?>

Вот и все:) Вызванный нами компонент подтянет все данные и выведет их на странице, используя созданный нами шаблон. Всем успехов!

Рейтинг:

Поделится с друзьями:

Вы можете оставить свой комментарий:


98

материалов о web-разработке

1345

читателей нашего блога

15

городов и стран

96

разработанных проектов