метки в тексте статьи вида {id метки}{/id метки} . Параметры внутри этих тэгов неограниченное количество,
разделены вертикальной чертой. Пример:
{Market_place}searchText=Смартфон|searchPhrase=Купить Смартфон Xiaomi{/Market_place}
параметры в тексте рекламного скрипта в двойных квадратных скобках например [[searchText]].
Особый параметр [__counter] На случай если будет несколько одинаковых шорт кодов, то вместо [__counter] подставится его порядковый номер в тексте 0,1,2 ...
.createWidget({
"containerId": "marketWidget[__counter]",
"type": "offers",
"params": {
"searchText": "[[searchText]]",
"searchPhrase": "[[searchPhrase]]",
"themeId": 2
}
});
/* Функция берет текст публикации ,
* собрает из нее метки рекламного скрипта с параметрами
* Параметры подставляет в тело скрипта
* Полученный текст скрипта подставляет на место метки в публикации
* $body - текст публикации
* $script_identificator - идентификатор скрипта
* $script - сам программный код рекламного скрипта
* */
protected function injectAdScript($body, $script_identificator, $script){
// составляем строку для сбора всех меток для нашего скрипта
$preg_str = '~{'.$script_identificator.'}([^{]*){/'.$script_identificator.'}~i';
// собираем все метки скрипта из текста публикации в переменную $match.
// $match[0] массив полных текстов меток. например {Market_place}SearchText=Смартфон|SearchPhrase=Купить Смартфон Xiaomi{/Market_place}
// $match[1] массив урезанных меток. Например SearchText=Смартфон|SearchPhrase=Купить Смартфон Xiaomi
preg_match_all($preg_str, $body, $match);
$search = []; // Здесь будем хранить массив полных текстов меток
$replace = [];// Здесь будем хранить текст скрипта с подставленными значениями меток
$counter = 0;// в некоторых скриптах необходимо проставлять его порядковый номер. Как параметр в тексте должен быть обозначен [__counter]
foreach($match[1] as $key_match=>$str_params){
$counter++;
$tmparr = explode('|',$str_params);
$mutated_str = $script;
// в цикле заменяем все найденные параметры их значениями
foreach($tmparr as $one_param){
$tmp_param = explode('=',$one_param);
$mutated_str = str_replace('[['.$tmp_param[0].']]',$tmp_param[1],$mutated_str);
}
$search[] = $match[0][$key_match];
$replace[] = str_replace('[__counter]',$counter,$mutated_str); //сразу проставим порядковые номера
}
// заменяем метки в тексте на преобразованные скрипты
return str_replace($search,$replace,$body);
}