1

我喜欢为我构建的页面(供 Facebook、Google 和其他服务使用)填充thumbnail和元标记,并试图简化我的方法。og:image

我希望在显示没有特定图像资产的页面时指定一个通用的站点范围的图像,同时能够在有保证的情况下指定一个特定的图像(通过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}" />

当我通过 传递缩略图 URL 时,这很有效embed(因为使用了为preload_replace变量设置的第一个值,随后的值被忽略),但是当我传递值时,{thumbnail}最终为空(而不是使用我分配的{site_url}/assets/img/thumbnail.jpg值)。

任何人都可以在这里看到我的方法中的错误吗?{thumbnail}当我没有传递那个嵌入变量时,为什么会在我的条件(最终为空)中被解析?

4

3 回答 3

3

当我在 EE2.5.3 中尝试时,以下工作:

{if embed:thumbnail == ''}{preload_replace:thumb="/assets/img/thumbnail.jpg"}{/if}
{if embed:thumbnail != ''}{preload_replace:thumb="{embed:thumbnail}"}{/if}

如果我颠倒顺序,它就不起作用,我会得到你报告的行为 - 如果有嵌入参数很好,否则为空。

至于这个订单的确切原因,我不知道——也许像许多 EE 怪癖一样解析订单相关。希望其他人可以解释它为什么起作用,我们都可以学习:)

于 2012-11-01T16:16:16.080 回答
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"}' />
于 2012-10-31T21:50:48.907 回答
0

我采用了与 Adrian 对元数据建议的方法相同的方法,它也适用于您的缩略图 - 认为这通常是一种完全不同的思考模板的方式。我在较早的 Stack Exchange 回答中描述了该方法,该答案是关于在此处不需要多个条目循环的情况下使用条目数据填充页面标签的问题。

当我将存储用于元数据时,我将有效地执行您想要对缩略图执行的相同操作 - 当条目特定数据未输入/不可用时,有条件地回退到默认值。我在入门级别运行该条件,然后 stash:set 结果。然后在元标题中——这是我的嵌入式布局包装模板的一部分——我使用 stash:get 来检索隐藏的结果。几乎任何您想在解析顺序中的某一点设置并在解析顺序中稍后获得的数据都可以完成同样的事情 - 无论它出现在包装模板中的什么位置,因为作为嵌入(通常是您唯一会在存储设置中使用)它的解析时间比您的条目循环逻辑晚。

于 2012-11-01T11:17:31.210 回答