1

附件和文件模块之间的主要区别是什么,每个模块都有特定的用例吗?权限可以同时应用于两者吗?我对这个平台很陌生,所以试图了解撇号如何完成事情的方式和原因。

4

1 回答 1

2

我是朋克大道撇号的建筑师。

确切地说,这些模块不是替代品。事实上,apostrophe-filesapostrophe-images都建立在apostrophe-attachments.

什么是apostrophe-file? 它是一个“片段”——一个带有标题、一些元数据以及在本例中是一个attachment字段的撇号文档。由于它是一个片段,就像任何博客文章或活动一样,您可以通过管理栏管理您的所有文件,您可以使用apostrophe-files-widgets它在您的站点周围显示下载链接,等等。

那么什么是一个attachment?它是一个模式字段 — 一种可以包含在 Apostrophe 中任何类型文档(例如片段或页面)的模式中的字段类型。

大多数模式字段类型都非常简单。例如,string字段类型由字符串组成。字段类型为真或假boolean,依此类推。

但是附件有点棘手。在理想的世界中……从数据库设计的角度来看……文件的实际内容将直接存在于您的文档中;doc.headshot可能是实际的 JPEG 数据(或者,可能还有一些元数据)。

但是我们不能这样做,因为文件非常大,即使它们适合 MongoDB 文档(它们并不总是),它也会非常非常低效,尤其是当我们现在对它们不感兴趣时​​。

因此,如果您使用在 mongo shell 中显示它,这是apostrophe-fileMongoDB 中的典型片段。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 _idname属性和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-imagesapostrophe-attachmentsapostrophe-images-widgetsattachment

希望这有帮助!

于 2017-03-31T00:08:53.747 回答