附件和文件模块之间的主要区别是什么,每个模块都有特定的用例吗?权限可以同时应用于两者吗?我对这个平台很陌生,所以试图了解撇号如何完成事情的方式和原因。
1 回答
我是朋克大道撇号的建筑师。
确切地说,这些模块不是替代品。事实上,apostrophe-files
和apostrophe-images
都建立在apostrophe-attachments
.
什么是apostrophe-file
? 它是一个“片段”——一个带有标题、一些元数据以及在本例中是一个attachment
字段的撇号文档。由于它是一个片段,就像任何博客文章或活动一样,您可以通过管理栏管理您的所有文件,您可以使用apostrophe-files-widgets
它在您的站点周围显示下载链接,等等。
那么什么是一个attachment
?它是一个模式字段 — 一种可以包含在 Apostrophe 中任何类型文档(例如片段或页面)的模式中的字段类型。
大多数模式字段类型都非常简单。例如,string
字段类型由字符串组成。字段类型为真或假boolean
,依此类推。
但是附件有点棘手。在理想的世界中……从数据库设计的角度来看……文件的实际内容将直接存在于您的文档中;doc.headshot
可能是实际的 JPEG 数据(或者,可能还有一些元数据)。
但是我们不能这样做,因为文件非常大,即使它们适合 MongoDB 文档(它们并不总是),它也会非常非常低效,尤其是当我们现在对它们不感兴趣时。
因此,如果您使用在 mongo shell 中显示它,这是apostrophe-file
MongoDB 中的典型片段。findOne
为了简单起见,我将其缩减了一点。注意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
. 在 that _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
希望这有帮助!