| Door: Ruud van Zuidam. | Categorie: Algemeen.

Alternatieve Layouts in Joomla 2.5.x

alternatieve-layoutsJoomla 1.5 introduceerde het concept van template override's waarmee de HTML uitvoer van Joomla's componenten en modules veranderd kon worden, zonder een core hack te hoeven toepassen. Joomla 2.5 introduceert "Alternatieve Layouts", een set van mogelijkheden waarmee je als administrator meer controle hebt over de layout (weergave) van artikelen, contacten, nieuwsfeeds en weblinks.

Er zijn vier types van alternatieve layouts:

  1. Module
  2. Component
  3. Categorie
  4. Menu Item

Alternatieve layouts werken op een gelijksoortige manier als template override's maar geven je meer opties en controle, elk van de vier types word hieronder beschreven.

Alternatieve layout bestanden hebben altijd voorrang boven de standaard template overrides

1. Alternatieve Module Layouts

Het maken van een alternatieve layout voor een module verschilt slechts weinig van het maken van een template override voor een module.

In beide gevallen maak je een map genaamd "templates/html/". Voorbeeld; de map voor een "mod_login" template override of een alternatieve weergave zou zijn "templates/beez5/html/mod_login/".

Toch zijn er twee belangrijke verschillen tussen een template override en een alternatieve layout, het eerste verschil is de bestandsnaam, voor een template override, noem je het bestand "default.php" dus dezelfde naam als die van de oorspronkelijke bestand waarvoor je een override wilt maken.

Voor een alternatieve weergave, gebruik je een andere naam voor het bestand dat je wilt gaan gebruiken, de enige regel is dat je geen underscores ( _ ) in die naam mag gebruiken, alternatieve layouts kunnen uit meerdere bestanden bestaan Dit maakt het mogelijk om complexe weergaven te gebruiken die uit meerdere bestanden worden opgebouwd, de alternatieve layout bestanden die aangeroepen worden uit het initiële bestand (zonder underscores!) moeten verplicht wel een underscore in de naam hebben.

Voorbeeld, je hebt een initiël bestand met de naam "beez5layout.php" dat opgebouwd wordt met gebruik van "beez5layout_1.php".

Het tweede belangrijke verschil is dat anders als bij template overrides, Joomla niet automatisch de alternatieve layout gebruikt om de module weer te geven, een alternatieve layout wordt alleen getoond wanneer je deze in het beheer gedeelte als parameter selecteert, onder de geavanceerde opties vind je alternatieve layout.

opties-login-module

De parameter laat een lijst zien van alle bestanden (zonder underscore!) die staan in de folder "templatenaam/html/modulenaam" van de geïnstalleerde templates. Je kunt zelfs de naam van deze bestanden in de juiste taal laten weergeven door deze als vertaling op te nemen in het taalbestand van de template.

Voorbeeld; je kunt deze regel opnemen in het taal bestand "en-GB.tpl_beez5.sys.ini"

{codecitation}TPL_BEEZ5_MOD_LOGIN_BEEZ5LAYOUT="beez5Layout"{/codecitation}

dat zorgt er voor dat de bestandsnaam "beez5layout.php" vertaald wordt naar "beez5layout".

Het is belangrijk om te beseffen dat welke template er ook gebruikt wordt, de in de module gekozen alternatieve weergave altijd getoond wordt. Controleer daarom goed of een alternatieve weergave wel geschikt is om te gebruiken. Zorg bij het maken van alternatieve layout dus zo veel mogelijk voor dat deze in elke template waarin hij gebruikt zou kunnen worden ook werkt.

2. Alternatieve Component Layouts

Alternatieve component layouts werken vergelijkbaar als de module weergave die we hierboven hebben beschreven. Ook nu plaatsen we een bestand in dezelfde map als waar we template override plaatsen. Voorbeeld; voor een alternatieve weergave voor een artikel voor de template "beez5", plaatsen we een bestand in de map "templates/beez5/html/com_content/article/".

Het bestand moet een andere naam hebben als het bestaande core bestand en mag nogmaals geen underscores in de bestandsnaam hebben, bovendien mag er geen XML bestand met de zelfde naam in deze map staan! De XML bestanden bespreken we verderop in dit artikel bij alternatieve menu-item layouts.

Je kunt een algemene waarde voor de component weergaven kiezen/instellen in het opties venster van de component. Voorbeeld, in het artikel beheer opties venster is er een parameter voor alternatieve weergaven.

artikelbeheer

Dit vormt een algemene instelling voor individuele componenten zoals artikelen, contacten, nieuwsfeeds en weblinks gebruik van maken. Net als bij module layouts, worden de component layouts getoond als parameter opties in het individuele component bewerk venster. Bijvoorbeeld, voor een artikel, worden de parameters getoond in de artikel weergave opties.

artikel_layout_opties

Net als bij andere parameters, gebruikt de algemene instelling de instellingen van de opties parameters. De "van algemene opties" gebruikt de standaard component layout. De alternatieve layouts die je hebt gecreëerd voor verschillende template's worden weergegeven elke onder een eigen template rubriek.

Ook hier kan de bestandsnaam(en) worden vertaald. De regel hieronder

{codecitation}TPL_BEEZ5_COM_CONTENT_ARTICLE_LAYOUT_MIJNWEERGAVE="Alleen Titel geen XML"{/codecitation}

Zal als vertaling voor het bestand "mijnweergave.php" weergeven als "Alleen Titel geen XML".

Ook hier kun je weer meer dan één bestand gebruiken voor een layout en geldt weer de regel dat het initiële bestand een naam moet hebben zonder underscores en elk daarbij horend bestand een naam met een underscore.

Alternatieve layouts voor een component kunnen gebruikt worden voor artikelen, contacten, of nieuwsfeeds. Weblinks hebben geen "single-component layout" waardoor er dus geen alternatieve layout beschikbaar is voor weblinks.

Alternatieve layouts voor een component kunnen alleen worden gebruikt als voldaan word aan twee voorwaarden:

  1. Ze zijn beschikbaar via de component parameters.
  2. Er is geen menu-item aangemaakt dat verwijst naar dit specifieke component.

Voorbeeld; als je een of meer menu-items van het type "individueel artikel" gebruikt voor een bepaald artikel, dan zal de alternatieve layout voor dat artikel niet worden gebruikt. In plaats daarvan, zal de weergave die gekozen is bij het menu-item worden gebruikt. Dat is consistent met de algemene manier waarop component parameters in joomla werken, waarbij de meest specifieke (in dit geval een "individueel artikel menu-item") het minder specifieke overschrijft (in dit geval, de artikel parameters).

3. Alternatieve Categorie Layout

Alternatieve categorie layouts werken net zo als de component weergave, de voorwaarden voor het specificeren van weergave bestanden zijn hetzelfde, het enige verschil is dat het nu de categoriemap en niet de componentmap betreft.

Voorbeeld; een alternatieve contact categorie layout voor de beez5 plaats je in de map "templates/beez5/html/com_contact/category".

Je kunt de categorie layouts algemeen, in het optie venster van elk component instellen, hieronder zie je een voorbeeld van het contactbeheer optievenster:

contact_opties

Alternatieve categorie layouts worden getoond als je een categorie toevoegt of bewerkt in categoriebeheer onder de tab, Basis opties.

contact_cat_layout

Categorie alternatieve layouts kun je gebruiken voor artikelen, contacten, nieuwsfeeds, en weblinks. Net als bij component layout worden categorie layout alleen getoond als ze:

  1. Zijn gespecificeerd voor de categorie in de algemene of categorie parameters.
  2. Als er geen menu-item gespecificeerd is voor de categorie.

Voorbeeld; lijst contact in een categorie, lijst nieuwsfeeds in een categorie, lijst weblinks in een categorie, categorielijst, categorieblog.

Als er een menu-item ingesteld is voor de categorie, dan zal de weergave van dit menu-item gebruikt worden i.p.v. de alternatieve categorie layout.

Blog of lijstweergave

Voor artikelen, hebben we twee core layouts beschikbaar: blog en lijst, beide opties worden getoond in de tab categorie van het artikel.

Dus net als bij alle ander opties kun je hier selecteren dat je algemeen gebruik wilt maken van een van deze opties of als je een individueel artikel bewerkt.

artikelbeheer_opties

Dit betekend dat net als bij andere layout opties hier bepaald kan worden of de categorie in blog layout of in lijst layout worden getoond.

4. Alternatieve Menu-items Layout

Alternatieve menu-items hebben een belangrijk verschil met de andere alternatieve weergaven.

Om een alternatieve menu-item weergave toe te voegen, moet er een XML bestand met een naam die gelijk is aan het initiële layout bestand worden toegevoegd. Bijvoorbeeld, om het alternatieve menu-item met de naam "myarticle" toe toevoegen voor de een artikel in de beez5 template, moet je twee bestanden maken in de "templates/beez5/html/com_content/article" map met de namen "myarticle.php" en "myarticle.xml". en als je dan weer meer layout bestanden wilt gebruiken voeg je deze weer toe als bestanden met een underscore (bijvoorbeeld myarticle_1.php).

Het XML bestand is eigenlijk gelijk van opbouw als het core menu-item XML bestand. Dat zorgt er voor dat je niet alleen een menu-item voor je aangepaste weergave kunt toevoegen, maar ook nog aangepaste parameters. Zo zou je bijvoorbeeld eventueel parameters kunnen toevoegen of verbergen.

Alternatieve menu-item layouts worden getoond als je menu-itemtype in menubeheer selecteert.

menu_item

Alternatieve menu-items kun je gebruiken en werken op dezelfde manier als standaard menu-items. Omdat template overide's gebaseerd zijn op aangepaste weergaven, werken deze niet met alternatieve menu-item layouts.

Zoals hierboven al beschreven heeft een menu-item weergave prioriteit boven de alternatieve weergaven voor component(en) en categorie(ën).

Het vertalen van alternatieve menu-items in de XML bestanden wordt gedaan met de volgende tags. De standaard naamgeving is

{codecitation}TPL_<template name>_<component>_<view>_<menu item name>_<tag type>. {/codecitation}

Bijvoorbeeld, de regels hieronder verzorgen de vertaling de titel, optie, en beschrijving van een alternatief menu-item genaamd "catmenuitem".

{codecitation}TPL_BEEZ5_COM_CONTENT_CATEGORY_VIEW_CATMENUITEM_TITLE="Beez5 Custom Category Layout" TPL_BEEZ5_COM_CONTENT_CATEGORY_VIEW_CATMENUITEM_OPTION="Beez5 Custom" TPL_BEEZ5_COM_CONTENT_CATEGORY_VIEW_CATMENUITEM_DESC="Description for beez5 custom category layout."{/codecitation}

Deze taalstrings moet je toevoegen aan het bestand "language/en-GB/en-GB.tpl_beez5.sys.ini". Het bestand catmenuitem.xml begint dan met:

{codecitation style="brush: xml;"}<?xml version="1.0" encoding="utf-8"?>

<metadata>

<layout title="TPL_BEEZ5_COM_CONTENT_CATEGORY_VIEW_CATMENUITEM_TITLE" option="TPL_BEEZ5_COM_CONTENT_CATEGORY_VIEW_CATMENUITEM_OPTION"> 

<help

key = "JHELP_MENUS_MENU_ITEM_ARTICLE_SINGLE_ARTICLE" 

/>

<message>

<![CDATA[TPL_BEEZ5_COM_CONTENT_CATEGORY_VIEW_CATMENUITEM_DESC]]>

</message>

</layout>{/codecitation}

Beheren van de template voor alternatieve menu-items

Zoals beschreven hierboven maakt de aanwezigheid van een XML bestand een alternatieve weergave voor een menu-item mogelijk en is de opbouw gelijk aan de core menu-item XML bestanden.

In dit XML bestand kun je parameters zetten die je aan dit menu-item wilt toevoegen, deze kunnen hetzelfde zijn als de core menu-items, of je kunt core parameters weglaten. Bedenk wel dat als je nieuwe parameters toevoegt, deze gebruikt kunnen worden in dit weergave bestand maar niet gebruikt kunnen worden in de core model en view bestanden.

Het is ook mogelijk om de parameter instellingen voor de core parameters te overriden. Een voorbeeld hiervan is de mogelijkheid om te bepalen bij welke template's een alternatieve menu-item weergave wordt getoond. In sommige gevallen wil je een alternatieve weergave kunnen gebruiken bij elke template in andere is het specifiek voor een enkele template en wil je hem dus ook alleen bij die template tonen. Als dit het geval is kun je de onderstaande parameter toevoegen aan het XML bestand van het menu-item:

{codecitation style="brush: xml;"}<fields>
 <field
   name="template_style_id"
   type="templatestyle"
   label="COM_MENUS_ITEM_FIELD_TEMPLATE_LABEL"
   description="COM_MENUS_ITEM_FIELD_TEMPLATE_DESC"
   filter="int"
   template="beez5"
   class="inputbox">
 </field>
</fields>{/codecitation}

Dit werkt als een override voor de core "template_style_id" parameter. De parameter template = "beez5" maakt het mogelijk dat de gebruiker alleen template layouts kan selecteren voor de "beez5" template.

De Alternatieve layout mogelijkheden in Joomla! 2.5.x geven je een krachtige instrument waarmee je in tegenstelling tot template overides, meerdere layouts tot je beschikking te hebt en deze op veel verschillende plaatsen te kunt inzetten.

Bronnen (10-07-2013 Aangepast)