Стандартные компоненты 1С-Битрикс расположены по адресу
/bitrix/components/bitrix/
Свои компоненты надо создавать тут:
/bitrix/components/<свое имя>/
или
/local/components/<свое имя>/
Файлы компонента
.parameters.php - формирование окна настроек .description.php - описание компонента и служебные данные component.php - основной файл компонента class.php - сюда выводим класс компонента /lang/ - языковые файлы /help/tooltips.php - файлы с подсказками /images/ - папка с ресурсами /templates/ - шаблоны компонента ... template.php - основной файл шаблона ... result_modifier.php - файл кастомизации результатов работы компонента ... component_epilog.php - файл подключается после отработки шаблона (не кешируется) ... style.css - стили шаблона ... .parameters.php - дополнительные настройки (присущие шаблону)
Шаблоны компонента
/local/templates/<шаблон сайта>/components/ если шаблон в папке /bitrix/templates/ /bitrix/templates/<шаблон сайта>/components/
далее в папке .default размещается шаблон компонента по умолчанию.
Комплексный компонент
В структуре файлов простого и сложного компонентов отличий нет, а есть только внутри шаблона.
Отличие комплексного компонента:
- Объединяет простые компоненты (например, список разделов, список элементов, детальная страница элемента)
- Формирует раздел и поддерживает ЧПУ
- Общая форма для параметров
Файл component.php
- Проверяем используется ЧПУ или нет
- Задаем значения переменным по умолчанию
- Разбираем переменные из URL
- Смотрим какой файл шаблона подключить
- Получаем значения переменных
- Подключаем шаблон
Пример кода
.description
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
$arComponentDescription = array(
"NAME" => GetMessage("IBLOCK_NEWS_NAME"),
"DESCRIPTION" => GetMessage("IBLOCK_NEWS_DESCRIPTION"),
"ICON" => "/images/news_all.gif",
"COMPLEX" => "Y",
"PATH" => array(
"ID" => "content",
"CHILD" => array(
"ID" => "news",
"NAME" => GetMessage("T_IBLOCK_DESC_NEWS"),
"SORT" => 10,
"CHILD" => array(
"ID" => "news_cmpx",
),
),
),
);
.parameters.php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
if(!CModule::IncludeModule("iblock"))
return;
$arIBlockType = CIBlockParameters::GetIBlockTypes();
$arIBlock=array();
$rsIBlock = CIBlock::GetList(Array("SORT" => "ASC"), Array("TYPE" => $arCurrentValues["IBLOCK_TYPE"], "ACTIVE"=>"Y"));
while($arr=$rsIBlock->Fetch())
{
$arIBlock[$arr["ID"]] = "[".$arr["ID"]."] ".$arr["NAME"];
}
$arSorts = Array("ASC"=>GetMessage("T_IBLOCK_DESC_ASC"), "DESC"=>GetMessage("T_IBLOCK_DESC_DESC"));
$arSortFields = Array(
"ID"=>GetMessage("T_IBLOCK_DESC_FID"),
"NAME"=>GetMessage("T_IBLOCK_DESC_FNAME"),
"ACTIVE_FROM"=>GetMessage("T_IBLOCK_DESC_FACT"),
"SORT"=>GetMessage("T_IBLOCK_DESC_FSORT"),
"TIMESTAMP_X"=>GetMessage("T_IBLOCK_DESC_FTSAMP")
);
$arProperty_LNS = array();
$rsProp = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("ACTIVE"=>"Y", "IBLOCK_ID"=>$arCurrentValues["IBLOCK_ID"]));
while ($arr=$rsProp->Fetch())
{
$arProperty[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"];
if (in_array($arr["PROPERTY_TYPE"], array("L", "N", "S", "E")))
{
$arProperty_LNS[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"];
}
}
$arComponentParameters = array(
"PARAMETERS" => array(
"VARIABLE_ALIASES" => Array(
"SECTION_ID" => Array("NAME" => GetMessage("BN_P_SECTION_ID_DESC")),
"ELEMENT_ID" => Array("NAME" => GetMessage("NEWS_ELEMENT_ID_DESC")),
),
"SEF_MODE" => Array(
"news" => array(
"NAME" => GetMessage("T_IBLOCK_SEF_PAGE_NEWS"),
"DEFAULT" => "",
"VARIABLES" => array(),
),
"section" => array(
"NAME" => GetMessage("T_IBLOCK_SEF_PAGE_NEWS_SECTION"),
"DEFAULT" => "",
"VARIABLES" => array("SECTION_ID"),
),
"detail" => array(
"NAME" => GetMessage("T_IBLOCK_SEF_PAGE_NEWS_DETAIL"),
"DEFAULT" => "#ELEMENT_ID#/",
"VARIABLES" => array("ELEMENT_ID", "SECTION_ID"),
),
),
"IBLOCK_TYPE" => array(
"PARENT" => "BASE",
"NAME" => GetMessage("BN_P_IBLOCK_TYPE"),
"TYPE" => "LIST",
"VALUES" => $arIBlockType,
"REFRESH" => "Y",
),
"IBLOCK_ID" => array(
"PARENT" => "BASE",
"NAME" => GetMessage("BN_P_IBLOCK"),
"TYPE" => "LIST",
"VALUES" => $arIBlock,
"REFRESH" => "Y",
"ADDITIONAL_VALUES" => "Y",
),
"NEWS_COUNT" => Array(
"PARENT" => "BASE",
"NAME" => GetMessage("T_IBLOCK_DESC_LIST_CONT"),
"TYPE" => "STRING",
"DEFAULT" => "20",
),
"SORT_BY1" => Array(
"PARENT" => "DATA_SOURCE",
"NAME" => GetMessage("T_IBLOCK_DESC_IBORD1"),
"TYPE" => "LIST",
"DEFAULT" => "ACTIVE_FROM",
"VALUES" => $arSortFields,
"ADDITIONAL_VALUES" => "Y",
),
"SORT_ORDER1" => Array(
"PARENT" => "DATA_SOURCE",
"NAME" => GetMessage("T_IBLOCK_DESC_IBBY1"),
"TYPE" => "LIST",
"DEFAULT" => "DESC",
"VALUES" => $arSorts,
"ADDITIONAL_VALUES" => "Y",
),
"SORT_BY2" => Array(
"PARENT" => "DATA_SOURCE",
"NAME" => GetMessage("T_IBLOCK_DESC_IBORD2"),
"TYPE" => "LIST",
"DEFAULT" => "SORT",
"VALUES" => $arSortFields,
"ADDITIONAL_VALUES" => "Y",
),
"SORT_ORDER2" => Array(
"PARENT" => "DATA_SOURCE",
"NAME" => GetMessage("T_IBLOCK_DESC_IBBY2"),
"TYPE" => "LIST",
"DEFAULT" => "ASC",
"VALUES" => $arSorts,
"ADDITIONAL_VALUES" => "Y",
),
"LIST_ACTIVE_DATE_FORMAT" => CIBlockParameters::GetDateFormat(GetMessage("T_IBLOCK_DESC_ACTIVE_DATE_FORMAT"), "LIST_SETTINGS"),
),
);
CIBlockParameters::AddPagerSettings(
$arComponentParameters,
GetMessage("T_IBLOCK_DESC_PAGER_NEWS"), //$pager_title
true, //$bDescNumbering
true, //$bShowAllParam
true, //$bBaseLink
$arCurrentValues["PAGER_BASE_LINK_ENABLE"]==="Y" //$bBaseLinkEnabled
);
CIBlockParameters::Add404Settings($arComponentParameters, $arCurrentValues);
component.php
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
/** @var CBitrixComponent $this */
/** @var array $arParams */
/** @var array $arResult */
/** @var string $componentPath */
/** @var string $componentName */
/** @var string $componentTemplate */
/** @global CDatabase $DB */
/** @global CUser $USER */
/** @global CMain $APPLICATION */
if($arParams["USE_FILTER"]=="Y")
{
if($arParams["FILTER_NAME"] == '' || !preg_match("/^[A-Za-z_][A-Za-z01-9_]*$/", $arParams["FILTER_NAME"]))
$arParams["FILTER_NAME"] = "arrFilter";
}
else
$arParams["FILTER_NAME"] = "";
$arDefaultUrlTemplates404 = array(
"news" => "",
"search" => "search/",
"rss" => "rss/",
"rss_section" => "#SECTION_ID#/rss/",
"detail" => "#ELEMENT_ID#/",
"section" => "",
);
$arDefaultVariableAliases404 = array();
$arDefaultVariableAliases = array();
$arComponentVariables = array(
"SECTION_ID",
"SECTION_CODE",
"ELEMENT_ID",
"ELEMENT_CODE",
);
if($arParams["SEF_MODE"] == "Y")
{
$arVariables = array();
$arUrlTemplates = CComponentEngine::makeComponentUrlTemplates($arDefaultUrlTemplates404, $arParams["SEF_URL_TEMPLATES"]);
$arVariableAliases = CComponentEngine::makeComponentVariableAliases($arDefaultVariableAliases404, $arParams["VARIABLE_ALIASES"]);
CComponentEngine::initComponentVariables($componentPage, $arComponentVariables, $arVariableAliases, $arVariables);
$arResult = array(
"FOLDER" => $arParams["SEF_FOLDER"],
"URL_TEMPLATES" => $arUrlTemplates,
"VARIABLES" => $arVariables,
"ALIASES" => $arVariableAliases,
);
}
else
{
$arVariableAliases = CComponentEngine::makeComponentVariableAliases($arDefaultVariableAliases, $arParams["VARIABLE_ALIASES"]);
CComponentEngine::initComponentVariables(false, $arComponentVariables, $arVariableAliases, $arVariables);
$arResult = array(
"FOLDER" => "",
"URL_TEMPLATES" => array(
"news" => htmlspecialcharsbx($APPLICATION->GetCurPage()),
"section" => htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arVariableAliases["SECTION_ID"]."=#SECTION_ID#"),
"detail" => htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arVariableAliases["ELEMENT_ID"]."=#ELEMENT_ID#"),
"search" => htmlspecialcharsbx($APPLICATION->GetCurPage()),
"rss" => htmlspecialcharsbx($APPLICATION->GetCurPage()."?rss=y"),
"rss_section" => htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arVariableAliases["SECTION_ID"]."=#SECTION_ID#&rss=y"),
),
"VARIABLES" => $arVariables,
"ALIASES" => $arVariableAliases
);
}
$this->includeComponentTemplate($componentPage);
Отправьте заявку сейчас
