Squarespace - 多条件 JSONT .equal 语句

Squarespace - Multi conditional JSONT .equal statement

我在 /collections/products.list 上有自定义 HTML 代码,我只想显示在主页和我网站的其他两个特定集合页面上。

我想知道是否有某种查询可以将我的 HTML 包含在其中以仅在 select 页上显示它。

也许用 {squarespace.page-id} 定位每个页面?

编辑

我能够做到 {.equal?:squarespace.page-id:"collection-12345"} 但我正在尝试弄清楚如何检查多个页面。

不,无法在 Squarespace 中使用 JSON-T 测试单个相等谓词中多个值的相等性。但是,有几个替代方案可以最大限度地减少重复代码并提高可维护性。


选项 1:

您可以使用以下内容(我正在演示如何使用不同的值 [即使用 urlID 而不是 page-id],但您不必这样做):

{.equal? collection.urlId "home"}
  {@|apply mycustomblock.block}

{.or equal? squarespace.page-id "collection-12345"}
  {@|apply mycustomblock.block}

{.or equal? squarespace.page-id "collection-54321"}
  {@|apply mycustomblock.block}

{.or}
  <!-- all the rest -->

{.end}

这不是您想要的,但它比嵌套 {.equal}{.or} 或在 .list 文件中保留重复代码更易于维护。


选项 2:

或者另一种方法是通过您的 template.conf 文件添加额外的布局。这将引用与您的其他布局相同的区域,但将具有不同的区域名称。

...
"layouts" : {
  "default" : {
    "name" : "Standard Page Layout",
    "regions" : [ "site" ]
  },
  "productsAlt" : {
    "name" : "Products Enhanced",
    "regions" : [ "site" ]
  }
},
...

然后您会在集合的设置面板中获得一个 "Layout" 下拉菜单,您可以在其中区分布局。对于您想要替代产品布局的三个页面,select 下拉列表中的替代布局。

然后,通过 JSON-T,您可以执行以下操作:

{.equal? collection.regionName "productsAlt"}
  <!-- Alt layout. -->
{.or}
  <!-- Std./Non-Alt layout. -->
{.end}

这不完全是 "layouts" 的预期用途(通常您会使用它们实际使用不同的 set/sequence 区域文件),但它允许您拥有一个可修改的集合-特定 属性 然后可以通过服务器端 JSON-T 访问。毕竟,没有人说您必须使用不同的区域文件。