Здравствуйте. Сегодня перед нами стоит простая задачка. Написать Компонент для 1C- Bitrix. Компонент будет бать анонсы новостей с ленты www.tea.ru/rss/news.xml. Компонент будет выводить 3 последние новости. Так же компонент должен иметь пару простых настроек:
- Отображать первую новость
- Отображать вторую новость
- Отображать третью новость
- Установить заголовок страницы
- Кэширование компонента
Структура компонента:
./images //Картинки
./lang //Языковые файлы
./templates //Шаблоны вывода
component.php //Исполняемый файл
.description.php //Описание компонента
.parameters.php //Параметры компонента
Начнем с описания компонента .description.php
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
$arComponentDescription = array(
"NAME" => GetMessage("COMPONENT_NAME"), //Название компонента
"DESCRIPTION" => GetMessage("COMPONENT_DESC"), //Описание уомпонента
"ICON" => "/images/icon.gif", //Изображение компонента в списке визуального редактора
"SORT" => 10,
"CACHE_PATH" => "Y",
"PATH" => array(
"ID" => "content", //Главный раздел компонентов, может принимать значения (service, utility, content, communication, e-store)
"SORT" => 2000,
"NAME" => GetMessage("COMPONENT_NAME"),
"CHILD" => array(
"ID" => "RSS Tea.ru",
"NAME" => GetMessage("COMPONENT_PATH"), //Название папки для компонента
"SORT" => 10,
)
),
);
?>

Параметры компонента
.parameters.php
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$arComponentParameters = Array(
"PARAMETERS" => Array(
"SHOW_FIRST" => Array(
"PARENT" => "BASE",
"NAME" => GetMessage("FIRST"),
"TYPE" => "CHECKBOX",
),
"SHOW_SECOND" => Array(
"PARENT" => "BASE",
"NAME" => GetMessage("SECOND"),
"TYPE" => "CHECKBOX",
),
"SHOW_THIRD" => Array(
"PARENT" => "BASE",
"NAME" => GetMessage("THIRD"),
"TYPE" => "CHECKBOX",
),
"SET_TITLE" => Array(
"PARENT" => "BASE",
"NAME" => GetMessage("YA_SET_TITLE"),
"TYPE" => "CHECKBOX",
),
"CACHE_TIME" => Array("DEFAULT"=>3600),
)
);
?>
В массив
PARAMETERS заносятся все необходимые поля настроек:

Исполняемый файл компонента
component.php
$cache = new CPageCache(); //Инициализируем механизм кэширования
if($arParams["CACHE_TIME"] > 0 && !$cache->StartDataCache($arParams["CACHE_TIME"], "RSS Tea.ru")) return; //Проверяем необходимость обновления кеша компонента, если надо, обновляем
//Проводим GET запрос для получения содержиого файла с данными
$ob = new CHTTP();
$ob->http_timeout = 10;
$ob->Query("GET", "tea.ru", 80, "/rss/news.xml", false, "", "N");
$errno = $ob->errno;
$errstr = $ob->errstr;
$res = $ob->result;
$res = str_replace("\xE2\x88\x92", "-", $res);
$res = iconv("windows-1251","UTF-8",$res);
preg_match_all("#<title>(.*)</title>\s+<description>(.*)</description>#",$res,$out);
// Первая новость c tea.ru by zircool@inbox.ru
$arResult['1title'] = $out[1][0];
$arResult['1body'] = $out[2][0];
// Вторая новость с tea.ru
$arResult['2title'] = $out[1][1];
$arResult['2body'] = $out[2][1];
// Третья новость с tea.ru
$arResult['3title'] = $out[1][2];
$arResult['3body'] = $out[2][2];
//Подключаем шаблон компонента, если не указывать шаблон компонента, то будет подключаться шаблон .default
$this->IncludeComponentTemplate();
if($arParams['SET_TITLE'] == "Y"){
$APPLICATION->SetTitle(GetMessage("COMP_TITLE"));
}
//Заканчиваем кэширование
$cache->EndDataCache();
И последний шаг, отображение результата, файл
templates\.default\template.php
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<div style="margin: 0px 0px 0px 20px;">
<?//Проверяем, надо ли отображать первую новость
if($arParams['SHOW_FIRST'] == "Y" && !empty($arResult['2title'])&& !empty($arResult['2body'])):?>
<h4><?=$arResult['1title'];?></h4>
<?=$arResult['1body'];?><br />
<?endif;?>
<?//Проверяем, надо ли отображать Яндекс
if($arParams['SHOW_SECOND'] == "Y" && !empty($arResult['2title'])&& !empty($arResult['2body'])):?>
<h4><?=$arResult['2title'];?></h4>
<?=$arResult['2body'];?><br />
<?endif;?>
<?//Проверяем, надо ли отображать Яндекс
if($arParams['SHOW_THIRD'] == "Y" && !empty($arResult['3title'])&& !empty($arResult['3body'])):?>
<h4><?=$arResult['3title'];?></h4>
<?=$arResult['3body'];?><br />
<?endif;?>
</div>
Вот такой вот получился интересный компонент:

Скачать компонент можно здесь