Множественные ob_start() и ob_get_clean()
Я хочу заменить элементы из текста некоторыми функциями. Например, я хочу поставить ползунок из WYSIWYG, я пишу что-то вроде этого {SLIDER_8879}, где SLIDER-это тип функции, 8879-это параметр (например, папка).
Так, например:
<?php
function xxx($fname, $value){
echo"<span style='color:orange;'>$fname|$value this is CAROUSEL</span> ";
}
function callback ($match) {
if ($match[2] === "SLIDER"){
return "<span style='color:red'>This is a slider</span>";
}else if($match[2] === "POLL"){
return rand(8888888888, 8888888888888888888888);
}else if($match[2] === "CAROUSEL"){
xxx($match[2], $match[4]);
}else{
echo"<span style='color:blue'>ESIM INCH!</span>";
}
}
$body = "{{SLIDER_fff}} sdfasdfas dfasd {{POLL_8879}} dsgasdgasdgds {{CAROUSEL_888}} sdffasd f asd f a {{SLIDER_8879-folder}} dfgdf g dsfsfgfg d fdfgd {{BIBIN_folder}} sdfsdf";
$pattern = "/({{2})([A-Z]+)(_{1})([a-zA-Z0-9_\-]+)(}{2})/";
$body = preg_replace_callback($pattern, "callback", $body);
echo $body;
?>
Я получаю этот заказ:
CAROUSEL | 888 это CAROUSEL ESIM INCH! Это слайдер sdfasdfas dfasd 123055895 dsgasdgasdgds sdffasd f asd f a Это слайдер dfgdf g dsfsfgfg d fdfgd sdfsdf
Хотите иметь право на замену заказа:
Это слайдер sdfasdfas dfasd 123055895 dsgasdgasdgds CAROUSEL|888 это CAROUSEL sdffasd f asd f a Это слайдер dfgdf g dsfsfgfg d fdfgd ESIM INCH! sdfsdf
1 ответ
Обратный вызов должен вернуть строку замены.
Возможно, этот обновленный код - то, что вы ищете:
<?php
function xxx($fname, $value){
return "<span style='color:orange;'>$fname|$value this is CAROUSEL</span> ";
}
function callback ($match) {
if ($match[2] === "SLIDER"){
return "<span style='color:red'>This is a slider</span>";
}else if($match[2] === "POLL"){
return rand(8888888888, 8888888888888888888888);
}else if($match[2] === "CAROUSEL"){
return xxx($match[2], $match[4]);
}else{
return "<span style='color:blue'>ESIM INCH!</span>";
}
}
$body = "{{SLIDER_fff}} sdfasdfas dfasd {{POLL_8879}} dsgasdgasdgds {{CAROUSEL_888}} sdffasd f asd f a {{SLIDER_8879-folder}} dfgdf g dsfsfgfg d fdfgd {{BIBIN_folder}} sdfsdf";
$pattern = "/({{2})([A-Z]+)(_{1})([a-zA-Z0-9_\-]+)(}{2})/";
$body = preg_replace_callback($pattern, "callback", $body);
echo $body;
?>