在smarty中将一个变量从tpl子传递给父tpl

时间:2016-08-05 15:30:43

标签: php variables parameter-passing smarty facebook-opengraph

我尝试将开放图形中的og:图像正确添加到使用智能模板的网站。 我正确地插入了部分中的其他og:标签,但在图像标签中我必须使用名为$ image.file_name的变量。 不幸的是,该标签仅在名为link_summary.tpl的子tpl文件中可用,该文件在部分的主模板中调用。

这会导致Facebook共享调试程序出错:

  

您的页面在正文中有元标记而不是头部。这可能是   因为你的HTML格式不正确,而且它们在解析树中降低了。   请修复此问题以使标签可用。

我想问一下,有没有办法将一个变量从child.tpl传递给parent.tpl?当我试图从child中包含该变量时,它会插入整个子内容而不是那个变量。

main / parent.tpl文件og:meta标签看起来:

  <!--OG types-->
    <meta property="fb:app_id" content="1069177856507061" />
    <meta property="og:type" content="website" />
    <meta property="og:url" content="http://hotter.pl{$story_url}" />
    <meta property="og:title" content="{$posttitle} | Hotter" />
    <meta property="og:locale" content="pl_PL" />
    {if $meta_description neq ""}
    <meta property="og:description" content="{$meta_description|truncate:'300'}" />
    {/if}
    <!-- /OG types-->

来自link_summary(child).tpl的那个og:image标签看起来:

{checkActionsTpl location="tpl_kliqqi_story_end"}
<meta property="og:image" content="http://hotter.pl/modules/upload/attachments/thumbs/{$image.file_name|substr:0:-12}600x6000.jpg" />
<!--/link_summary.tpl -->

我想将og:image标记移动到父级,但需要传递{$ image.file_name}变量。

提前感谢您的提示。

1 个答案:

答案 0 :(得分:1)

每个默认的新变量或更改的变量包含在本地范围内,并且在包含/父模板中不可见,但您可以自己确定范围。

查看Smarty manual

  

可以为分配的所有变量更改此默认行为   使用{include}处的范围属性包含的模板   语句或使用scope属性的单个变量   {assign}声明。后者对返回值很有用   从包含的模板到包含模板。

以下是使用{assign}如何完成此操作的简短示例,因为这应符合您的目的:

parent.tpl

{include file="child.tpl"}

{* display variable from child template *}
{$var}

child.tpl

{assign var="var" value="hello world" scope=parent}