Pisanje modula
Možete definirati globalne ili za temu specifične doprinose koji sadrže modul teme koji se primjenjuje na različite opsege u profilima teme. Modul definira svoje doprinose upotrebom plugin.xml ili JSON datoteke.
- Sistemski moduli
- Dostupni su za sve teme na sistemu uz upotrebu plugin.xml datoteke kao dijela komprimirane datoteke u stazi klase portala, Web modula ili jedne datoteke u WEB-INF direktoriju Web modula. Modul teme se mora deklarirati unutar svoje točke ekstenzije: com.ibm.portal.resourceaggregator.module.
- Moduli specifični za temu
- Može ih referencirati samo tema koja ih definira u JSON datoteci u folderu njenih doprinosa. Folder doprinosa je default folder, ali se njegova lokacija može promijeniti postavljanjem resourceaggregation.contributions.folder meta podataka na temi, kao i u slučaju profila. Ta datoteke sistem automatski pretražuje i doprinosi koji su definirani se registriraju za temu.
- XML shema
Sljedeća slika pokazuje XML shemu za tu točku proširenja:

Sljedeći kod je primjer plugin.xml datoteke gdje se modul postavlja unutar Web aplikacije upotrebom korijena konteksta res:{war:context-root}/.
<extension point="com.ibm.portal.resourceaggregator.module" id="testModuleExtension1">
<module id="testModule1" version="1.0">
<capability id="capabilityA" value="1.0.0"/>
<capability id="capabilityB" value="1.5"/>
<prereq id="testModuleA"/>
<prereq id="testModuleB" minVersion="1.2.3.4"/>
<prereq id="testModuleC" type="optional"/>
<title lang="en" value="en Module"/>
<title lang="de" value="de Module"/>
<title lang="es" value="es Module"/>
<description lang="en" value="one two three"/>
<description lang="de" value="ein zwei drei"/>
<description lang="es" value="uno dos tres"/>
<contribution type="head">
<sub-contribution type="css">
<uri value="res:{war:context-root}/css/helloWorld.css" />
<!-- define alternate styles for right to left -->
<uri type="rtl" value="res:{war:context-root}/css/helloWorld_rtl.css" />
<!-- define alternate styles for an iPad -->
<uri deviceClass="tablet+iOS" value="res:{war:context-root}/css/helloWorld_iPad.css" />
</sub-contribution>
<sub-contribution type="js">
<uri value="res:{war:context-root}/js/helloWorldHead.js" />
</sub-contribution>
<sub-contribution type="markup">
<uri value="res:{war:context-root}/markup/helloWorldHead.html" />
</sub-contribution>
</contribution>
<contribution type="config">
<sub-contribution type="js">
<uri value="res:{war:context-root}/js/helloWorldBody_root.js" />
<!-- define alternate js for when the Portal is using different languages -->
<uri lang="en" value="res:{war:context-root}/js/helloWorldBody_en.js" />
<uri lang="de" value="res:{war:context-root}/js/helloWorldBody_de.js" />
<uri lang="es" value="res:{war:context-root}/js/helloWorldBody_es.js" />
<!-- define alternate js for debugging purposes in LTR and RTL environments -->
<uri type="debug" value="res:{war:context-root}/js/helloWorldBody_debug.js" />
<uri type="debug,rtl" value="res:{war:context-root}/js/helloWorldBody_debug_rtl.js" />
</sub-contribution>
<sub-contribution type="config_dynamic">
<uri value="res:{war:context-root}/jsp/helloWorldBodyConfig.jsp" />
</sub-contribution>
<sub-contribution type="config_static">
<uri value="res:{war:context-root}/jsp/helloWorldBodyStatic.jsp" />
</sub-contribution>
</contribution>
<contribution type="menu">
<sub-contribution type="json">
<uri value="res:{war:context-root}/js/helloWorld.json" />
</sub-contribution>
</contribution>
<contribution type="dyn-cs">
<sub-contribution type="markup" ref-id="some_dynamic_spot_id">
<uri value="res:{war:context-root}/jsp/helloWorldDynamicSpot.jsp" />
</sub-contribution>
</contribution>
<moduleActivation extensionID="com.ibm.portal.resourceaggregator.util.ResourceEnvironmentProviderModuleActivationHandler">
<parameter name="rep" value="RESOURCE_ENV_PROVIDER_NAME" />
<parameter name="key" value="KEY_IN_RESOURCE_ENV_PROVIDER"/>
</moduleActivation>
<runtimeActivation>
<condition deviceClass="tablet"/>
</runtimeActivation>
</module>
</extension>
<extension point="com.ibm.portal.resourceaggregator.module" id="testModuleExtension2">
<module id="testModule2" version="1.0">
<!-- Some other module... -->
</module>
</extension>
<extension point="com.ibm.portal.resourceaggregator.module" id="testModuleExtension3">
<module id="testModule3" version="1.0">
<!-- One last module... -->
</module>
</extension>
Sljedeći kod je primjer myModules.json datoteke koja je spremljena u folderu doprinosa za temu. Struktura, ključevi i vrijednosti koje se koriste u plugin.xml datoteci se prilagođavaju JSON formatu s ovim pravilima:
- Ključevi koji dozvoljavaju više podređenih unosa na istoj razini se koriste u množini. Na primjer, prereq postaje prereqs i capability postaje capabilities.
- Staze datoteka moraju počinjati s kosom crtom i rješavaju se relativno u odnosu na osnovni folder teme.
- JSP datoteke se ne mogu posluživati izvan WebDAV. Svi resursi relativni u odnosu na ishodište teme moraju imati statički tip, na primjer, js, CSS ili HTML.
{
"modules":[{
"id":"testModule1",
"version":"1.0",
"capabilities":[{
"id":"capabilityA",
"value":"1.0.0"
},
{
"id":"capabilityB",
"value":"1.5"
}
],
"prereqs":[{
"id":"testModuleA"
},
{
"id":"testModuleB",
"minVersion":"1.2.3.4"
},
{
"id":"testModuleC",
"type":"optional"
}
],
"titles":[{
"lang":"en",
"value":"en Module"
},
{
"lang":"de",
"value":"de Module"
},
{
"lang":"es",
"value":"es Module"
}
],
"descriptions":[{
"lang":"en",
"value":"one two three"
},
{
"lang":"de",
"value":"ein zwei drei"
},
{
"lang":"es",
"value":"uno dos tres"
}
],
"contributions":[{
"type":"head",
"sub-contributions":[{
"type":"css",
"uris":[{
"value":"/css/helloWorld.css"
},
// define alternate styles for right to left
{
"value":"/css/helloWorld_rtl.css",
"type":"rtl"
},
// define alternate styles for an iPad
{
"value":"/css/helloWorld_iPad.css",
"deviceClass":"tablet+iOS"
}]
},
{
"type":"js",
"uris":[{
"value":"/js/helloWorldHead.js"
}]
},
{
"type":"markup",
"uris":[{
"value":"/markup/helloWorldHead.html"
}]
}]
},{
"type":"config",
"sub-contributions":[{
"type":"js",
"uris":[{
"value":"/js/helloWorldBody_root.js"
},
// define alternate js for when the Portal is using different languages
{
"value":"/js/helloWorldBody_en.js",
"lang":"en"
},
{
"value":"/js/helloWorldBody_de.js",
"lang":"de"
},
{
"value":"/js/helloWorldBody_es.js",
"lang":"es"
},
// define alternate js for debugging purposes in LTR and RTL environments
{
"value":"/js/helloWorldBody_debug.js",
"type":"debug"
},
{
"value":"/js/helloWorldBody_debug_rtl.js",
"type":"debug,rtl"
}]
},
{
"type":"config_dynamic",
"uris":[{
"value":"/config/helloWorldBodyConfig.js"
}]
},
{
"type":"config_static",
"uris":[{
"value":"/config/helloWorldBodyStatic.js"
}]
}]
},{
"type":"menu",
"sub-contribution":[{
"type":"json",
"uris":[{
"value":"/js/helloWorld.json"
}]
}]
},{
"type":"dyn-cs",
"sub-contribution":[{
"type":"markup",
"ref-id":"some_dynamic_spot_id",
"uris":[{
"value":"/html/helloWorldDynamicSpot.html"
}]
}]
}],
"moduleActivation":{
"extensionID":"com.ibm.portal.resourceaggregator.util.ResourceEnvironmentProviderModuleActivationHandler",
"parameters":[{
"name":"rep",
"value":"RESOURCE_ENV_PROVIDER_NAME"
},
{
"name":"key",
"value":"KEY_IN_RESOURCE_ENV_PROVIDER"
}]
},
"runtimeActivation":[{
"condition":{
"deviceClass":"tablet"
}
}]
},{
"id":"testModule2",
"version":"1.0"
// Some other module...
},{
"id":"testModule3",
"version":"1.0"
// One last module...
}]
}
URI-ji doprinosa za Web module
- {war:context-root}
- Ova varijabla dohvaća korijen konteksta sadržane WAR datoteke i umeće ga na mjesto. Ovo radi samo za module definirane kao dio WAR datoteke. To ne radi za module definirane u WebDAV ili negdje drugdje u hijerarhiji učitavanja klasa, na primjer, dijeljenoj aplikaciji.