Различия между апострофом-вложением и апострофом-файлами?

В чем заключаются основные различия между модулями вложений и файлов и существуют ли конкретные варианты использования для каждого из них? Могут ли разрешения применяться к обоим? Я новичок в этой платформе, поэтому пытаюсь понять, как и почему апостроф делает что-то.


person dgwebb    schedule 28.03.2017    source источник


Ответы (1)


Я архитектор Апострофа на Панк-авеню.

Эти модули не являются альтернативой. Фактически, apostrophe-files и apostrophe-images оба построены на основе apostrophe-attachments.

Что такое apostrophe-file? Это «кусок» - документ апострофа с заголовком, некоторыми метаданными и, в данном случае, полем attachment. Поскольку это элемент, как и любое сообщение в блоге или событие, вы можете управлять всеми своими файлами через панель администратора, вы можете использовать apostrophe-files-widgets для отображения ссылок для скачивания по всему сайту и т. Д.

Так что же такое attachment? Это поле схемы - тип поля, которое вы можете включить в схему любого типа документа в Apostrophe, например, фрагмент или страницу.

Большинство типов полей схемы очень просты. Например, тип поля string состоит из строки. Тип поля boolean - истина или ложь и т. Д.

Но вложения немного сложны. В идеальном мире ... с точки зрения дизайна базы данных ... фактическое содержимое файла будет жить прямо в вашем документе; doc.headshot может быть фактическими данными JPEG (или, возможно, плюс некоторые метаданные).

Но мы не можем этого сделать, потому что файлы очень большие, и даже если они помещаются в документ MongoDB (а они не всегда), это было бы очень и очень неэффективно, особенно когда мы не заинтересованы в них прямо сейчас.

Вместо этого вот как выглядит типичный apostrophe-file элемент в MongoDB, если вы используете findOne для отображения его в оболочке mongo. Я немного сократил его для простоты. Обратите внимание на свойство 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 поля напрямую.

Надеюсь, это будет полезно!

person Tom Boutell    schedule 31.03.2017