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 ответов

29 просмотров

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 не хотите сделать? Намного проще и чище

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта