Апостроф: извлечение пользовательских глобальных настроек в beforeConstruct для модуля piece (блог)
Я пытаюсь получить пользовательские глобальные настройки, которые я создал, в соответствующей области с типом поля массива.
Я хочу вставить глобальный параметр в модуль блога, чтобы создать поле для добавления к типу блога. Я попытался использовать слой модели apostrophes и коллекции mongo db, как описано в документации к учебнику, но, похоже, для этого нужны некоторые req
взаимодействие или self.method
стрелять правильно, что я не думаю, что доступно в beforeConstruct
функция.
// This would ideally be a data.global.arrayField
var optionArraySet = ['Item 1', 'Item 2', 'Item 3'];
var formattedArraySet = [];
for (var type in optionArraySet) {
formattedArraySet.push({
label: optionArraySet[type],
value: optionArraySet[type]
})
}
options.addFields = [
{
label: 'Custom Array Field',
name: 'customArrayField',
type: 'select',
choices: formattedArraySet
}
].concat(options.addFields || [])
Так optionArraySet
в идеале, с помощью глобальной настройки, содержащей массив данных, к которому я хочу получить доступ.
Для контекста, этот глобальный параметр будет применяться к паре разных областей, и вместо того, чтобы обновлять код в бэкэнде, если мы хотим изменить значения, я мог бы просто добавить новые значения в массив, установленный в глобальных настройках, и получить страницы внешнего интерфейса обновляют свой дисплей, а поля настроек обновляют соответствующие фрагменты.
Если это помогает, я в основном пытаюсь контролировать теги, которые редактор содержимого может выбрать для определенного типа фрагмента, чтобы они не могли вводить нежелательные теги.
construct: function(self, options) {
self.beforeSave = function(req, piece, options, callback) {
var newTags = [];
newTags.push(piece.anotherFieldValue);
var customArrayField = piece.customArrayField;
for (var option in customArrayField) {
newTags.push(customArrayField[option]);
}
piece.tags = newTags;
return callback();
};
}
Спасибо
1 ответ
Поскольку глобальные настройки могут быть изменены в любое время, и beforeConstruct
выполняется только тогда, когда сайт запускается, не очень полезно читать глобальные настройки там.
Есть способы, которыми вы могли бы исправить схему во время выполнения, но есть гораздо более простое решение:
Создайте новый модуль типа фигуры "special-tags". Задавать
name
вspecial-tag
,Использовать
joinByArray
поле схемы с именем_specialTags
присоединитьсяwithType: 'special-tag'
,
Теперь пользователи могут выбирать из списка специальных тегов только при редактировании документа, который имеет это соединение в своей схеме, а администраторы могут редактировать специальные теги через панель администратора, как и любой другой тип фрагмента. Объединение загружается вместе с документом, поэтому вы можете получить доступ, например, к ._specialTags
и найти массив документов с title
свойства, содержащие имена тегов.
Для получения дополнительной информации о joinByArray
посмотри пожалуйста:
http://apostrophecms.org/docs/tutorials/getting-started/schema-guide.html
И схема руководства в целом.