Переменные в тексте Битрикс
Всем привет! Хочу сделать переменную для подмены в тексте Битрикс, вида #PHONE#, чтобы можно было бы вставить ее в текст и она автоматически подставляла нужные данные в тексте.
Как такое можно реализовать или куда копать? Неудалось найти информацию по данному вопросу. Спасибо
Ответы (3 шт):
Если вопрос про шаблон, то используется метод Loc::getMessage https://dev.1c-bitrix.ru/api_d7/bitrix/main/localization/loc/getmessage.php
Есть решение на JS
var city = $('.city_sel').text()
var word = '#CITY#'
var queue = [document.body]
var curr
;
while (curr = queue.pop()) {
if (!curr.textContent.match(word)) continue;
for (var i = 0; i < curr.childNodes.length; ++i) {
switch (curr.childNodes[i].nodeType) {
case Node.TEXT_NODE : // 3
if (curr.childNodes[i].textContent.match(word)) {
console.log("Found!");
console.log(curr);
let text = curr.innerText.replace(word, city);
curr.innerText = text
// you might want to end your search here.
}
break;
case Node.ELEMENT_NODE : // 1
queue.push(curr.childNodes[i]);
break;
}
}
}
Можно вставить функцию php в тело статьи, заполняемое в текстовом редакторе в админке. Функция должна быть вставлена в какой-то обязательно подгружаемый на каждую страницу файл, например обычно вставляют в /bitrix/php_interface/init.php. В конкретном примере в init.php должны быть еще и функции author() и author_alina()
В текст статьи здесь ставится код, например #author_snippet#
Символ # можно заменить, если почему-то не получается его идентифицировать
/** обратотка вставки снипета Автор в статью */
/**
*
*/
AddEventHandler("main", "OnEndBufferContent", "ShowDoctorInsideArticle");
function ShowDoctorInsideArticle(&$content)
{
if (CModule::IncludeModule("iblock"))
{
preg_match('/#(.*)_snippet#/', $content, $matches);
if ($matches[1] !== false)
{
$func = '';
switch($matches[1]){
case "author":
$func = author();
break;
case "author_alina":
$func = author_alina();
break;
default:
break;
}
$content = str_replace('#' . $matches[1] . '_snippet#', $func, $content);
}
}
}