Screenshot Kontakt mit falscher ReihenfolgeJoomla verfügt über eine sehr gute Komponente, um einen oder mehrere Kontakte darzustellen und dafür E-Mail-Formulare anzubieten. Werden die Kontakte unübersichtlich, lassen sie sich sogar in Kategorien einteilen. Allerdings haben die Kontakte für deutsche Nutzer einen erheblichen Schönheitsfehler: die Postleitzahl folgt erst nach der Stadt, leider zusätzlich getrennt durch einen Zeilenumbruch.

Das Problem lässt sich glücklicherweise durch die sogenannten "Template Overrides" lösen. Mit Template Overrides lässt sich in Joomla ab der Version 1.5 die HTML-Ausgabe der Core-Module überschreiben. Ohne Template Overrides müsste man die Komponente Kontakte direkt anpassen, ein sogenannter "core hack". Diese Änderungen würden allerdings bei jedem Update verloren gehen und müssten jedesmal erneut eingepflegt werden.

Um die Ausgabe zu überschreiben, muss man zuerst feststellen, welche Datei der Komponente die HTML-Ausgabe generiert. In unserem Fall handelt es sich um die Datei default_address.php im Ordner /components/com_contact/views/contact/tmpl. In Zeile 36 bis 56 ist die Ausgabe in falscher Reihenfolge für deutsche Nutzer enthalten:

<?php if ($this->contact->suburb && $this->params->get('show_suburb')) : ?>
    <dd>
        <span class="contact-suburb">
            <?php echo $this->contact->suburb .'<br/>'?>
        </span>
    </dd>
<?php endif; ?>
<?php 
if ($this->contact->state && $this->params->get('show_state')) : ?>
    <dd>
        <span class="contact-state">
            <?php echo $this->contact->state '<br/>'?>
        </span>
    </dd>
<?php endif; ?>
<?php 
if ($this->contact->postcode && $this->params->get('show_postcode')) : ?>
    <dd>
        <span class="contact-postcode">
            <?php echo $this->contact->postcode .'<br/>'?>
        </span>
    </dd>
<?php endif; ?>

 

Die Variable $this->contact->suburb enthält die Stadt, die Variable $this->contact->state enthält das Bundesland und schließlich enthält die Variable $this->contact->postcode die Postfach/Postleitzahl. Die Ausgabe entspricht dem englischen Adressformat, für Deutschland ist die Reihenfolge falsch.

Um dieses Template zu überschreiben, muss eine Kopie der Datei default_address.php unter templates/[Template_Name]/html/com_contact/contact angelegt werden. Der Name des Templates muss an das eigene Template angepasst werden, z.B. in templates/protostar/html/com_contact/contact.

Wie man im Vergleich zu oben sehen kann, wird der Pfad gegenüber der Ordnerstruktur der Komponente verkürzt. Der Ordner views entfällt, da Template Overrides ohnehin nur Views überschreiben können. Der Unterordner tmpl unter contact entfällt ebenso, was zu einer vereinfachten Ordnerstruktur führt. Ausführlich wird dieser Vorgang in der Joomla Online Doku erläutert: "How to override the output from the Joomla! core".

Um eine sinnvolle Ausgabe zu erhalten habe ich die Reihenfloge der Ausgabe geändert und einen Zeilenumbruch entfernt. Da die Daten in einer Definitionsliste (<dd>) ausgegeben wird, einem Block Element, muss bei der gemeinsamen Ausgabe von Stadt und Postleitzahl das Schließen und Öffnen eines <dd> Blocks unterdrückt werden. Die Stadt und die Postleitzahl befinden sich dann in einem gemeinsamen <dd> Element und es erfolgt kein Zeilenumbruch:

<?php if ($this->contact->postcode && $this->params->get('show_postcode')) : ?>
    <dd>
        <span class="contact-postcode">
            <?php echo $this->contact->postcode?>
        </span>
    <?php if (!($this->contact->suburb && $this->params->get('show_suburb'))) : ?>
    </dd>
    <?php endif ?>
<?php 
endif; ?>
<?php 
if ($this->contact->suburb && $this->params->get('show_suburb')) : ?>
    <?php if (!($this->contact->postcode && $this->params->get('show_postcode'))) : ?>
    <dd>
    <?php endif; ?>
        <span class="contact-suburb">
            <?php echo $this->contact->suburb .'<br/>'?>
        </span>
    </dd>
<?php endif; ?>

Screenshot Kontakt mit richtiger Reihenfolge

Durch das neue Template werden die Postleitzahl und die Stadt in der richtigen Reihenfolge ausgegeben. Durch die zusätzlichen if-Blöcke wird dafür gesorgt, dass die Ausgabe auch dann korrekt angezeigt wird, wenn nur die Postleitzahl oder die Stadt vorhanden ist. Da nur das Template ergänzt wird, bleibt die Änderung bei zukünftigen Upadtes erhalten.

Die vollständige Templatedatei können Sie hier als zip-Datei herunterladen: Template_Override_contact_default_address_Deutsch.zip