【问题标题】:Print out value of assign from smarty plugin before plugin is called在调用插件之前从 smarty 插件中打印分配的值
【发布时间】:2012-04-23 15:51:44
【问题描述】:

我正在尝试围绕 smarty 开发一个广告系统。所以我想出了一个插件,当它在页面上吐出时看起来像这样:

{load_ad id=c4ca4238a0b923820dcc509a6f75849b}

问题在于,在该函数内部,我有一个分配了名为 AD_HEAD 的变量。

现在 AD_HEAD 应该显示在标签上方。

所以一个基本的 html 将如下所示:

<html>
<head>
{$AD_HEAD}
</head>
<body>
{load_ad id=c4ca4238a0b923820dcc509a6f75849b}
</body>
</html>

如您所见,AD_HEAD 的位置高于 load_ad。

问题是因为它被放置得更高,它会保持空,但是当我把它放在更低的时候 load_ad 它会起作用。

我怎样才能让它工作,或者我需要以不同的方式开发它?

【问题讨论】:

    标签: php smarty smarty3


    【解决方案1】:

    您能否修改load_ad 函数以分配两个Smarty 变量{$AD_HEAD}{$AD_BODY}

    你的 tpl 将看起来像

    <html>
    <head>
    {load_ad id=c4ca4238a0b923820dcc509a6f75849b}
    {$AD_HEAD}
    </head>
    <body>
    {$AD_BODY}
    </body>
    </html>
    

    【讨论】:

    • 问题是我将在页面上有多个广告。所以会有多个“{load_ad id=c4ca4238a0b923820dcc509a6f75849b}”实例。 AD_HEAD 并非对所有广告都是强制性的,因为只有一些广告需要标头中的代码。 AD_HEAD 应该做的是将所有广告代码附加到一个变量中,并在整个过程中完成所有循环时将其回显。
    • 如何将两个变量设置为数组?然后对他们每个人做一个foreach。你能发布代码吗,我会更好地了解如何提供帮助。
    • 我认为我上面所说的实际上仍然行不通。如果您发布插件的代码,我将能够提供更多帮助。取出你不想发布的任何东西,只留下函数调用和赋值。
    • 您好,代码如下: function smarty_function_load_ad(array $params, &$smarty) { foreach($banner_list as $banner_id=>$banner) { $ad_head = $smarty->getTemplateVars(' AD_HEAD'); $smarty->assign('AD_HEAD', $ad_head . ' ' . d($banner['header'])); $ad_footer = $smarty->getTemplateVars('AD_FOOTER'); $smarty->assign('AD_FOOTER', $ad_footer . ' ' . d($banner['footer']));返回 d($banner['body']); } }
    • 我似乎无法让它工作。看起来你需要以不同的方式设计它。你能在 php 中生成所有的广告内容,将其放入一个数组中,将该数组分配给 Smarty,然后像往常一样输出 $array[key] 样式吗?除此之外,您可以查看 Smarty 的 pre/post_filter 和 output_filter 函数——它们可以在编译前、编译后和输出前修改 tpl。告诉我你走的路线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    相关资源
    最近更新 更多