Yastr
@Yastr

Как узнать что находимся в карточке товара компонента каталог?

Здравствуйте.

Подскажите пожалуйста, есть ли в битриксе возможность определения страницы карточки товара?

В дизайне на всех страницах кроме этой контейнер основной стандартный (bootstrap .conainer), а в карточке во всю ширину (.container-fluid). Не хочется вырывать часть с определением ширины контента из header.
  • Вопрос задан
  • 3189 просмотров
Решения вопроса 2
Делайте через отложенные функции

в footer.php в конец пишем функцию, которая в зависимости от условий производит нужные нам действия
function containerWidth() {
        global $APPLICATION;
        ob_start();

        if(strlen($APPLICATION->GetProperty('fullWidthContainer')) > 0) {
            echo 'container-fluid';
        } else {
            echo 'container';
        }
        $result = ob_get_contents();
        ob_end_clean();
        return $result;
    }


в header.php в необходимом нам месте
<div class="<?$APPLICATION->AddBufferContent("containerWidth");?>">


и на необходимых нам страницах устанавливаем свойство fullWidthContainer

в вашем случае в catalog.detail или news.detail в component_epilog.php

$APPLICATION->SetPageProperty("fullWidthContainer", "1");


Код не тестил, но смысл понятен
Ответ написан
@vaajnur
битриксоид
у всех компонентов шаблон карточки свой.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@denism300
Вот еще вариант:
header.php
$currentPage = $APPLICATION->GetCurPage(true);
$productPage = false;
if(CModule::IncludeModule("iblock")) {
    if (CSite::InDir('/catalog/')) { // проверяем, что мы в каталоге
        $currentPath = str_replace('/index.php', '', $currentPage);
        $pathParts   = explode('/', trim($currentPath, '/'));
        if (!empty($pathParts)) {
            $productCode = end($pathParts);
            $productPage = CIBlockElement::GetList(array(), array("IBLOCK_ID" => 2, "CODE" => $productCode), false, array("nPageSize" => 1), array('ID'))->SelectedRowsCount();
        }
    }
}

if($productPage) {
    // Мы на детальной странице
} else {
    // Мы не на детальной странице
}

Так можно проверить нахождение на любой детальной странице, нужно только изменить соответствующим образом условие:
CSite::InDir('/catalog/')
например,
if(CSite::InDir('/catalog/') || CSite::InDir('/blog/') || CSite::InDir('/articles/'))

и в
CIBlockElement::GetList
Эту часть
"IBLOCK_ID" => 2
заменить на
"IBLOCK_ID" => array(2,3,4,5) // ID ваших инфоблоков
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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