Задача: сделать два варианта показа новости. В теле новости должен располагаться блок, где неавторизованные пользователи должны видеть предложение зарегистрироваться/авторизоваться, а авторизованные -- предложение прокомментировать или рекомедовать другим. Используется штатный компонент bitrix:news.detail.
Обычно эта задача решается так: в настройках компонента в блоке "Настройки кеширования" нужно включить крыжик "Учитывать права доступа". Если этот крыжик включен, компонент будет создавать отдельный кеш для каждого уникального сочетания групп, к которым относится пользователь.
Но на сайте было много групп, много возможных сочетаний групп и много новостей. Плодить кеши очень не хотелось. Решение под катом.
[spoiler]
0) Кастомизируем шаблон компонента bitrix:news.detail (это самоочевидно, но на всякий случай упомяну).
1) Редактируем файл .parameters.php в кастомизированном шаблоне. В дополнительные параметры компонента добавляем ещё один пункт:
2) В настройках компонента отключаем крыжик "Учитывать права доступа". Также убеждаемся, что в блоке "Дополнительно" появился параметр "Авторизован ли пользователь". Код вызова компонента приобретает следующий вид:
Готово. Теперь компонент будет создавать разные кеши для авторизованных и неавторизованных пользователей.
Этот подход также можно использовать, если нужно, к примеру, разместить фотогалерею в теле новости (см. пример в первом комментарии).
Обычно эта задача решается так: в настройках компонента в блоке "Настройки кеширования" нужно включить крыжик "Учитывать права доступа". Если этот крыжик включен, компонент будет создавать отдельный кеш для каждого уникального сочетания групп, к которым относится пользователь.
Но на сайте было много групп, много возможных сочетаний групп и много новостей. Плодить кеши очень не хотелось. Решение под катом.
[spoiler]
0) Кастомизируем шаблон компонента bitrix:news.detail (это самоочевидно, но на всякий случай упомяну).
1) Редактируем файл .parameters.php в кастомизированном шаблоне. В дополнительные параметры компонента добавляем ещё один пункт:
$arTemplateParameters = array( "DISPLAY_DATE" => Array(.....), "DISPLAY_NAME" => Array(.....), "DISPLAY_PICTURE" => Array(.....), "DISPLAY_PREVIEW_TEXT" => Array(.....), "USE_SHARE" => Array(.....), // вот добавленный пункт "IS_AUTHORIZED" => array( "NAME" => "Авторизован ли пользователь?", "TYPE" => "STRING", "VALUE" => '={$GLOBALS["USER"]->IsAuthorized()}', "DEFAULT" => '={$GLOBALS["USER"]->IsAuthorized()}', ), ); |
2) В настройках компонента отключаем крыжик "Учитывать права доступа". Также убеждаемся, что в блоке "Дополнительно" появился параметр "Авторизован ли пользователь". Код вызова компонента приобретает следующий вид:
<?$APPLICATION->IncludeComponent("bitrix:news.detail", "tmpl_name", array( ........ "CACHE_GROUPS" => "N", ........ "IS_AUTHORIZED" => $GLOBALS["USER"]->IsAuthorized(), ), false );?> |
Готово. Теперь компонент будет создавать разные кеши для авторизованных и неавторизованных пользователей.
Этот подход также можно использовать, если нужно, к примеру, разместить фотогалерею в теле новости (см. пример в первом комментарии).