Пишем свой компонент для 1C-Bitrix

Возврат к списку

Здравствуйте. Сегодня перед нами стоит простая задачка. Написать Компонент для 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>


Вот такой вот получился интересный компонент: Скачать компонент можно здесь
>


Возврат к списку