@Coraelstraze

Битрикс, компонент в элементе каталога?

Здравствуйте!
Имеется интернет-магазин на платформе битрикс. Нужно реализовать блок товаров-новинок на странице элемента каталога (товара).
Сделал через catalog.section. Вставил этот компонент внутрь шаблона "catalog.element".

<?
global $arrFilternovelty;
$arrFilternovelty = Array('!PROPERTY_NEWPRODUCT' => false);
$APPLICATION->IncludeComponent(
"bitrix:catalog.section",
"for_product",
array(
"ACTION_VARIABLE" => "action",
"ADD_PICT_PROP" => "MORE_PHOTO",
"ADD_PROPERTIES_TO_BASKET" => "Y",
"ADD_SECTIONS_CHAIN" => "N",
"ADD_TO_BASKET_ACTION" => "ADD",
"AJAX_MODE" => "N",
"AJAX_OPTION_ADDITIONAL" => "",
"AJAX_OPTION_HISTORY" => "N",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "Y",
"BACKGROUND_IMAGE" => "-",
"BASKET_URL" => "/personal/basket.php",
"BROWSER_TITLE" => "-",
"CACHE_FILTER" => "Y",
"CACHE_GROUPS" => "Y",
"CACHE_TIME" => "36000000",
"CACHE_TYPE" => "A",
"CONVERT_CURRENCY" => "N",
"DETAIL_URL" => "",
"DISABLE_INIT_JS_IN_COMPONENT" => "N",
"DISPLAY_BOTTOM_PAGER" => "N",
"DISPLAY_TOP_PAGER" => "N",
"ELEMENT_SORT_FIELD" => "sort",
"ELEMENT_SORT_FIELD2" => "id",
"ELEMENT_SORT_ORDER" => "asc",
"ELEMENT_SORT_ORDER2" => "desc",
"FILTER_NAME" => "arrFilternovelty",
"HIDE_NOT_AVAILABLE" => "N",
"IBLOCK_ID" => "2",
"IBLOCK_TYPE" => "catalog",
"INCLUDE_SUBSECTIONS" => "Y",
"LABEL_PROP" => "NEWPRODUCT",
"LINE_ELEMENT_COUNT" => "3",
"MESSAGE_404" => "",
"MESS_BTN_ADD_TO_BASKET" => "В корзину",
"MESS_BTN_BUY" => "Купить",
"MESS_BTN_DETAIL" => "Подробнее",
"MESS_BTN_SUBSCRIBE" => "Подписаться",
"MESS_NOT_AVAILABLE" => "Нет в наличии",
"META_DESCRIPTION" => "-",
"META_KEYWORDS" => "-",
"OFFERS_CART_PROPERTIES" => array(
0 => "SIZES_SHOES",
1 => "SIZES_CLOTHES",
),
"OFFERS_FIELD_CODE" => array(
0 => "ID",
1 => "CODE",
2 => "XML_ID",
3 => "NAME",
4 => "TAGS",
5 => "SORT",
6 => "PREVIEW_TEXT",
7 => "PREVIEW_PICTURE",
8 => "DETAIL_TEXT",
9 => "DETAIL_PICTURE",
10 => "DATE_ACTIVE_FROM",
11 => "ACTIVE_FROM",
12 => "DATE_ACTIVE_TO",
13 => "ACTIVE_TO",
14 => "SHOW_COUNTER",
15 => "SHOW_COUNTER_START",
16 => "IBLOCK_TYPE_ID",
17 => "IBLOCK_ID",
18 => "IBLOCK_CODE",
19 => "IBLOCK_NAME",
20 => "IBLOCK_EXTERNAL_ID",
21 => "DATE_CREATE",
22 => "CREATED_BY",
23 => "CREATED_USER_NAME",
24 => "TIMESTAMP_X",
25 => "MODIFIED_BY",
26 => "USER_NAME",
27 => "",
),
"OFFERS_LIMIT" => "5",
"OFFERS_PROPERTY_CODE" => array(
0 => "",
1 => "",
),
"OFFERS_SORT_FIELD" => "sort",
"OFFERS_SORT_FIELD2" => "id",
"OFFERS_SORT_ORDER" => "asc",
"OFFERS_SORT_ORDER2" => "desc",
"PAGER_BASE_LINK_ENABLE" => "N",
"PAGER_DESC_NUMBERING" => "N",
"PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
"PAGER_SHOW_ALL" => "N",
"PAGER_SHOW_ALWAYS" => "N",
"PAGER_TEMPLATE" => ".default",
"PAGER_TITLE" => "Товары",
"PAGE_ELEMENT_COUNT" => "3",
"PARTIAL_PRODUCT_PROPERTIES" => "Y",
"PRICE_CODE" => array(
0 => "BASE",
),
"PRICE_VAT_INCLUDE" => "Y",
"PRODUCT_DISPLAY_MODE" => "Y",
"PRODUCT_ID_VARIABLE" => "id",
"PRODUCT_PROPERTIES" => array(
0 => "NEWPRODUCT",
1 => "F_USER",
),
"PRODUCT_PROPS_VARIABLE" => "prop",
"PRODUCT_QUANTITY_VARIABLE" => "",
"PRODUCT_SUBSCRIPTION" => "N",
"PROPERTY_CODE" => array(
0 => "",
1 => "",
),
"SECTION_CODE" => "",
"SECTION_ID" => $_REQUEST["SECTION_ID"],
"SECTION_ID_VARIABLE" => "SECTION_ID",
"SECTION_URL" => "",
"SECTION_USER_FIELDS" => array(
0 => "UF_BROWSER_TITLE",
1 => "UF_KEYWORDS",
2 => "UF_META_DESCRIPTION",
3 => "UF_BACKGROUND_IMAGE",
4 => "",
),
"SEF_MODE" => "N",
"SET_BROWSER_TITLE" => "N",
"SET_LAST_MODIFIED" => "N",
"SET_META_DESCRIPTION" => "N",
"SET_META_KEYWORDS" => "N",
"SET_STATUS_404" => "N",
"SET_TITLE" => "N",
"SHOW_404" => "N",
"SHOW_ALL_WO_SECTION" => "Y",
"SHOW_CLOSE_POPUP" => "N",
"SHOW_DISCOUNT_PERCENT" => "N",
"SHOW_OLD_PRICE" => "N",
"SHOW_PRICE_COUNT" => "1",
"TEMPLATE_THEME" => "blue",
"USE_MAIN_ELEMENT_SECTION" => "N",
"USE_PRICE_COUNT" => "N",
"USE_PRODUCT_QUANTITY" => "N",
"COMPONENT_TEMPLATE" => "for_product",
"SEF_RULE" => "",
"SECTION_CODE_PATH" => "",
"OFFER_ADD_PICT_PROP" => "MORE_PHOTO",
"OFFER_TREE_PROPS" => array(
)
),
false,
array(
"ACTIVE_COMPONENT" => "Y"
)
);?>

Все выводит, но до первого обновления страницы. После обновления у этого как будто стили слетают или вроде того, остаются только название и кнопки.
Возможно какой то конфликт? как правильно это реализовать? спасибо.
  • Вопрос задан
  • 1633 просмотра
Решения вопроса 1
workDNK
@workDNK
Разработчик интернет-магазинов на 1С-Битрикс
Размещать компоненты в template.php нужно очень осторожно.

Во-первых, этот вариант без дополнительных манипуляций будет работать только при отключенном кешировании сайта или, как вы и заметили, только при первой загрузке страницы после сброса кеша. Во-вторых, это может привести к некорректному кешированию компонентов и к росту файлов кеша.

В случае такой вложенности стили и скрипты подключаются только для catalog.element, а для внутреннего catalog.section стили style.css и скрипты script.js подключатся только на первый раз, когда кеш для страницы еще не готов, но при повторном запросе страниц подгружаться уже не будут.

Один из способов - это вынести содержимое файлов style.css, script.js из шаблона для catalog.section и разместить их в соответствующих файлах catalog.element, но этот способ не очень красивый и логичный.

Правильнее сделать так:
  • подключите catalog.section либо в файле element.php, если используете комплексный компонент catalog
  • либо в файле component_epilog.php шаблона catalog.element.
  • либо в файле result_modifier.php шаблона catalog.element сделайте через API выборку новинок, а в template.php без использования дополнительных компонентов выведите эти данные
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rema1ns
@Rema1ns
и так сойдет
у вас получается компонент в компоненте, соответственно он 1 раз кеширует все это дело, и потом не обновляет кеш так как изменений не было никаких.

Подлючайте стили через setAdditionalCss в файлах вызова компонента, они безкешевые.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы