Т.е. задачка простая - какие могут быть варианты вывода компонента по условию. [spoiler] Я предложил сделать отложенную функцию, где бы вызывался компонент включаемой области, а уже в файлике, который будет подключаться - вызов нужного компонента. Основной аргумент - возможность настройки вызываемого компонента в визуальном редакторе, да и вообще нормальная работа с ним (копирование шаблона, сброс кеша и прочее).
Пришлось проверить идею на практике - потребовалось в компоненте получать имя текущей страницы, так что только через отложенные функции:
function GetSocialButtons()
{
global $APPLICATION;
$strResult = '';
$strShow = $APPLICATION->GetProperty('not_show_social_shared','');
if ('Y' != $strShow)
{
ob_start();
?><?$APPLICATION->IncludeComponent(
"bitrix:main.include",
"",
Array(
"AREA_FILE_SHOW" => "file",
"PATH" => "/social-buttons.php",
"EDIT_TEMPLATE" => ""
),
false
);?><?
$strResult = ob_get_contents();
ob_clean();
ob_end_clean();
}
return $strResult;
}
function ShowSocialButtons()
{
global $APPLICATION;
$APPLICATION->AddBufferContent("GetSocialButtons");
}
В общем, работает. Даже как надо. Но выяснились следующие моменты (сообразить можно было сразу). Отложенные функции к моменту вызова уже отработали, значит, не будет работать:
Волков Артем, отложенные фунции типа вывода заголовка, вывода метаданных, добавления CSS в хидер уже отработали и так как компонент сам вызывается веутри отложенной функции, то он не смогёт повлиять на то, что уже было выведено.
как только вы зайдете на страницу где используется define("NEED_AUTH", true); и ваша отложенная функция с использованием ob_start(), то все сломается. будет белый экран и ошибка в пхп - Cannot use output buffering in output buffering display handlers.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».