- Простым (и более ручным) способом было бы добавить поле
joinByArray
к вашему виджету, которое предназначено для страниц, а затем вручную присоединить ваши страницы к вашему виджету. Это позволит вам отсортировать порядок присоединяемых страниц с помощью пользовательского интерфейса, но его нужно будет обновить вручную, чтобы добавить больше страниц в виджет.
https://apostrophecms.org/docs/tutorials/getting-started/schema-guide.html#code-join-by-array-code
- Способом, более похожим на ваше описание (но немного более непрозрачным), было бы переопределение метода
load
виджета и ручное извлечение целевых страниц при загрузке страницы.
в /lib/modules/special-widgets/index.js
module.exports = {
extend: 'apostrophe-widgets',
label: 'Special',
construct: function (self, options) {
const superLoad = self.load;
self.load = function (req, widgets, callback) {
return superLoad(req, widgets, function (err) {
if (err) {
return callback(err);
}
// `widgets` is each widget of this type being loaded on a page
return self.apos.modules['apostrophe-pages'].find(req, { mySpecialProp: true }, {slug: 1, type: 1, _id: 1, title: 1}).toArray(function (err, docs) {
widgets.forEach(function (widget) {
// attach docs to each widget, in your widget template this becomes data.widget._pages
widget._pages = docs;
});
return callback(null);
})
});
};
}
}
В вашем lib/modules/special-widgets/views/widget.html
вы можете получить доступ к этому массиву страниц в data.widget._pages
Обратите внимание, что { mySpecialProp: true }
является критерием для вашего поиска, установите его, чтобы найти свойство вашей страницы.
Подробнее о методе .find()
на Работа с курсорами