Joomla Overrides – Einfacher Eventkalender

Am 12. und 13. September 2014 fand in Köln der JoomlaDay! Deutschland statt und ich war dabei!

Wenn ich mich nicht verzählt habe, gab es 51 Präsentationen.  4 Themen wurden immer parallel vorgetragen. Bei so einer Fülle an Informationen ist es schwierig zu entscheiden, was man sich anhören möchte. Ich habe mich vorallem für Vorträge über Joomla! Overrides entschieden.

Es ist faszinierend wie man mit simplen Tricks das Aussehen (und teilweise die Funktion) von Komponenten und Modulen verändern kann.

Eine Präsentation von David Jardin hat mich sehr inspiriert und ich wollte unbedingt ein paar seine Ideen auch in meinen Projekten umsetzen.

Die Gelegenheit bot sich an, als ich entschied unser Infoportal „Eltern wissen wo“ von Joomla 2.5 auf Joomla 3.3.6 zu aktualisieren.

Als erstes habe ich bemerkt, dass das neue Layout System von Joomla! noch nicht überall verwendet wird, z.B. gibt es ein Layout für den Info-Block am Anfang eines Artikels (Kategorie, Erstellungsdatum, Author, etc.), nur dieses Layout ist nicht überall als solches eingefügt.

Zum Beispiel blog_item.php hat das Layout drin:

<?php // Todo Not that elegant would be nice to group the params ?>
<?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date') || $params->get('show_create_date')
|| $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author') ); ?>
<?php if ($useDefList && ($info == 0 || $info == 2)) : ?>
<?php echo JLayoutHelper::render('joomla.content.info_block.block', array('item' => $this->item, 'params' => $params, 'position' => 'above')); ?>
<?php endif; ?>

Bei Beiträgen und Haupbeiträgen ist das leider nicht der Fall, da ist dieser Info-Block noch „hardcoded“ drin. Hier habe ich mir einfach die entsprechenden Overrides angelegt und den Info-Block als JLayout eingefügt.

Beim blog.php habe ich die Definitionen für Spalten („span-?“ in Bootstrap 2) auf Bootstrap 3 (col-md-…, usw.) angepasst.

Außerdem habe ich mir vom Layout des Info-Block an sich ein Override gemacht. Das Template, das ich entwickelt habe (mit Hilfe des BlankTemplates von Alexander Schmidt), verwendet Bootstrap 3, Joomla! aber hat noch Bootstrap 2. Also sind sie definitionen von Icons z.B. nicht passend.

Overrides vom Info-Block

block.php: Hier habe ich das „Details“ entfernt (wie man im Kommentar im Code sehen kann, wollen die Entwickler von Joomla dieser Titel auch als Parameter definieren, damit man entscheiden kann, ob man „Details“ anzeigen lassen möchte oder nicht)

<dt class="article-info-term">
<?php // TODO: implement info_block_show_title param to hide article info title ?>
<?php if ($displayData['params']->get('info_block_show_title', 1)) : ?>
<?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?>
<?php endif; ?>
</dt>

create_date.php: Hier habe das Kalender Icon auf Bootstrap 3 angepasst (dasselbe habe ich für modify_date.php und publish_date.php gemacht)

<dd class="create">
<span class="fa fa-calendar"></span>
<time datetime="<?php echo JHtml::_('date', $displayData['item']->created, 'c'); ?>" itemprop="dateCreated">
<?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $displayData['item']->created, JText::_('DATE_FORMAT_LC3'))); ?>
</time>
</dd>

hits.php:  Hier habe das Auge Icon auf Bootstrap 3 angepasst

<dd class="hits">
<span class="fa fa-eye"></span>
<meta itemprop="interactionCount" content="UserPageVisits:<?php echo $displayData['item']->hits; ?>" />
<?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $displayData['item']->hits); ?>
</dd>

Das Beste kommt zum Schluss – Eventkalender mit Override vom „mod_articles_latest“

Das habe ich mir von David Jardin abgeguckt und auf meine Bedürfnisse angepasst und zwar habe ich ein Override vom „mod_articles_latest“ angelegt und in events.php umbenannt (ich will ja nicht, dass jeder Modul vom Article Latest als Eventkalender fungiert).

Original Code (default.php):

<ul class="latestnews<?php echo $moduleclass_sfx; ?>">
<?php foreach ($list as $item) :  ?>
<li itemscope itemtype="http://schema.org/Article">
<a href="<?php echo $item->link; ?>" itemprop="url">
<span itemprop="name">
<?php echo $item->title; ?>
</span>
</a>
</li>
<?php endforeach; ?>
</ul>

Override (events.php): Ich habe die ul Liste in einer dl Liste umgewandelt und das Erstellungsdatum vom Artikel (kann man manuell als Datum des Events eintragen) eingefügt.

<dl class="latestnews<?php echo $moduleclass_sfx; ?>" itemscope itemtype="http://schema.org/Event">
<?php foreach ($list as $item) :  ?>
<dt itemprop="Date">
<span class="fa fa-calendar">&nbsp</span><?php echo JHtml::_('date', $item->created, "d.m.Y"); ?>
</dt>
<dd>
<a href="<?php echo $item->link; ?>" itemprop="url">
<span itemprop="name">
<?php echo $item->title; ?>
</span>
</a>
</dd>
<?php endforeach; ?>
</dl>

So kann man ganz normale Joomla Beiträge als Event anzeigen lassen. Beim Anlegen vom Modul „events“ als alternatives Layout wählen. Und so sieht das fertige Modul aus:

Screenshot_#759

Ich glaube, mit ein bisschen Fantasie kann man viel verändern ohne Joomla! mit Komponenten und Modulen von Drittanbietern zu überladen.

Ein anderer Vortrangende, Sven Schultschick, hat bereits ein Repository in github angelegt, um Joomla! Overrides zu teilen. Hier werde ich demnächst meine eigene Overrides hoffentlich zur Verfügung stellen können. Bis dahin, stelle ich hier die, in diesem Beitrag vorgestellten Overrides, zum Download bereit.

Auf jedem Fall empfehle ich sich die Vorträge des JoomlaDays bei YouTube anzuschauen!

Overrides zum Download

Info-Block Layout

 

Content

 

Modul

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *