Modèles et exemples de regroupeur
La section Modèles et exemples de regroupeur fournit des modèles et exemples de regroupeur courants que vous pouvez adopter pour implémenter votre propre regroupeur.
Modèle de module JavaScript
/**
* Check if the aggregator module is already defined.
*/
if (typeof(ibm_analytics_MyAggregator) === "undefined") {
/**
* Function to construct the aggregator
*/
ibm_analytics_MyAggregator = function(/* Arguments needed internally */) {
/**
* The aggregator instance
*/
var aggregator = {};
// define your internal variables
var a = ...;
var b = ...;
// ...
/**
* Public function which parses the given DOM nodes to detect
* the microformats the aggregator is interested in.
*/
aggregator.parse = function(/*DOMNode[]*/ nodes, /*Function?*/ callback) {
// check if a specific part of the DOM should be parsed
if (nodes && nodes.length > 0) {
/*
* Page element notification
*/
// invoke your internal parsing code here
// ...
} else {
/*
* Page notification
*/
// invoke your internal parsing code here
// ...
}
// invoke the callback (if any)
if (callback) {
callback();
}
};
/**
* Public function to submit the collected data to the
* analytics service.
*/
aggregator.submit = function() {
// send the collected data off to the external analytics service
// use your preferred technique here (tracking image, XHR etc.)
// ...
};
// define your internal functions
var parseNode = function(/*DOMNode*/ node) {
// ...
};
// ...
// return the aggregator
return aggregator;
};
};A l'aide de ce modèle, le module de regroupeur exporte deux fonctions : - La fonction
parse()est chargée de traiter les notifications DOM envoyées par SiteAnalyticsMediator. Elle est compatible avec la signature de fonction définie par l'interface SPI du médiateur d'analyse de site actif, comme expliqué dans la rubrique sur l'interface SPI du médiateur d'analyse de site actif. Utilisez cette fonction pour analyser le DOM afin de rechercher les microformats d'analyse qui vous intéressent. En règle générale, la fonction d'analyse stocke les microformats détectés dans un compartiment interne, tel qu'un objet JSON, transmis par la suite au service d'analyse externe. Dans le modèle de module JavaScript, vous pouvez également voir comment le regroupeur peut distinguer les notifications de page des notifications d'élément de page (un élément de page peut être un portlet ou un composant Ajax). - La fonction
submit()est chargée d'envoyer les données collectées au service d'analyse externe. Utilisez la méthode de votre choix pour lancer une demande HTTP qui communique les données au service d'analyse. Pour des raisons de performances, communiquez les données de manière asynchrone, par exemple par une image de suivi ou une demande XmlHTTPRequest asynchrone.
Enregistrement auprès du médiateur d'analyse de site
parse() auprès du médiateur d'analyse de site immédiatement après avoir défini le module du regroupeur :// instantiate and initialize the aggregator
var ibm_analytics_aggregator = new ibm_analytics_MyAggregator(/* arguments as needed...*/);
// register the parse function of the aggregator with the mediator
com.ibm.portal.analytics.SiteAnalyticsMediator.register(function() {
ibm_analytics_aggregator.parse.apply(ibm_analytics_aggregator, arguments);
});Soumission des données d'analyse
Vous pouvez soumettre les données de diverses manières. Vous pouvez soumettre les données en interne à l'aide du regroupeur. Par exemple, vous pouvez soumettre des données lors de la réception d'une notification ou sur la base de l'état interne du regroupeur. Ou vous pouvez déclencher la transmission des données de l'extérieur sur la base d'un événement extérieur. Cette décision peut dépendre du modèle de gestion de votre fournisseur de services d'analyse externe. Pour plus d'informations, voir Instructions d'implémentation d'un regroupeur.
Pour déclencher la soumission de données en fonction d'un événement externe, vous pouvez utiliser l'événement DOM beforeunload du navigateur ou une solution temporelle. La solution temporelle envoie les données de manière périodique. Vous pouvez également combiner les deux approches.
beforeunload du navigateur, abonnez-vous à l'événement beforeunload à l'aide de la fonction submit() de votre regroupeur, comme illustré par l'exemple suivant :// instantiate and initialize the aggregator
var ibm_analytics_aggregator = new ibm_analytics_MyAggregator(/* arguments...*/);
// register the parse function of the aggregator with the mediator
com.ibm.portal.analytics.SiteAnalyticsMediator.register(function() {
ibm_analytics_aggregator.parse.apply(ibm_analytics_aggregator, arguments);
});
// callback function to submit the collected data to the external analytics service
var ibm_analytics_MyAggregator_submit = function() {
ibm_analytics_aggregator.submit.apply(ibm_analytics_aggregator, arguments);
}
// register the callback functions
if (window.addEventListener) {
// W3C
window.addEventListener("beforeunload", ibm_analytics_MyAggregator_submit, false);
} else if (window.attachEvent) {
// Microsoft
window.attachEvent("onbeforeunload", ibm_analytics_MyAggregator_submit);
}Si vous utilisez l'affichage d'agrégation côté client pour vos pages de portail, les régénérations intégrales de pages et par conséquent les événements de déchargement DOM ne se produisent pas souvent. Dans ce cas et avec cette approche, le regroupeur collecte les données pendant une longue période sans envoyer les données collectées au service d'analyse externe. Pour éviter cela, vous pouvez combiner l'approche de déchargement avec une approche temporelle. Par exemple, vous pouvez soumettre les données collectées de manière périodique, en plus de les envoyer lors de la réception d'un événement beforeunload. Pour implémenter la soumission de données périodique, utilisez l'API JavaScript setInterval() fournie par tous les principaux navigateurs. Dans ce cas, vous enregistrez la fonction submit() omme gestionnaire d'intervalles dans votre gestionnaire de chargement. L'exemple de code ci-après utilise un intervalle de 30 secondes. Cette action signifie que les données sont soumises toutes les 30 secondes au plus tard, si aucun événement beforeunload n'est reçu. // instantiate and initialize the aggregator
var ibm_analytics_aggregator = new ibm_analytics_MyAggregator(/* arguments...*/);
// register the parse function of the aggregator with the mediator
com.ibm.portal.analytics.SiteAnalyticsMediator.register(function() {
ibm_analytics_aggregator.parse.apply(ibm_analytics_aggregator, arguments);
});
// callback function to initialize and register the aggregator
var ibm_analytics_MyAggregator_init = function() {
// register the interval handler
setInterval(ibm_analytics_MyAggregator_submit, 30000);
};
// callback function to submit the collected data to the external analytics service
var ibm_analytics_MyAggregator_submit = function() {
ibm_analytics_aggregator.submit.apply(ibm_analytics_aggregator, arguments);
}
// register the callback functions
if (window.addEventListener) {
// W3C
window.addEventListener("load", ibm_analytics_MyAggregator_init, false);
window.addEventListener("beforeunload", ibm_analytics_MyAggregator_submit, false);
} else if (window.attachEvent) {
// Microsoft
window.attachEvent("onload", ibm_analytics_MyAggregator_init);
window.attachEvent("onbeforeunload", ibm_analytics_MyAggregator_submit);
}Si des applications Ajax sur vos sites de portail modifient le marquage de manière dynamique à l'aide de JavaScript, vous devez notifier manuellement l'infrastructure SiteAnalyitcsMediator. Pour cela, vous pouvez appeler la fonction notify() fournie par l'objet SiteAnalyticsMediator. // determine the root nodes of the DOM subtrees that have changed
var nodes = ...;
com.ibm.portal.analytics.SiteAnalyticsMediator.notify(nodes, callback);Exemples de regroupeur
PortalServer_root/doc/js-samples de votre installation de portail. L'exemple de code fourni ne requiert pas de bibliothèque JavaScript spéciale, mais vous pouvez utiliser l'infrastructure JavaScript de votre choix. Avec l'infrastructure JavaScript, vous pouvez réduire la taille et la complexité des implémentations de votre regroupeur. Et l'infrastructure JavaScript peut vous aider à atteindre de bonnes performances. Pour expliquer les concepts abordés dans les rubriques précédentes, les exemples de regroupeur sont simplifiés en termes de données évaluées. Vous pouvez installer chacun des exemples de regroupeur fournis sur HCL Portal, comme décrit dans la rubrique Ajout d'un regroupeur d'analyse de site actif (ASA) à une page du portail. HCL Portal fournit les exemples de regroupeur suivants :- CoremetricsAggregator.js
- Cet exemple de regroupeur collecte les données d'analyse et les envoie au service IBM® Coremetrics® Web Analytics. Il utilise une API JavaScript spécifique à Coremetrics® pour soumettre les données. Vous devez configurer cette API en tant que dépendance du regroupeur. L'URL cible est
http://libs.coremetrics.com/eluminate.js. Avant de pouvoir utiliser le regroupeur, vous devez également modifier le code du regroupeur pour spécifier votre ID client Coremetrics®, le domaine de cookie et le domaine de collecte de données. - SampleAggregator.js
- Il s'agit d'un regroupeur générique. Il collecte toutes les données d'analyse et les envoie à l'URL
http://example.orgà l'aide d'une image de suivi. Les données collectées sont ajoutées à l'URL de l'image en tant que chaîne de requête. Les noms des paramètres d'URL correspondent aux noms de microformat définis dans Etiquettes de regroupeur prises en charge.