我目前正在为自定义CMS开发广告模块,并使用模板标签允许客户通过WSYWIG页面内容编辑器将广告添加到他们的页面中。
EG。 {=advert_1}
在前端,这将通过正则表达式找到,然后转换为一个函数,它将查找数据库以选择和显示广告
Template_tags.php
while ($advertRow = $advertResult->fetch_assoc()) {
$advertGroupID = $advertRow['grpID'];
$advert = "advert_";
${$advert . $advertGroupID} = showAdvert($advertGroupID);
}
这意味着{=advert_1}
将转换为showAdvert(1)
我遇到的问题是,showAdvert
功能将针对所有广告运行,无论它是否出现在页面上,然后添加到"视图",即使广告可能无法显示。
我想要的是在不执行它的情况下定义函数,所以当它出现在页面内容中时,才会执行该函数。
答案 0 :(得分:1)
使用函数表达式创建闭包。
${$advert . $advertGroupID} = function() use($advertGroupID) {
showAdvert($advertGroupID);
};
要调用该函数,需要在其后面添加括号:
$name = 'advert_1';
echo $$name();
与preg_replace_callback
preg_replace_callback("/\{=([^\{]{1,100}?)\}/", function($match) {
return $match[1]();
}, $pageContent);