【发布时间】:2017-03-31 08:08:53
【问题描述】:
附件和文件模块之间的主要区别是什么,每个模块都有特定的用例吗?权限可以同时应用于两者吗?我是这个平台的新手,所以我试着了解撇号如何完成事情的方式和原因。
【问题讨论】:
标签: apostrophe-cms
附件和文件模块之间的主要区别是什么,每个模块都有特定的用例吗?权限可以同时应用于两者吗?我是这个平台的新手,所以我试着了解撇号如何完成事情的方式和原因。
【问题讨论】:
标签: apostrophe-cms
我是朋克大道 Apostrophe 的建筑师。
确切地说,这些模块不是替代品。其实apostrophe-files和apostrophe-images都是建立在apostrophe-attachments之上的。
什么是apostrophe-file?这是一个“片段”——一个带有标题、一些元数据的撇号文档,在本例中是一个 attachment 字段。由于它是一个片段,就像任何博客文章或活动一样,您可以通过管理栏管理您的所有文件,您可以使用apostrophe-files-widgets 在您的站点周围显示下载链接,等等。
那么attachment 是什么?它是一种模式字段——一种类型的字段,您可以将其包含在 Apostrophe 中任何类型文档的模式中,例如片段或页面。
大多数架构字段类型都非常简单。例如,string 字段类型由字符串组成。 boolean 字段类型为真或假,依此类推。
但附件有点棘手。在理想的世界中……从数据库设计的角度来看……文件的实际内容将直接存在于您的文档中; doc.headshot 可能是实际的 JPEG 数据(或者可能是那个,加上一些元数据)。
但我们不能这样做,因为文件非常大,即使它们适合 MongoDB 文档(它们并不总是),它也会非常非常低效,尤其是当我们对它们不感兴趣时现在。
因此,如果您使用 findOne 在 mongo shell 中显示它,这是典型的 apostrophe-file 在 MongoDB 中的样子。为了简单起见,我将其缩减了一点。注意attachment 属性:
{
"_id" : "xyz",
"type" : "apostrophe-file",
"title" : "Field Trip Permission Slip",
"slug" : "file-field-trip-permission-slip",
"attachment" : {
"type" : "attachment",
"_id" : "qqq",
"name" : "permission-form",
"extension" : "pdf"
},
}
attachment 字段有自己的_id。在_id、name 属性和extension 属性之间,apos.attachments.url() 方法可以组合一个 URL 来下载它。
那么这给我们带来了什么?灵活性。想要在您的网站上重复使用单个 PDF 库吗?使用apostrophe-files,并使用apostrophe-files-widgets 在站点周围显示下载链接。
想要将resume 属性附加到特定人员的profile 部分并将其 保留在共享库之外?请在架构中为您的作品类型使用 attachment 字段:
// in lib/modules/people
module.exports = {
extend: 'apostrophe-pieces',
addFields: [
{
type: 'attachment',
name: 'resume'
}
]
}
我们本可以使用一个小部件来选择一个文件,但我们不想让成千上万的简历使共享文件库变得混乱。所以我们只是直接在简历中添加了一个attachment 属性。
那么,在您的模板中,您如何获取属于片段一部分的附件的 URL?像这样:
apos.attachments.url(data.piece.resume)
有关您可以使用apostrophe-files、apostrophe-images 和apostrophe-attachments 做什么的更多信息,请参阅文档。教程中有很多例子,尤其是apostrophe-images-widgets。希望这个答案能让您了解如何以及何时直接使用 attachment 字段。
希望对您有所帮助!
【讨论】: