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:

Doprinos sadrži tip doprinosa.

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.