【问题标题】:Docpad: get collection item dynamicallyDocpad:动态获取集合项
【发布时间】:2015-10-09 00:56:05
【问题描述】:

我是docpad 的新手。 我的项目中有类似过滤器的东西。很少有切换器可以过滤图标列表。用户单击图标后,应显示有关所选项目的详细信息。此项目在 docpad 集合中。如何实施? 列表中的每个图标的 id 都等于 docpad 集合中响应项的 id。 有没有办法将所选项目的 ID 存储在变量 onclick 中(以便在生态模板中的 getCollectiongetFileById 的过滤器中使用它)?

【问题讨论】:

  • DocPad 生成后没有 getCollection 或 getFileById 方法,它生成静态内容并尝试强制响应服务器端似乎不是一个好主意。也许将您的文件存储在 /files/{{id}} 下并创建用于对它们进行排序的文件的 json 列表

标签: docpad eco


【解决方案1】:

我不清楚你想要实现什么。如果您想通过用户点击过滤页面上的项目,例如 masonry/pinterest 布局,那么方法是将所有集合项目输出到页面,然后使用客户端 JavaScript 过滤它们。如果您想在用户单击某个项目时显示更多详细信息,则原理是相同的。将集合的所有详细信息输出到页面,但仅在用户单击项目时才显示完整详细信息(再次使用客户端脚本)。

现在,如果集合太大或内容太长而无法输出到页面,并且您需要在回发时(即动态)生成内容,则可以在元数据中将页面标记为dynamic = true。您还需要安装clean urls plugin

编辑:

作为使用生态模板系统在动态生成的页面上过滤集合的示例。

---
layout: simple
dynamic: true
---

<%collection = ['Aardvark',"Arrows","Armageddon","Buildings","Bats","Bob the builder"] %>
<%query = @req.query%>
<%-query.q%>
<%filter = query.q%>
<h1><%-(new Date()).toString()%></h1>
<ul>
<% for item in collection:%>
<%if item[0].toLowerCase() == filter or !filter:%>
    <li><%-item%></li>
<%end%>
<%end%>
</ul>

这里假设有q=aq=b等形式的查询参数。即http://127.0.0.1:9778/?q=a。我还写了日期以证明每次请求都会重新生成页面。

查看 DocPad 文档的 metadata section

【讨论】:

  • 我有同样的问题:用户需要能够过滤列表。看起来你确实给出了如何解决这个问题的提示,但它们太笼统了,我无法理解。您能否链接到有关动态页面创建的文档或示例?
  • 感谢您的回答。请看一下fiddle,看看我想要实现什么。这只是一个简单的例子
  • 现在我有了一些解决方案。一次加载整个集合。但只有第一项的详细信息保持可见,所有其他的都被隐藏了。但这会导致页面加载时间过长(
猜你喜欢
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多