我希望为我构建的网页填充thumbnail
和og:image
元标记(供Facebook,Google和其他服务使用),并且我正在尝试简化我的方法。
我想要在显示没有特定图像资源的页面时指定通用的站点范围图像,同时能够在保证时指定特定图像(通过embed
变量传递)。
这是我的方法:
{embed="_global/_header" thumbnail="http://mysite.com/images/articles/some-image.jpg"}
然后在_header
:
{if embed:thumbnail}{preload_replace:thumbnail="{embed:thumbnail}"}{/if}
{preload_replace:thumbnail="{site_url}/assets/img/thumbnail.jpg"}
...
<meta name="og:image" content="{thumbnail}" />
<meta name="thumbnail" content="{thumbnail}" />
当我通过embed
传递缩略图网址时,这非常有用(因为使用了preload_replace
变量的第一个值集,并且忽略了后续的值),但是当我执行不传递值,{thumbnail}
结束为空(而不是使用我指定的{site_url}/assets/img/thumbnail.jpg
值。)
我的方法中有人能看到错误吗?当我没有传递嵌入变量时,为什么{thumbnail}
会在我的条件(最终为空)中被解析?
答案 0 :(得分:3)
当我在EE2.5.3中尝试时,以下工作:
{if embed:thumbnail == ''}{preload_replace:thumb="/assets/img/thumbnail.jpg"}{/if}
{if embed:thumbnail != ''}{preload_replace:thumb="{embed:thumbnail}"}{/if}
如果我撤销订单,它不起作用,我得到你报告的行为 - 如果有一个embed参数就很好,否则为空。
至于为什么这个命令有效,我不知道 - 也许解析顺序与许多EE怪癖有关。希望其他人可以解释为什么它有效,我们都可以学习:)
答案 1 :(得分:2)
你可能想尝试这样编写条件,以避免奇怪的EE解析顺序问题:
{if "{embed:thumbnail}" == ""}
{preload_replace:thumbnail="{embed:thumbnail}"}
{/if}
另外,我对preload_replace
不太熟悉,但你可以使用Stash来解决这个问题吗?它还有一个额外的好处,您可以在页面模板中进一步设置缩略图(例如,从您的频道内容中动态设置)。
在您的页面模板中:
{embed="_global/_header"}
{exp:stash:set name="thumbnail"}http://mysite.com/images/articles/some-image.jpg{/exp:stash:set}
在标题嵌入中:
{!-- set the default thumbnail --}
{exp:stash:set name="thumbnail" replace="no"}http://mysite.com/images/default.jpg{/exp:stash:set}
<meta name="og:image" content='{exp:stash:get name="thumbnail"}' />
<meta name="thumbnail" content='{exp:stash:get name="thumbnail"}' />
答案 2 :(得分:0)
我采用了与Adrian建议的元数据相同的方法,它也适用于您的缩略图 - 认为这通常是一种考虑模板的完全不同的方式。我在早期的Stack Exchange中描述了关于使用条目数据without needing multiple entries loops here填充页面标记的问题的答案。
当我使用存储来获取元数据时,我将有效地执行您想要对缩略图执行的操作 - 在未输入/可用特定于条目的数据时,将条件回退到默认值。我在入门级运行该条件,然后存储:设置结果。然后在元头 - 这是我的嵌入式布局包装模板的所有部分 - 我使用stash:get来检索存储结果。几乎所有想要在解析顺序中设置的数据都可以完成同样的事情,并且稍后会在解析顺序中得到 - 无论它在包装模板中出现在何处,因为它是嵌入式的(通常是唯一一个在存储设置中使用)它比条目循环逻辑更晚解析。