Les artefacts de base et leurs relations
L'infrastructure de modularisation de thème prévoit les artefacts majeurs et leurs relations ci-dessous.
Les relations des artefacts majeurs sont représentées dans l'image suivante :
Un thème est affecté à une page de portail. Les zones de contenu dynamique sont utilisées pour écrire toutes les données des modules qui contribuent pour un certain type. L'infrastructure de module fournit les zones de contenu dynamique co:config et co:head. Le thème doit fournir un ou plusieurs profils et déclare l'ensemble de modules utilisés pour ce profil. L'un de ces profils est utilsé par chaque page à laquelle le thème est appliqué. Le profil qui est utilisé pour la page est le profil par défaut que définit le développeur ou l'administrateur de thème en définissant les métadonnées de thème resourceaggregation.profile.
L'administrateur de la page peut explicitement remplacer la valeur par défaut en définissant les métadonnées resourceaggregation.profile.
Les modules disponibles dans le système peuvent être enregistrés par le point d'extension com.ibm.portal.resourceaggregator.module dans un fichier plugin.xml ou à l'aide d'un fichier JSON se trouvant dans un thème dans le dossier <theme-root>/contributions. Ce chemin ne peut pas être personnalisé.
Par exemple, la zone head, <link rel="dynamic-content"
href="co:head"></link>, agrège toutes les contributions de type head.
- La zone head doit se trouver dans l'élément
<head>du marquage de la page. L'élément<head>doit se trouver avant l'élément<body>dans le marquage de la page. - La zone config doit se trouver dans l'élément
<body>du marquage de la page. Faites en sorte que la zone config soit le dernier élément avant la balise de fermeture.
Les contributions au point d'extension head sont avantageusement utilisées pour les données devant être chargées au début de la page. Elles incluent la génération de marquage qui n'est valide que dans l'élément <head> ou la mise à disposition de fonctions qui doivent être disponibles dans d'autres codes intégrés dans le corps de la page. Par exemple, les éléments <link> ne peuvent apparaître que dans l'élément head ; par conséquent, tous les éléments CSS doivent être ajoutés dans la contribution head. De plus, tout code JavaScript intégré qui utilise une fonction d'utilitaire pour associer un gestionnaire d'événements à l'événement de chargement, par exemple, dojo.addOnLoad, dépend de la définition de cette fonction précédemment dans le marquage de la page.
Placez la zone config à la fin de l'élément de corps de page. Ce placement permet d'écrire la plupart des ressources JavaScript et tout autre code d'activation dans le marquage après la présentation de page et la zone de contenu. La réactivité perçue du serveur est accrue car le contenu de la page est affiché alors que le navigateur est encore en train de télécharger des ressources définies après la zone de contenu. Toutefois, la zone config ne se trouve pas forcément à cet emplacement et un concepteur de thème peut la placer dans l'élément <head> lorsque la première contrainte soit respectée.
Etant donné que l'emplacement de la zone config peut varier, le code qui apparaît dans le contenu de la page ne doit pas supposer que la zone config a déjà été générée. Le code JavaScript qui apparaît dans la zone de contenu et qui dépend d'autres modules JavaScript chargés par la zone config est différé jusqu'au déclenchement de l'événement de chargement. Ainsi, il est garanti que le code figurant dans un portlet, par exemple, fonctionnera toujours quelle que soit la position de la zone config. Un portlet JavaScript créant des widgets côté client lors du chargement de page en est un exemple. Les modules de widget eux-mêmes peuvent être chargés par la zone config alors que le code qui les crée et les utilise est exécuté lors du chargement.
Les modules peuvent déclarer des dépendances à des modules prérequis. De plus, ils peuvent déclarer leurs capacités, ce qui permet aux portlets et à tout autre code sur la page de rechercher la disponibilité d'une certaine capacité.
Les portlets peuvent déclarer une dépendance sur des fonctions de manière à télécharger automatiquement toutes les ressources d'un module. Vous n'avez pas besoin d'ajouter ce module au profil, mais vous devez définir ce comportement dans votre thème.