208 похожих чатов

Даны русскоязычный и аналогичный англоязычный инфоблок "Новости". Элементы этих инфоблоков

связаны свойством "Привязка к элементу инфоблока". Нужно отобразить в шаблоне компонента bitrix:main.site.selector ссылку на связанный элемент (компонент вызывается в header.php).

Устанавливаю свойство страницы в component_epilog.php со значением DETAIL_PAGE_URL связанного элемента:

if (!empty($arResult['PROPERTY_NEWS_ID_DETAIL_PAGE_URL'])) { // свойство "Привязка к элементу инфоблока"
$APPLICATION->SetPageProperty('link', $arResult['PROPERTY_NEWS_ID_DETAIL_PAGE_URL']);
}

Отображаю в template.php bitrix:main.site.selector свойство: $APPLICATION->ShowProperty('link');

Внимание вопросы:
1. Возможно ли проверить внутри bitrix:main.site.selector существует ли свойство страницы link? Если существует, то выводить его содержимое, иначе выводить ссылку на главную страницу иноязычного сайта (например, en/ для англоязычной языковой версии).
2. Допускается ли использование $APPLICATION->ShowProperty() в template.php кэшируемого компонента?

15 ответов

6 просмотров

1 а в чем проблема в условии где вы setpageproperty устанавливаете добавить else и там установить ссылку на английскую версию главной? 2 нет

помню давно такая задача была, а денег у клиента не было. сделал обычный запрос через get_headers, если ответ 200 ОК, то ссылка на другом языке есть и можно выводить, иначе на главную

W.-Blazkowicz Автор вопроса
⚒ ᎪᏞᎬᏦᏚᎪɴᎠᎡ ⚒
1 а в чем проблема в условии где вы setpagepropert...

1. На самом деле мне нужна ссылка не на главную страницу, а на физически существующую аналогичную страницу другой языковой версии (либо на уровень выше, если такой страницы нет). Получаю в result_modifier.php bitrix:main.site.selector (см. ниже). То есть, внутри bitrix:main.site.selector невозможно проверить существование свойства страницы? Единственным возможным вариантом будет получать из DETAIL_PAGE_URL только последний фрагмент (/en/element/)? /** * @param $directory * @return mixed */ $getDirectory = function (string $directory) use (&$getDirectory) { $isExist = (new Directory(Application::getDocumentRoot() . $directory))->isExists(); if ($isExist) { return $directory; } return $getDirectory(dirname($directory) . DIRECTORY_SEPARATOR); };

W.-Blazkowicz Автор вопроса
Арсен
помню давно такая задача была, а денег у клиента н...

в технических требованиях к задаче указано, что элементы должны быть связаны

W.-Blazkowicz Автор вопроса
⚒ ᎪᏞᎬᏦᏚᎪɴᎠᎡ ⚒
1 а в чем проблема в условии где вы setpagepropert...

2. Если нельзя вызвать $APPLICATION->ShowProperty() в template.php, то как тогда обойти? С кэшированием проверил - вообще работает

W. Blazkowicz
в технических требованиях к задаче указано, что эл...

Напишите свою отложенную функцию и делайте в ней какие угодно проверки

W.-Blazkowicz Автор вопроса
Eugene Zhukov
Напишите свою отложенную функцию и делайте в ней к...

с помощью AddBufferContent? Изучу вопрос, спасибо! Подскажите, пожалуйста, можно $APPLICATION->ShowProperty() в template.php кэшируемого компонента вызвать?

W. Blazkowicz
2. Если нельзя вызвать $APPLICATION->ShowProperty(...

Я могу ошибаться, но кэширование компонента в этом случае отключается

W. Blazkowicz
с помощью AddBufferContent? Изучу вопрос, спасибо!...

Show - можно, но нужно проверять. Результат попадет в кеш. Set нельзя (только в component_epilog)

W.-Blazkowicz Автор вопроса
Eugene Zhukov
Show - можно, но нужно проверять. Результат попаде...

Ладно, проверю) В bitrix/ нашел использование ShowProperty() только в template.php некэшируемых компонентов

W. Blazkowicz
1. На самом деле мне нужна ссылка не на главную ст...

Мм рекурсия... Ну сути не меняет же - setpageproperty($getDirectory('/en/' . $arResult[DETAIL PAGE URL])

W. Blazkowicz
1. На самом деле мне нужна ссылка не на главную ст...

Последний элемент это как правило символьный код, то есть $arResult[CODE]

Арсен
помню давно такая задача была, а денег у клиента н...

помню как то, Виталик решил перед выводом главного меню сайта (1.5-2к шт) проверять статус ответа каждой ссылки))) короче, с этим нужно аккуратно

W.-Blazkowicz Автор вопроса
Eugene Zhukov
Show - можно, но нужно проверять. Результат попаде...

Я правильно понял, что можно использовать $APPLICATION->ShowProperty() внутри template.php bitrix:main.site.selector, так как здесь шаблон компонента выносится из кешируемой области (CONTENT пуст) Файл кэша: $ser_content = 'a:2:{s:7:"CONTENT";s:0:"";s:4:"VARS";a:1:{s:8:"arResult";a:1:{s:5:"SITES";a:2:{i:0;a:6:{s:3:"LID";s:2:"s1";s:4:"NAME";s:2:"RU";s:4:"LANG";s:2:"ru";s:3:"DIR";s:1:"/";s:7:"DOMAINS";s:0:"";s:7:"CURRENT";s:1:"Y";}i:1;a:6:{s:3:"LID";s:2:"en";s:4:"NAME";s:2:"EN";s:4:"LANG";s:2:"en";s:3:"DIR";s:4:"/en/";s:7:"DOMAINS";s:0:"";s:7:"CURRENT";s:1:"N";}}}}}'; Кусок кода из bitrix:main.site.selector/component.php: if ($bCache && $cache->InitCache($arParams["CACHE_TIME"], $CACHE_ID, $CACHE_PATH)) { $vars = $cache->GetVars(); $arResult = $vars["arResult"]; } else { if ($bCache) { $cache->StartDataCache(); } // Запрос данных и формирование массива $arResult if ($bCache) { $cache->EndDataCache( array( "arResult" => $arResult, ) ); } } $this->IncludeComponentTemplate();

W. Blazkowicz
Я правильно понял, что можно использовать $APPLICA...

А почему через js не хотите сделать? Намного проще и чище

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

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
How to create an OS in C? what to study?
Linus
18
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
9
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Карта сайта