Я играл с Apostrophe CMS и пытался создать виджет, который получает некоторые значения от стороннего API на основе его настроек. Есть ли способ получить значения виджета внутри виджета index.js?
В основном, когда администратор создает страницу, он добавляет виджет с некоторыми установленными значениями. И поведение виджета должно меняться в зависимости от этих настроек. Возможно ли это вообще, и если да, то как?
const request = require('request-promise');
module.exports = {
extend: 'apostrophe-widgets',
label: 'Listing widget',
addFields: [
{
name: 'page',
type: 'integer',
label: 'Page',
required: true
},
{
name: 'count',
type: 'integer',
label: 'Count',
required: true
}
],
construct: function(self, options) {
self.on('apostrophe-pages:beforeSend', 'preset', async function(req) {
var page = ...;
var count = ...;
const dataToList = await request({
uri: "someURL?count=" + count + "&page=" + page,
json: true
});
req.data.dataToList = dataToList;
});
}
};
В моем коде вы можете увидеть очень простой виджет. Единственное, что мне нужно, это как-то получить значения для переменных page и count.
Обновление:
По совету Стюарта Романека исправленный окончательный код выглядит следующим образом:
const request = require( 'request-promise' );
module.exports = {
extend: 'apostrophe-widgets',
label: 'Listing widget',
addFields: [
{
name: 'page',
type: 'integer',
label: 'Page',
required: true
},
{
name: 'count',
type: 'integer',
label: 'Count',
required: true
}
],
construct: function( self, options )
{
const superLoad = self.load;
self.load = ( req, widgets, callback ) => superLoad( req, widgets, async ( err ) =>
{
if( err )
{
return callback( err );
}
for( const widget of widgets )
{
var page = widget.page;
var count = widget.count;
const dataToList = await request( {
uri: "http:/APIRoute?count=" + count + "&page=" + page,
json: true
} );
widget.dataToList = dataToList;
}
return callback( null );
} );
}
};
А из HTML к нему можно получить доступ: data.widget.dataToList.