Ho il seguente codice di base da condividere con voi per elencare le pagine che recuperano usando il generatore di query tramite chiamata AJAX. Dobbiamo passare l'URL e i parametri per recuperare le pagine secondarie dall'URL che forniamo.Come aggiungere un elenco a discesa con l'elenco delle pagine in CQ5?
Ho messo un po 'di console.log per tracciare i valori di ogni stato. sostituisci con il tuo progetto.
<featurearticles
jcr:primaryType="cq:Widget"
fieldLabel="Article Pages"
itemId="selectauthorId"
name="./authorselect"
type="select"
xtype="selection">
<options jcr:primaryType="cq:WidgetCollection"/>
<listeners
jcr:primaryType="nt:unstructured"
loadcontent="function(box,value) {
CQ.Ext.Ajax.request({
url: '/bin/querybuilder.json',
success: function(response, opts) {
console.log('Response from the ajax');
var resTexts = $.parseJSON(response.responseText);
var selectopts = [];
console.log(resTexts);
$.each(resTexts.hits, function(key, page) {
console.log(page);
selectopts.push({value: page['path'], text:page['name']});
});
console.log(selectopts);
box.setOptions(selectopts);
},
params: {
'type' :'cq:Page',
'group.1_path' : '/content/<PROJECT_NAME>/Feature_Articles'
}
});
}"
selectionchanged="function(box,value) {
var panel = this.findParentByType('panel');
var articleTitle = panel.getComponent('articleTitleId');
CQ.Ext.Ajax.request({
url: value + '/_jcr_content/par/featurearticleintro.json',
success: function(response, opts) {
console.log('success now');
var resTexts = $.parseJSON(response.responseText);
console.log(resTexts);
},
failure: function(response, opts) {
console.log('server-side failure with status code ' + response.status);
}
});
}"/>
</featurearticles>
Se avete un'idea migliore di questa, mi piacerebbe saperlo.
Acclamazioni,
Grazie per la condivisione. Sfortunatamente, si deve scrivere l'intero JS nell'attributo Node ... :-(Questo è davvero fastidioso – Benedikt
Non è necessario inserire il _whole_ JS nel nodo stesso - basta inserire il JavaScript in una libreria client che la pagina viene caricata, quindi è necessario solo un bit, ad esempio: 'loadcontent =" function (box, value) {MyClientLib.method (box, value);} "' – Shawn