Geavanceerde Template Functies
Joomla! 1.5 biedt een aantal geavanceerde template functies die aanzienlijk uitbreiden wat er mogelijk is met templates. We hebben al een voorbeeld gezien in dit hoofdstuk, de mogelijkheid van aangepaste chroom of uitvoer voor modules.
Laten we die op hun beurt behandelen:
- Template Parameters
- Template Overrides
Template Parameters
Nieuw in 1.5 versie is de toevoeging van de template-parameters voor de templates. Op deze manier kunt u variabelen in het template doorgeven met de geselecteerde opties in de administratieve backend.
Wij kunnen een relatief eenvoudige parameter-functie toevoegen aan onze template. In de templateDetails.xml bestand, voegen we het volgende toe: <params>
<params>
<param name="template_width" type="list" default="fluid" label="Template Width" description="Width style of the template">
<option value="fluid">Fluid with maximum and minimum</option>
<option value="medium">Medium</option>
<option value="small">Small</option>
</param>
</params>
Verder hoort een bestand met de naam params.ini in uw template map. Het kan een leeg bestand zijn, Joomla! gebruikt dit bestand om uw instellingen in op te slaan. Een INI-bestand voor het vorige voorbeeld kan er zo uitzien:
template_width=2
Zorg dat dit bestand schrijfbaar is, zodat wijzigingen kunnen worden op geslagen. We zullen dit ook moeten toevoegen aan de templateDetails.xml file.
In de Template Manager voor die template, zijn de instellingen zichtbaar zoals getoond in Figuur 9.11.

Figure 9.11 Template parameters in administratieve backend
We kunnen een eenvoudig drop-down menu zien met drie opties.
<param name="template_width" type="radio" default="0" label="Template Width" description="Change width setting of template">
<option value="0">800x600</option>
<option value="1">1024x756</option>
<option value="2">fluid (min/max with FF and IE7, 80% with IE6)</option>
</param>
Daarna veranderen we de body tag in onze index.php naar het volgende:
<body class="width_<?php echo $this->params->get('template_width'); ?>">
Dan voegen we het volgende toe aan het CSS bestand:
body.width_0 div#wrap {
width:760px;
}
body.width_1 div#wrap {
width:960px;
}
body.width_2 div#wrap {
min-width:760px;
max-width:960px;
width:auto !important;
}
#wrap {
text-align:left;
margin:0 auto;
}
Dit geeft ons drie mogelijkheden: een vaste smalle breedte, vaste brede breedte, en een aanpassende versie.
Template parameters kan de beheerder van deze site op deze manier gebruiken voor de flexibiliteit in bijna elk facet van een template, dikte, kleur, enzovoort, allemaal onder controle gehouden met voorwaardelijke PHP instelling voor CSS stijlen.
Template Overrides
Misschien is de meest krachtige nieuwe functie van de tempalte in 1.5 de mogelijkheid om eenvoudig de kern uitvoer te overschrijven. Dit wordt gedaan met nieuwe productie-bestanden genaamd template bestanden die overeenkomen met de lay-out views van componenten en modules. Joomla! controleert in elk geval om te zien of er een in de template map bestaat en als daar sprake van is, gebruikt Joomla! die, boven de normale productie versie.
Override Structuur
Alle layout views en templates staan in de hoofd code in een /tmpl/ map. De locatie is soms anders voor een component dan voor een module omdat modules in essentie maar een view hebben. Bijvoorbeeld:
modules/mod_newsflash/tmpl/
modules/mod_poll/tmpl/
components/com_login/views/login/tmpl/
components/com_content/views/section/tmpl/
De basis structuur van alle componenten en modules is View>Layout>Templates.
Table 9.3 laat sommige voorbeelden zien, mer op dat modules slechts een view hebben.
Tabel 9.3 Voorbeeld overrides
| View | Layout | Templates |
| Categorie | Blog.php | blog_item.php blog_links.php |
| Categorie | default.php | default_items.php |
| (Nieuwsflits) | default.php horz.php vert.php | _item.php |
Er zijn meestal verschillende template in gebruik bij een bepaalde layout. Zij hebben een gebruikelijke naam conventie (zie tabel 9.4)
Tabel 9.4 Namen conventie voor overrides
| Bestandsnaam conventie | Beschrijving | Voorbeeld |
| layoutname.php | De hoofd layout template | blog.php |
| layoutname_templatename.php | Een onderdeel layout template aangeroepen door de hoofdlayout template | blog_item.php blog_links.php |
| _templatename.php | Een vaak gebruikte template layout in gebruik door verschillende layouts | _item.php |
Overriding Modules
Elke module heeft een nieuwe map waarin zijn templates zich bevinden, genaamd tmpl. Daarbinnen zijn PHP bestanden, die de uitvoer maken. Zoals bijvoorbeeld:
/modules/mod_newsflash/tmpl/default.php
/modules/mod_newsflash/tmpl/horiz.php
/modules/mod_newsflash/tmpl/vert.php
/modules/mod_newsflash/tmpl/_item.php
De eerste drie zijn de drie layouts van de nieuweflash gebaseerd op welke module opties worden gekozen. En de _item.php file is de gebruikelijke layout template voor alle drie. Dat bestand openend, zien we:
<?php // no direct access defined('_JEXEC') or die('Restricted access'); ?>
<?php if ($params->get('item_title')) : ?>
<table class="contentpaneopen<?php echo $params->get( 'moduleclass_sfx' ); ?>">
<tr>
<td class="contentheading<?php echo $params->get( 'moduleclass_sfx' ); ?>" width="100%"><?php if ($params->get('link_titles') && $item->linkOn != '') : ?>
<a href="/<?php echo $item->linkOn;?>" class="contentpagetitle<?php echo $params->get( 'moduleclass_sfx' ); ?>"> <?php echo $item->title;?> </a>
<?php else : ?>
<?php echo $item->title; ?>
<?php endif; ?>
</td>
</tr>
</table>
<?php endif; ?>
<?php if (!$params->get('intro_only')) : echo $item->afterDisplayTitle; endif; ?>
<?php echo $item->beforeDisplayContent; ?>
<table class="contentpaneopen<?php echo $params->get( 'moduleclass_sfx' ); ?>">
<tr>
<td valign="top" colspan="2"><?php echo $item->text; ?></td>
</tr>
</table>
<?php if (isset($item->linkOn) && $item->readmore) : echo '<a href="/'.$item->linkOn.'">'.JText::_('Read more').'</a>'; endif; ?>
We kunnen dit wijzigen door de tabellen te verwijderen om een beetje meer toegangkelijkheid te krijgen:
<?php // no direct access defined('_JEXEC') or die('Restricted access'); ?>
<?php if ($params->get('item_title')) : ?>
<div class="contentpaneopen<?php echo $params->get( 'moduleclass_sfx' ); ?>">
<div class="contentheading<?php echo $params->get( 'moduleclass_sfx' ); ?>">
<?php if ($params->get('link_titles') && $item->linkOn != '') : ?>
<a href="/<?php echo $item->linkOn;?>" class="contentpagetitle<?php echo $params->get( 'moduleclass_sfx' ); ?>"> <?php echo $item->title;?> </a>
<?php else : ?>
<?php echo $item->title; ?>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
<?php if (!$params->get('intro_only')) : echo $item->afterDisplayTitle; endif; ?>
<?php echo $item->beforeDisplayContent; ?>
<div class="contentpaneopen<?php echo $params->get( 'moduleclass_sfx' ); ?>"> <?php echo $item->text; ?>
</div>
<?php if (isset($item->linkOn) && $item->readmore) : echo '<a href="/'.$item->linkOn.'">'.JText::_('Read more').'</a>'; endif; ?>
Dit nieuwe bestand zou geplaatst moeten worden in de template map in een map genaamd html als volgt:
templates/templatetutorial15bold/ html /mod_newsflash/_item.php
We hebben zojuist de tabellen uit de nieuwsflash module gehaald, zo makkelijk is dat!
Component Overrides
Componenten werken bijna op dezelfde manier, behalve dat er enkele views gekoppeld zijn met veel componenten.
Als we kijken in de com_content folder, zien we een map genaamd.
/components/com_content/views/
/components/com_content/views/archive
/components/com_content/views/article
/components/com_content/views/category
/components/com_content/views/section
Dus deze mappen zouden overeenkomen met de vier mogelijke views voor content: archief, artikel, categorie, and sectie.
Binnen een view, vinden we de tmpl map en daarin de andere mogelijke layouts.
Als we kijken in de category folder, zien we:
/components/com_content/views/category/blog.php
/components/com_content/views/category/blog_item.php
/components/com_content/views/category/blog_links.php
/components/com_content/views/category/default.php
/components/com_content/views/category/default_items.php
In het geval van com_content, de default.php lay-out is een verwijzing naar de standaard lay-out die de artikelen als een link lijst laat zien.
Het openen het blog_item.php bestand laat zien welke tabellen momenteel gebruikt worden. Als we de uitvoer willen overschrijven, plaatsen we wat we willen gebruiken in ons template/html/map, bijvoorbeeld:
templates/templatetutorial15bold/html/com_content/category/blog_item.php
Het is een relatief eenvoudig proces van kopiëren en plakken van al deze items uit de /componenten/ en /modules/ mappen in de templates/yourtemplate/html map.
De template override functionaliteit biedt een krachtig mechanisme om uw Joomla!-site te veranderen via het template. U kunt templates maken die zich richten op SEO, bereikbaarheid, of de specifieke behoeften van een klant.
Wat u tenminste moet weten
Joomla! 1.5 biedt nieuwe functies voor templates waarmee ontwerpers om volledige controle over de code en de presentatie van een Joomla! website.
Tableless Joomla!
De Joomla! download bevat ook een template genaamd Beez dat is een voorbeeld van de template ontwikkeld voor de template override in actie. Het Design and Accessibility team heeft een volledige set van voorbeeld overschrijft zoals vervat in de html-map. Ons laatste voorbeeld is een template dat gebruik maakt van deze bijsturingen voor alle tabellen van de uitvoer van Joomla!.
CSSTemplateTutorialStep4
We hebben nu een template dat is gebaseerd op een comp (of ontwerp). Meer visuele typografie is toegevoegd, maar nog belangrijker is, we hebben ons gericht op puur CSS lay-out voor het maken van een template die dynamisch opvouwbare kolommen en een slick tabbladen menu heeft. We hebben vervolgens gebruik gemaakt van Template override van Joomla!!, zodat er geen andere tabellen worden gebruikt. Ik heb een installeerbare template die beschikbaar is uit de Compass bibliotheek:
CSSTemplateTutorialStep4.zip
Mijn favoriete pagina's
Om gebruik te kunnen maken van de functie Favoriete pagina's dient u eerst in te loggenJoomla! algemeen
Joomla!™ 1.0.x
Log-in formulier
Joomla!™ 1.5.x
VirtueMart
Licentievoorwaarden
De helpbestanden zijn beschikbaar onder de Joomla! EDL licentie.
De overige documentatie is beschikbaar onder de Creative Commons Licentie, tenzij anders vermeld.




