В чем заключаются основные различия между модулями вложений и файлов и существуют ли конкретные варианты использования для каждого из них? Могут ли разрешения применяться к обоим? Я новичок в этой платформе, поэтому пытаюсь понять, как и почему апостроф делает что-то.
Различия между апострофом-вложением и апострофом-файлами?
Ответы (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
поля напрямую.
Надеюсь, это будет полезно!