Archiv der Kategorie: Module (Joomla)

Nachtrag: Rezepthitparade als Joomla-Modul

Ich bin gefragt worden, ob ich die Erstellung eines Moduls für die Rezepthitparade in Joomla noch einmal exemplarisch darstellen könnte – OK, machen wir, es ist wirklich nicht sehr kompliziert. Zuerst möchte ich euch aber diesen Artikel zur Erstellung eines einfachen Hallo-Welt-Moduls ans Herz legen, das nehmen wir nämlich als Ausgangsbasis.

Die Anforderung

Das Modul soll die X beliebtesten Beiträge ausgeben, wobei X eine vom Benutzer eingebbare Zahl ist. Die Daten holen wir aus der #__content, da steht ja die Anzahl der Hits praktischerweise drin. Ein weiteres Kriterium ist state=1, da wir nur die veröffentlichten Beiträge ausgeben wollen. (Man könnte auch noch eine Auswahl der Kategorie einbauen, aber das lass ich jetzt mal)

Die Anpassung der XML-Datei

Für das Eingabefeld brauchen wir ein Fieldset, das sieht so aus:

...

    <config>
    <fields name="params">
        <fieldset name="basic">
            <field name="param1" type="number" default="" label="Bitte Anzahl eingeben" description="Anzahl der auszugebenden Beiträge"></field>
            
        </fieldset>
    </fields>
    </config>
</extension>

Wichtig ist hier der Name des fields-Tags (params) und der Name unseres einzelnen Feldes (param1), damit holen wir uns die Benutzereingabe ab. Das passiert in der mod_[modulname].php und sieht so aus:

...
// No direct access
defined('_JEXEC') or die;
// Include the syndicate functions only once
require_once dirname(__FILE__) . '/helper.php';

//Anzahl aus dem Fieldset abholen
$data = $params->get('param1');
        
$hello = modHelloWorldHelper::getHello($data);
require JModuleHelper::getLayoutPath('mod_helloworld');

In der helper.php können wir die in der übergebenen Variable $data steckende Anzahl dann direkt weiterverarbeiten, erstmal nur eine Testausgabe:

class ModHelloWorldHelper
{
    /**
     * Retrieves the hello message
     *
     * @param   variable  $params containing the module parameter
     *
     * @access public
          */    
    public static function getHello($params)
    {
        
              
        echo "<h2>Die ".$params." beliebtesten Beiträge</h2>";
       
}

Jetzt packen wir noch die SQL-Abfrage rein und füttern sie mit der übergebenen Anzahl als Limit:

public static function getHello($params)
    {
        
        $db = JFactory::getDBO();
        $query = "SELECT * FROM #__content where state = 1 
                  order by hits desc limit ".$params."";
        $db->setQuery($query);
        $results = $db->loadObjectList();
        
        echo "<h2>Die ".$params." beliebtesten Beiträge</h2>";
        echo "<ul>";

            foreach ($results as $rec){

                $url = JRoute::_('index.php?option=com_content&view=article&id='.
                $rec->id);
                echo "<li><a href = '".$url."'>".$rec->title." (".$rec->hits.")</a></li>";

            }
        echo "</ul>";
        
    }

Und das war auch schon alles! Der Benutzer kriegt bei der Modulerstellung ein Eingabefeld für die Anzahl:

modul_eingabe

modul_eingabe

… und die z.B. 5 beliebtesten Beiträge werden als Liste mit Links ausgegeben:

5beliebteste

5beliebteste

That’s all, mehr ist nicht dran.

Ihre Meinung interessiert mich!

Wie hat Ihnen dieser Artikel gefallen?

sehr gutgutbefriedigendausreichendmangelhaftungenügend

Der Rezeptecounter bei Joomla: fast alles schon da

Joomla hat schon einen eingebauten Hit-Counter, der per default bei jedem Beitrag angezeigt wird. Und es gibt ein konfigurierbares Modul Beiträge-beliebte, das einem die Beiträge mit den meisten Hits anzeigt, die Anzahl der angezeigten Beiträge und die Kategorien kann man einstellen. Was ich allerdings bislang nicht gefunden habe: eine Möglichkeit, auch die Anzahl der Hits zu jedem Beitrag auszugeben. Dabei bunkert Joomla die Hits zu jedem Beitrag in der Tabelle #__content, es wäre also ein leichtes, die mit auszugeben.

Ich hab mir dafür eine Mini-Lösung mit dem Sourcerer gebastelt, eine eigene Modul-Lösung ist mir für das bisschen Code zuviel Aufwand. Eigentlich braucht es dazu nur die ensprechend formulierte SQL-Query. Ich setze mal den Where auf die Kategorie Rezepte, die anderen interessieren mich eigentlich nicht.

$db = JFactory::getDBO();
$query = "SELECT * FROM #__content where catid = 8 and state = 1 order by hits desc limit 10";
$db->setQuery($query);
$results = $db->loadObjectList();

echo "<ul>";

foreach ($results as $rec){

echo "<li>".$rec->title." (".$rec->hits.")</li>";

}
echo "</ul>";

Das wars schon! Bittesehr, die Top Ten Rezepte mit Anzahl der Hits, (inclusive aller Tippfehler und Testbeiträge in der Testumgebung):

top_ten

top_ten

Nachtrag: die Links zu den Rezepten

Die wollen wir natürlich auch noch haben. Da ich in Joomla leider kein Äquivalent zu get_the_permalink() gefunden habe, gehts anders, da kommt JROUTE ins Spiel, das wird mit der ID des Artikels bedient. Ich leg mir die URL auf eine Variable, damits nicht so unübersichtlich wird. Die Ausgabe innerhalb des Foreach sieht dann so aus:

$url = JRoute::_('index.php?option=com_content&view=article&id='.$rec->id);
echo "<li><a href = '".$url."'>".$rec->title." (".$rec->hits.")</a></li>";

Damit erzeugen wir die Links zu den Rezepten, und das ist jetzt hübsch genug, dabei lass ich es.

Ihre Meinung interessiert mich!

Wie hat Ihnen dieser Artikel gefallen?

sehr gutgutbefriedigendausreichendmangelhaftungenügend

Gehts auch in Joomla? Bewertungsformular mit Ajax

Was in WordPress und Drupal so reibungslos geklappt hat, sollte doch euch in Joomla zu realisieren sein: ein kleines Bewertungsformular mit Notenvergabe am Ende jedes Artikels, das sich beim Abschicken einer neuen Benotung automatisch aktualisiert. Aussehen soll das Ganze in etwa so:

bewertungformular1

bewertungformular1

Wie kriegt man so etwas ans Ende jedes Artikels?

Mit einem Override, und der ist in Joomla 3 nicht weiter schwierig zu erstellen. Man geht zu Erweiterungen/Templates/Templates und klickt beim aktiven Template auf Details und Dateien, dann auf den Reiter Overrides erstellen. Unter Komponenten/com_content article anklicken, dann sollte eine solche Nachricht erscheinen:

Nachricht

Es wurde ein Override erstellt in \templates\protostar\html\com_content\article
Ein neuer Override wurde erstellt.

Man kann den Override jetzt direkt im eingebauten Editor bearbeiten, ich nehme lieber den Notepad++. Um die richtige Position für das Formular zu ermitteln, sucht man nach folgender Div und klemmt danach einen Platzhalter rein:

<div itemprop="articleBody">
 <?php echo $this->item->text; ?>
 </div>
<h1>Hier kommt das Formular hin</h1>

Dann sollte in jedem Artikel so etwas auftauchen:

override_formularposition

override_formularposition

OK, die richtige Position hätten wir jetzt. Aber was genau soll da hin? Das einzig senkrechte wäre natürlich ein eigenes Modul, das die gesamte Logik für die Benotung enthält, und dafür müssen wir ein bisschen ausholen.

Wie man ein einfaches Joomla-Modul erstellt

habe ich in diesem Artikel ausführlich beschrieben, da halten wir uns mal dran und basteln ein eigenes Modul mit Namen mod_el_bewertung. Das soll erstmal nichts machen ausser einen Platzhaltertext ausgeben, dafür sieht die helper.php anfangs so aus:

<?php
/**
 * Helper class for EL Bewertung! module
 * 
 * @package Joomla.Tutorials
 * @subpackage Modules
 * @link http://docs.joomla.org/J3.x:Creating_a_simple_module/Developing_a_Basic_Module
 * @license GNU/GPL, see LICENSE.php
 * mod_helloworld is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 */
class ModHelloWorldHelper
{
 /**

 * Retrieves the hello message
 *
 * @param array $params An object containing the module parameters
 *
 * @access public
 */ 
 public static function getHello($params)
 {
 return 'Hier soll das Formular hin!';
 
 }

Wenn alles geklappt hat, kann man das neue Modul jetzt aktivieren. Dazu unter Erweiterungen/Verwalten/überprüfen das richtige Modul suchen und installieren, dann unter Erweiterungen/Module/neu den eigenen Modultyp anwählen und einen Titel vergeben.

Modul im Override platzieren

 Dafür fügt man im Override der default.php folgende Zeile ein:

<?php echo JHtml::_('content.prepare', '{loadposition bewertungsformular}'); ?>

Nochmal zurück ins neuerstellte Modul, bei Modulposition bewertungsformular eingeben, Schreibweise beachten! Jetzt sollte die Modulüberschrift und der Platzhaltertext am Ende jedes Artikels auftauchen:

platzhalter

platzhalter

So, das waren mal die Vorarbeiten. Jetzt gehts zur Sache.

Der Code für das Formular

kommt in die helper.php in die public static function getHello() (ich war hier bloß zu faul um die Funktions- und Klassenbezeichnungen anzupassen). Wichtig ist am Anfang, dass wir uns die ID des aktuellen Beitrags holen und in die Div mit der ID ‚beitragsid‘ packen.

public static function getHello($params)
 {
 //ID des aktuellen Artikels bestimmen';
 $id = JRequest::getVar('id');
 echo 'ID dieses Beitrags: <span id = "beitragsid">'.$id.'</span>';
 
 echo '<div style="border:1px dotted #000; text-align:center; padding:10px;">';
 echo '<h4>Dir gefällt dieser Beitrag?</h4>';
 echo '<p>Dann bewerte ihn!</p>';
 echo '</div>';
 
 echo " <form action = '' method='post'>";
 
 echo "<fieldset>
 <div id = 'noten' class = 'noten' style = 'border:2px solid blue; padding :4px;'>
 <input type='radio' name='note' value='1'>sehr gut
 <input type='radio' name='note' value='2'>gut
 <input type='radio' name='note' value='3'>befriedigend<br>
 <input type='radio' name='note' value='4'>ausreichend
 <input type='radio' name='note' value='5'>mangelhaft
 <input type='radio' name='note' value='6'>ungenügend
 
 <input type ='button' name = 'absenden' class = 'bew-button' value = 'abschicken' onclick='el_bew_ajax()'/>
 
 </div>
 </fieldset>";
 echo "</form>";
 
 
 }

Das Javascript für den onclick-Aufruf packen wir der Einfachheit halber an den Anfang der  helper.php in Script-Tags, dazu gleich mehr. Jetzt brauchen wir erst noch die Tabelle für die Bewertungen, die sieht genauso aus wie in WordPress oder Drupal und hat genau drei Felder:

bewertungentabelle

bewertungentabelle

id ist Autowert, beitragsid und note schreiben wir dann gleich rein. Jetzt lesen wir erst einmal die schon vorhandenen Benotungen aus.

Bereits vorhandene Anzahl Bewertungen und Durchschnitt ermitteln

Dabei kommt uns JDatabase zu Hilfe, das geht so:

//Bereits vorhandene Benotungen abholen
 $db = JFactory::getDBO();
 $query = "SELECT * FROM bewertungen where beitragsid = ".$id."";
 $db->setQuery($query);
 $result = $db->execute();
 $anzahl = $db->getNumRows();
 //echo $anzahl." Bewertungen gefunden";
 
 $results = $db->loadObjectList();
 $durchschnitt = 0;
 foreach ($results as $zeile) :
 $durchschnitt = $durchschnitt+ intval($zeile->note);
 endforeach;
 
 if ($anzahl != 0){ 
 $durchschnitt = $durchschnitt / $anzahl;
 }
 echo "<span id = 'ausgabe'>".$anzahl." Bewertungen gefunden, Durchschnitt: ".$durchschnitt."<span>";

Wichtig ist hier, dass man sich mit dem $db->loadObjectList(); die Ergebnisliste der SQL-Abfrage holt, über die kann man dann mit dem Foreach iterieren. So, aber jetzt endlich:

Das Javascript

Das kann man nahezu unverändert aus der WordPress-Lösung übernehmen, man stellt es einfach an den Anfang der helper.php, zunächst mal nur mit Debug-Ausgabe von Beitragsid und Note:

<script>
 function el_bew_ajax(){
 
 
 //Beitragsid aus span holen
 var akt_id = document.getElementById("beitragsid").innerHTML;
 
 //Note aus den Radiobuttons holen
 var akt_note = jQuery("input:radio[name=note]:checked").val();
 
 Debug-Ausgabe
 alert(akt_note + ' ' + akt_id);
 
 //Check ob keine Note angewählt, Abbruch
 if (typeof akt_note === 'undefined'){
 alert('Bitte eine Note wählen!');
 return;}
 
 //***********************Hier kommt der ajax-call hin
 
</script>

Die Callback-Funktion

Für den Ajax brauchen wir natürlich erstmal die Callback-Funktion, die stecken wir in eine separate PHP-Datei.

<?php

$id = '';
if ( isset($_GET['id']) )
{
  $id = $_GET['id'];
}
$note = '';
if ( isset($_GET['note']) )
{
  $note = $_GET['note'];
}

$pdo = new PDO('mysql:host=localhost;dbname=joomla', '*****', '*******');

//neue Note erstmal einfügen
$sql = "INSERT INTO bewertungen (beitragsid, note) VALUES (".$id.",".$note.")";
$neu = $pdo->query($sql);

//Suche nach aktueller id
$sql = "SELECT * FROM bewertungen where beitragsid = ".$id."";
$records = $pdo->query($sql);
$gefunden = $records->rowcount();

$durchschnitt = 0;
foreach ($records as $row) {
        
        $durchschnitt = $durchschnitt + $row['note'];
    }
if ($gefunden != 0){        
    $durchschnitt = $durchschnitt / $gefunden;
    }
echo $gefunden." Bewertungen vorhanden, Durchschnittsnote = ".$durchschnitt;

?>

Das ist genau das selbe straighte PHP, das ich auch in der Drupal-Lösung schon verwendet habe, man muss nur die Login-Informationen im PDO anpassen. Jetzt fehlt nur noch:

Das Script mit dem Ajax-Call

Ich hab mir dafür noch den Pfad zum Modulverzeichnis in eine versteckte Span geschrieben, das passiert in der helper.php vor dem Formular:

//Pfad zum Modulverzeichnis abholen
        $pfad = JURI::base().'modules/'.'mod_el_bewertung/';
        echo '<span id = "pfad" style = "display:none;">'.$pfad.'</span>';

Dann kann unser Script marschieren:

<script>
 function el_bew_ajax(){
            
            //Pfad zum Modulverzeichnis abholen
            var modulpfad = document.getElementById("pfad").innerHTML;
            
            //Beitragsid holen
            var akt_id = document.getElementById("beitragsid").innerHTML;
                        
            //Note aus den Radiobuttons holen
            var akt_note = jQuery("input:radio[name=note]:checked").val();
            
            //Debug-Ausgabe
            //alert(akt_note + ' ' + akt_id);
                        
            //Check ob keine Note angewählt, Abbruch
            if (typeof akt_note === 'undefined'){
            alert('Bitte eine Note wählen!');
            return;}
            
            //***********************ajax-call
            if (window.XMLHttpRequest)
             {
              // AJAX nutzen mit IE7+, Chrome, Firefox, Safari, Opera
              xmlhttp=new XMLHttpRequest();
             }
             else
             {
              // AJAX mit IE6, IE5
              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
             }
             xmlhttp.onreadystatechange=function()
             {
              if (xmlhttp.readyState==4 && xmlhttp.status==200)
              {
               document.getElementById("ausgabe").innerHTML = xmlhttp.responseText;
               //alert(xmlhttp.responseText);
              }
             }
             xmlhttp.open("GET",""+modulpfad+"callback_ajax_el.php?id="+akt_id+"&note="+akt_note,true);
             
             xmlhttp.send();
            
            
            
            //**********************end ajax call
}//end function el_bew_ajax

</script>

Fertig! Der Call ist scharfgeschaltet, beim abschicken einer neuen Bewertung aktualisiert sich die Anzeige.

anzeige

anzeige

Fazit

In Joomla eine einfaches Modul zu erstellen ist erstmal gewöhnungsbedürftig, aber wenn man die Logik einmal überrissen hat, kann man viel damit machen. Was mir nicht besonders gefällt, ist dass ich noch keine einfache Möglichkeit gefunden habe, einen Override nur für eine bestimmte Kategorie anzulegen, ich hätte zum Beispiel das Bewertungsformular gerne nur in der Kategorie ‚Rezepte‘. Ich hab mir da schonmal damit beholfen, in die Override-Datei eine Datenbankabfrage einzubauen, die zur aktuellen Beitragsid die Kategorie abholt, die ging so:

<?php
    $db=JFactory::getDbo();
    $article_id = JFactory::getApplication()->input->get(‚id‘);
    echo „aktuelle Artikelid= „.$article_id;
    
    $db->setQuery(’select catid from #__content where id= ‚.$article_id.“);
    $catid=$db->loadResult();
    echo „aktuelle catid= „.$catid;
    
    if ($catid == 8){
        echo JHtml::_(‚content.prepare‘, ‚{loadposition bewertungsformular}‘);
    }
    else {
        echo „Dies ist kein Rezept, Kategorie: „.$catid;
        }
    ?>

Aber das ist meiner Ansicht nach eine ziemliche Krücke. Ich muss mal ein bisschen forschen, ob das nicht eleganter geht.

Ihre Meinung interessiert mich!

Wie hat Ihnen dieser Artikel gefallen?

sehr gutgutbefriedigendausreichendmangelhaftungenügend

Joomla Modul mit SQL-Formfield

Da ich keinen vorgefertigten Formularfeldtyp gefunden habe, der mir die Tags (Schlagwörter) ausgibt, hab ichs mal über den Typ SQL form field type probiert, mal sehen wie weit wir damit kommen. Aber erst noch mal ein paar Gedanken zu den Anforderungen:

Ich schraubs mal ein bisschen runter

Im vorigen Artikel hatte ich ja für den Anwender die Möglichkeit geschaffen, eine bestimmte Beitragskategorie auszuwählen. Das hat ganz hübsch funktioniert, aber eigentlich ist es für meinen Zweck nicht ganz das Richtige. Ich brauche ja auch noch mein zweites Auswahlkriterium, nämlich die Tags=Schlagwörter. Kurze Erinnerung, was ausgegeben werden soll:

X Rezepte insgesamt

davon Y mit dem Tag Z

Ich habe aber in meinem Joomla-Kochbuch die Einschränkung gemacht, dass Tags nur für die Kategeorie Rezepte verwendet werden, in den anderen Kategorien (Kochbücher etc.) hab ich sie schlicht und ergreifend nicht eingesetzt. Das heisst aber, unsere Tagauswahl macht nur Sinn, wenn die Beitragskategorie 8 für Rezept ist, und dann kann ich es auch gleich fest verdrahten. Sonst dürfte ich die Tag-Auswahl nur anzeigen, wenn der Anwender die Kategorie Rezepte gewählt hat, und das geht mir dann doch ein bisschen zu weit.

Der Formularfeldtyp SQL

Ist wahrscheinlich am leichtesten zu verstehen, wenn man es am konkreten Beispiel sieht. Die Felddefinition in meiner XML-Datei sieht so aus:

<field
            name="title"
            type="sql"
            default="10"
            label="Einen Tag auswählen"
            query="SELECT id AS value, title FROM #__tags where title not like 'ROOT'"
            />

Dabei ist der Alias „AS value“ wichtig, da über diesen der Rückgabewert des Feldes definiert wird. Den Select hab ich gleich ein bisschen angepasst, wir gehen in die tabelle #_tags und schliessen hier den Systemeintrag ROOT aus, weil der in der Auswahlliste gar nicht auftauchen darf.

Zum Aufbau der Query zitiere ich mal die Joomla-Doku:

  • query (mandatory if not using the sql_* attributes) is the SQL query which will provide the data for the drop-down list. The query must return two columns; one called ‚value‘ (unless overridden by the key_field attribute) which will hold the values of the list items; the other called the same as the value of the name attribute (unless overridden by the value_field attribute) containing the text to be shown in the drop-down list.

Also, mal ganz langsam.

  • die query liefert die Daten für unser Dropdown-Feld
  • die query muss zwei Spalten zurückgeben
  • die erste Spalte der Rückgabe muss value heissen, das passiert hier mit dem Alias, und liefert die Rückgabewerte für das Formularfeld (in unserem Fall die numerische ID des Tags)
  • die zweite Spalte muss genauso heissen wie das Feld in der XML-Datei, ich bin hier bei title geblieben. Die zweite Spalte liefert die Einträge für das Dropdown-Feld.

Alles klar? Jedenfalls funktionierts, und mein Dropdownfeld sieht schon mal ganz gut aus:

dropdown_tags

dropdown_tags

Den Wert, den der Benutzer ausgewählt hat, holen wir uns in der mod_helloworld.php wie gehabt über den Namen des Feldes:

$titel = $params->get('title');

Wir erweitern unser Standardobjekt für die Parameterübergabe an die Helper-Klasse entsprechend:

$data = new stdClass();
//Objekt füllen
$data->kat = $kat;
$data->variable = $variable;
$data->titel = $titel;

Und können jetzt in der helper.php damit weiterarbeiten, da haben wir jetzt die numerische ID des gewählten Tags auf der Variablen $params->titel.

Jetzt müssen wir nur noch zählen, wieviele Rezepte dem gewählten Tag zugeordnet sind, und dafür brauchen wir die Tabelle #__content_item_tag_map, da schauen wir einfach nach, wie oft die aktuelle Tag-ID auftaucht.

//Anzahl der Tags zur TagID holen
        $db = JFactory::getDbo();
        $db->setQuery("SELECT * FROM #__contentitem_tag_map WHERE tag_id = ".$params->titel.""); 
        $db->execute();
        $my_count = $db->getNumRows();
        echo $my_count;

Schlußendlich fehlt uns noch der Name des Tags für die Ausgabe, den holen wir uns mit der ID aus der Tabelle #__tags:

//Name des Tags zur Tag-ID holen
        $db = JFactory::getDBO();
        $db->setQuery("SELECT title FROM #__tags WHERE id=".$params->titel);
        $db->execute();
        $tagName = $db->loadResult();

Das wars, fehlt nur noch die Ausgabe:

echo $my_count." davon zum Thema ".$tagName;

 Bingo, das hat hingehauen! Meine Ausgabe sieht so aus:

tag_kat_ausgabe

tag_kat_ausgabe

Passt einwandfrei. Man könnte es jetzt noch perfektionieren und einen Join auf die #__content über die Kategorie-ID einbauen, damit man nur die Tags angezeigt bekommt, die auch zu Rezepten zugeordnet sind, aber ich wills mal nicht übertreiben. Die Vorgabe war ja, dass Tags nur in der Kategorie Rezepte verwendet werden, das muss reichen.

Fazit

Ich finde, die Formularfelddefinition ist über die XML-Datei übersichtlich und komfortabel gelöst, und die vordefinierten Formularfeldtypen nehmen einem in vielen Fällen einen Haufen Arbeit ab. Das macht es wieder wett, dass die Modulerstellung am Anfang ein bisschen schwer zu durchblicken ist, aber wenn man einmal ein Basic Modul geschrieben hat, geht auch das leicht von der Hand. Modulbasteln in Joomla macht Spaß!

Ihre Meinung interessiert mich!

Wie hat Ihnen dieser Artikel gefallen?

sehr gutgutbefriedigendausreichendmangelhaftungenügend

Joomla-Modul ein bisschen aufgebohrt – mit Benutzereingaben

Ich hab ja in diesem Artikel ein WordPress-Widget erstellt, das die Gesamtzahl der veröffentlichten Rezepte sowie die Anzahl der Rezepte einer frei wählbaren Kategorie anzeigt. So nach dem Muster:

312 Rezepte insgesamt

46 davon Vegetarisch

Ob das mit unserem Joomla-Modul auch hinzukriegen ist?

Anzahl der Beiträge der Kategorie Rezepte

Meine Rezeptkategorie hat die ID 8, das kann man in der Tabelle #__categories nachschauen. Dazu hab ich folgendes Code Snippet gefunden:

$model = JModelLegacy::getInstance('Articles', 'ContentModel');
        $model->setState('filter.category_id', 8); // Set category ID here
        $articles = $model->getItems();

        $num_articles = count($articles); // Returns the number of articles in category

Kommt mir ein bisschen arg umständlich vor, aber wenns funktioniert…

Ich möchte jetzt aber natürlich auswählen können, zu welcher Kategorie die Gesamtzahl der Beiträge ausgegeben werden soll, weil ich in Joomla so schöne Möglichkeiten habe, über die Kategorisierung meine Ausgabe auf der Webseite zu strukturieren. Das heißt aber, wir brauchen ein Eingabefeld (Dropdown), in dem der Benutzer anwählen kann, welche Kategorie ausgegeben werden soll.

Eingabefelder für eigene Module in Joomla

Sind nicht arg schwer zu realisieren, die Joomla-Doku zu dem Thema ist schon mal recht gut, schaut mal hier rein:

https://docs.joomla.org/J3.x:Creating_a_simple_module/Adding_Form_Fields

Ich machs aber hier nochmal step by step, damit man es auch nachvollziehen kann. Wir setzen auf unser Hallo-Welt Modul aus dem vorigen Beitrag auf und erweitern die mod_helloworld.xml, in der kann man ein einfaches Texteingabefeld so erstellen:

 <config>
    <fields name="params">
        <fieldset name="basic">
            <field name="param1" type="text" default="" label="Bitte Titel eingeben" description=""></field>
           </fieldset>
    </fields>
    </config>

Die Felddefinition muss innerhalb der config-Tags stehen. Wenn man sich jetzt mal das Modul aschaut, müsste das Feld eigentlich schon da sein:

texteingabefeld

texteingabefeld

Wie kommt man jetzt an den Inhalt des Feldes ran, den unser Benutzer eiingegeben hat? Das passiert in der mod_helloworld.php, und zwar so:

$variable = $params->get('param1');

Die $variable kann man jetzt an die helper-Klasse übergeben:

$hello = modHelloWorldHelper::getHello($variable);

Und da kann man dann damit weiterarbeiten. Bevor ich da noch weiter darauf eingehe, erstmal:

Die Anforderungen

Den Titel des Moduls kann der Anwender beim Erstellen unter Erweiterungen->Module->neu->Mein Hallo-Welt Modul selber eingeben, den fragen wir nicht nochmal extra ab. Dafür brauchen wir aber ein Dropdown-Feld, in dem die Kategorie (z.B. „Rezepte“) ausgewählt werden kann, für die die Gesamtzahl der Beiträge ausgegeben soll. Und wir brauchen noch ein zweites Dropdownfeld für das „featured tag“ (z.B. „Vegetarisch“, aber dazu kommen wir später. Jetzt werfen wir erstmal einen Blick auf:

Die vordefinierten Form Field Types

Da bietet Joomla etwas wirklich praktisches an, es gibt eine ganz Latte von vordefinierten Formularfeldern, hier die Doku dazu: https://docs.joomla.org/Standard_form_field_types

Da klemmen wir uns gleich mal den Formularfeldtyp „Kategorie„, der macht nämlich genau das was wir brauchen. In der XML-Datei sieht das so aus:

<field name="mycategory" type="category" extension="com_content" label="Eine Kategorie auswählen" description="" />

In der mod_helloworld.php holen wir uns den Inhalt mit:

$kat = $params->get('mycategory');

Und im Modul-Backend kriegen wir unsere Dropdown-Liste mit den Kategorien:

dropdown_kategorien

dropdown_kategorien

In der übergebenen Variablen steckt übrigens die numerische ID der Kategorie Rezepte, die können wir gleich direkt weiterverwerten, und zwar in der helper.php:

public static function getHello($params)
    {
        $model = JModelLegacy::getInstance('Articles', 'ContentModel');
        $model->setState('filter.category_id', $params); // Set category ID here
        $articles = $model->getItems();

        $num_articles = count($articles); // Returns the number of articles in category
        
        echo "Insgesamt ".$num_articles." Rezepte<br>";    
        
        
        
    }

Voraussetzung dafür ist natürlich, dass wir sie in der mod_helloworld.php auch als Parameter an die Helper-Klasse übergeben haben, aber dazu gleich mehr, zuerst schauen wir uns mal die Ausgabe an:

insgesamt_rezepte

insgesamt_rezepte

Das paßt soweit, jetzt müssen wir nur noch den Ausgabetext dynamisch anpassen, es kann ja auch jemand die Kategorie „Kochbücher“ angewählt haben, dann darf da nicht „Rezepte“ stehen. Das machen wir so:

//Name der Kategorie zur ID holen
        $db = JFactory::getDbo();
        $db->setQuery("SELECT cat.title FROM #__categories cat WHERE cat.id='".$params->kat."'"); 
        $category_title = $db->loadResult();
        
        echo "Insgesamt ".$num_articles." ".$category_title."<br>";

Nicht dran stören dass hier „.$params->kat.“ steht, das kommt daher, dass ich ein Array von Parametern übergeben habe, mehr dazu gleich. Jedenfalls wird jetzt auch der richtige Kategoriename angezeigt:

2kochbuecher

2kochbuecher

Mehr als ein Formularfeld, mehrere Parameter zum Übergeben

Wir brauchen aber noch ein zweites Formularfeld für die Tags, und dazu werfen wir einen kurzen Blick darauf, wie wir mehr als eine Variable an die Helper-Klasse übergeben können. Kurze Erinnerung, wie die zwei Felddefinitionen in der XML-Datei aussehen:

<fields name="params">
        <fieldset name="basic">
            <field name="param1" type="text" default="" label="Bitte Text eingeben" description=""></field>
            
                
            <field name="mycategory" type="category" extension="com_content" label="Eine Kategorie auswählen" description="" />
            
           </fieldset>
    </fields>

Die Inhalte der Felder holen wir uns in der mod_helloworld.php über die Feldnamen:

$kat = $params->get('mycategory');
$variable = $params->get('param1');

Dann packen wir sie in ein Standardobjekt und übergeben dieses an die Helper-Klasse:

$data = new stdClass();
//Objekt füllen
$data->kat = $kat;
$data->variable = $variable;

        
$hello = modHelloWorldHelper::getHello($data);

In der helper.php holen wir uns die übergebenen Variablen, die ja in unserem Objekt stecken, mit ihrem Namen, also z.B. $params->kat. Das $params stammt aus der Funktionsdefinition der public static function getHello($params)) wer da etwas anderes stehen hat, muss das entsprechend anpassen. Hier nochmal die komplette function:

public static function getHello($params)
    {
        //Anzahl der Artikel zur übergebenen Kategorie-ID holen
        $model = JModelLegacy::getInstance('Articles', 'ContentModel');
        $model->setState('filter.category_id', $params->kat); // Set category ID here
        $articles = $model->getItems();

        $num_articles = count($articles); // Returns the number of articles in category
        
        //Name der Kategorie zur ID holen
        $db = JFactory::getDbo();
        $db->setQuery("SELECT cat.title FROM #__categories cat WHERE cat.id='".$params->kat."'"); 
        $category_title = $db->loadResult();
            
        echo "Insgesamt ".$num_articles." ".$category_title."<br>";
        
        
    }

Das sieht jetzt schon ziemlich gut aus. Leider habe ich für die Tags keinen vordefinierten Formularfeldtyp gefunden, da müssen wir was basteln, aber dazu gibt es einen neuen Beitrag.

Ihre Meinung interessiert mich!

Wie hat Ihnen dieser Artikel gefallen?

sehr gutgutbefriedigendausreichendmangelhaftungenügend

Joomla: ein einfaches Modul erstellen

Was für WordPress die Widgets (und zum Teil auch die Plugins), das sind für Joomla die Module. Und sogar noch ein bisschen mehr, denn man kann Module an jede beliebige Template-Position laden und ist nicht an eine oder mehrere widgetfähige Sidebar gebunden. Die Joomla-Doku zum Thema Ein einfaches Modul erstellen ist recht gut, es fehlt allerdings die Anleitung, wie man sein Modul dann auch tatsächlich in Joomla einbindet. Deswegen erkläre ich es hier mal Step by Step.

Wohin kommt das Ganze?

Um die Installation zu vereinfachen, geht man gleich in den Ordner [joomla]\modules und legt dort einen neuen Unterordner an, der den Namen mod_[meinmodul] bekommt, in meinem Fall ist das mod_helloworld.

modulordner

modulordner

Unterhalb sieht es so aus:

unterordner_modul

unterordner_modul

Im Ordner tmpl liegen noch zwei Dateien:

ordner_tmpl

ordner_tmpl

Woher kriegen wir die Dateien?

Aus der Joomla-Doku, die sind hier https://docs.joomla.org/J3.x:Creating_a_simple_module/Developing_a_Basic_Module/de fertig zum Rauskopieren angeboten.

Wer macht hier was?

Gehen wir es mal der Reihe nach durch.

Die index.html tut in beiden Fällen nichts anderes als eine leere Seite ausgeben und soll einen direkten böswilligen Zugriff auf das Verzeichnis verhindern.

Die default.php steuert die Ausgabe unseres Moduls, die sieht so aus:

<?php 
// No direct access
defined('_JEXEC') or die; ?>
<?php echo $hello; ?>

Die Variable $hello wurde in der Datei mod_helloworld.php definiert, das sieht so aus:

$hello = modHelloWorldHelper::getHello($params);

Dies wiederum ist der Aufruf der Funktion getHello() aus der Klasse modHelloWorldHelper aus der Helper-Datei, die wurde dort so definiert:

class ModHelloWorldHelper
{
    /**
     * Retrieves the hello message
     *
     * @param   array  $params An object containing the module parameters
     *
     * @access public
     */    
    public static function getHello($params)
    {
        return 'Hello, World!';
    }
}

That’s where the Action is!  Zugegeben, es ist ein bisschen von hinten durch die Brust ins Auge, aber so gehts. Es ist auch vorgesehen, dass man der Funktion getHello() Parameter mitgibt, das kann in der mod_helloworld.php z.B. so aussehen:

$hello = modHelloWorldHelper::getHello("Evi Silvia");

Dann müssen wir nur noch die Ausgabe in der helper.php modifizieren:

public static function getHello($params)
    {
        return 'Hallo, liebe '.$params."!";
    }

Was kommt dabei heraus? Nicht weiter überraschend: Hallo, liebe Evi Silvia! Aber ich greife vor.

Wie man Joomla das neue Modul jetzt bekannt macht

Über Erweiterungen->Verwalten->Überprüfen sollte das neue Modul jetzt gefunden werden, und wenn man die Dateien richtig zusammenkopiert hat, kann man es auch installieren.

Dann läßt sich unter Erweiterungen->Module->Neu das neue Hello World Modul auswählen:

helloworld_auswaehlen

helloworld_auswaehlen

Wie gewohnt Titel vergeben und Modulposition auswählen, und schon sollte die Ausgabe an der gewählten Position zu sehen sein:

modul_anzeige

modul_anzeige

Ich hoffe, ich konnte damit etwas Klarheit in die Sache bringen, bei der Vorlage aus der Joomla-Doku fehlte einfach noch der Teil mit der Installation. Aber so sollte es jeder hinkriegen!

 

Ihre Meinung interessiert mich!

Wie hat Ihnen dieser Artikel gefallen?

sehr gutgutbefriedigendausreichendmangelhaftungenügend

Hätt ich doch beinah übersehen: das Bewertungsformular

Das wär mir doch beinah durch die Lappen gegangen, wir brauchen natürlich noch das Feedback-Formular bei den Rezepten. Im Original-Inselfischkochbuch sieht das so aus:

bewertungsformular_screenshot

bewertungsformular_screenshot

Ich habs in WordPress natürlich mit dem Contact Form 7 angelegt, und dann das Plugin WP Post Signature genutzt, um das Formular automatisch am Ende jedes Beitrags einzufügen. Wollen mal sehen, was sich in Joomla daraus machen läßt. Ich hab mal einen ersten Versuch mit BreezingForms gestartet, schauen wir mal wie weit wir kommen.

Die Anforderungen im Klartext:

  1. das Formular soll am Ende jedes Rezeptes automatisch angehängt werden
  2. damit ich weiß, welches Rezept bewertet wurde, muss der Titel (oder wenigstens die ID) aus der E-Mail hervorgehen

Zu 1.: das hört sich einfacher an als es ist, denn eigentlich sind es zwei Anforderungen, wenn nicht sogar drei.

Das BreezingForms-Plugin

Um ein BreezingForms-Formular überhaupt in einem Artikel anzeigen zu können, muss man das BreezingForms-Plugin installieren. Das findet man, wenn man das BreezingForms-ZIP entpackt hat, unter plg_breezingforms.zip . Nach der Installation muss es noch aktiviert werden, das geht unter Erweiterunge->Module-> Suche nach „breezing“, Pluginname BreezingForms aktivieren. Erst jetzt hat man die Möglichkeit, ein BreezingForms Formular auch in einen Artikel einbinden zu können, und zwar  mit der Syntax:

{ BreezingForms : formularname }

Das fett markierte ist der Name des Formulars. Aber damit haben wir noch nicht viel gewonnen, schließlich müßte man diesen Code am Ende jedes Rezeptes manuell einfügen, und das war nicht die Anforderung.

Wie wärs stattdessen mit einem Modul?

Dafür braucht man laut crosstec noch das extra-Modul, mod_breezingforms.zip. Nach der Installation freigeben nicht vergessen! Dann kann man ein neues Modul vom Typ „BreezingForms“ anlegen und das gewünschte Formular angeben. Falls es nicht angezeigt wird kann es sein dass in den Moduloptionen in der Menüzuweisung „auf keinen Seiten“ steht, das muss man natürlich auf „auf allen Seiten“ ändern.

So, und was hat uns das gebracht?

Auch das Modul muss man erstmal per Hand am Ende jedes Rezeptes einfügen, das ist noch kein grosser Fortschritt aber gemach, gemach, das wird schon noch.

Warum nicht einen Override anlegen?

Weil bei einer Änderung der default.php das Bewertungsformular unter allen Artikeln angezeigt werden würde, nicht nur unter den Rezepten. Wir machen stattdessen mal ein alternatives Layout, das ist mir sympathischer.  Dafür kopiert man sich in den Ordner /templates/dein-templates/dein-template/html/com_content/article die Datei default.php unter einem eigenen Namen, ich nenns mal meins.php. In dieser Datei sucht man dann nach dem Eintrag

<?php echo $this->item->text; ?>

Darunter kopiert man die folgende Zeile:

<?php echo JHtml::_(‚content.prepare‘, ‚{loadposition bewertungsformular}‘); ?>

Jetzt geht man nochmal in das Modul für das Bewertungsformular zurück und ändert die Modulposition in bewertungsformular – Schreibweise genau einhalten!

Daraufhin muss man noch in einem beliebigen Rezept unter dem Reiter Optionen das Layout auf „meins“ stellen, dann wird das Formular nach dem Rezepttext auch angezeigt.

Das war jetzt aber auch noch nicht der Bringer?

Schließlich muss man auch das alternative Layout per Hand anwählen, ich geb zu, da ist noch nicht viel gewonnen, genauso schnell hat man ein Modul eingefügt. Das hängt jetzt alles daran, dass ich keinen Weg gefunden habe, ein Modul nur für eine Kategorie anzeigen zu lassen, und ich hab ein paar Stunden lang danach gesucht, bislang ohne Erfolg.

Ich hätte da noch so’ne Idee

Man könnte ja einen Override auf die default.php anlegen und abfragen, welche Kategorie der aktuelle Artikel hat, und abhängig vom Ergebnis das Modul anzeigen lassen oder nicht. Mal sehen, wie weit wir damit kommen.

In unserem Override der default.php für den Artikel suchen wir nach der Stelle:

<div itemprop=“articleBody“>
<?php echo $this->item->text; ?>
</div>

Danach schubsen wir eine Datenbankabfrage rein:

<?php
    $db=JFactory::getDbo();
    $article_id = JFactory::getApplication()->input->get(‚id‚);
    echo „aktuelle Artikelid= „.$article_id;
    
    $db->setQuery(’select catid from #__content where id= ‚.$article_id.“);
    $catid=$db->loadResult();
    echo „aktuelle catid= „.$catid;
    
    if ($catid == 8){
        echo JHtml::_(‚content.prepare‘, ‚{loadposition bewertungsformular}‘);
    }
    else {
        echo „Dies ist kein Rezept, Kategorie: „.$catid;
        }
    ?>

Was hab ich gemacht? Mir die ID des aktuellen Artikels geholt, diese in den Select auf die #__content reingeschubst und mir so die ID der Kategorie geholt. Rezepte sind bei mir Kategorie 8, das frage ich mit dem If ab und zeige das Formular nur an, wenn dies zutrifft. Das wars schon! Die Debug-Ausgaben kann man noch rausschmeissen, aber so funktionierts. Endlich wieder mal ein bisschen Spaß auf der Datenbank!

Was jetzt noch fehlt: die Übermittlung der Rezept-ID oder des Titels

Weil mir die ganze Menage nichts hilft, wenn ich nicht weiss zu welchem Rezept die Bewertung abgeschickt wurde. Da hilft nur Nachforschen beim BreezingForms-Support, aber dazu gibts einen neuen Beitrag.

Ihre Meinung interessiert mich!

Wie hat Ihnen dieser Artikel gefallen?

sehr gutgutbefriedigendausreichendmangelhaftungenügend

Noch ein paar lose Endchen

Haupteinträge

Das fällt einem im Beitragseditor relativ gross ins Auge, aber was bedeutet eigentlich Haupteintrag ja/nein? Ist eigentlich ganz einfach. Man kann beliebige Artikel als Haupteinträge kennzeichnen, das ist so etwas wie eine übergeordnete Kategorie. Eine Anwendung: wenn man alle Haupteinträge unter einem Menüpunkt sehen will, erstellt man einen neuen Menüeintrag mit dem Menüeintragstyp Beiträge->Haupteinträge. Hier kann man auch einstellen, ob Artikel aus allen Kategorien oder nur aus einer bzw. mehreren ausgewählten Kategorien angezeigt werden sollen. Somit hat man eine Möglichkeit, besonders wichtige oder interessante Artikel auch kategorieübergreifend in einer Blogansicht zusammenzufassen.

Navigationspfad einfügen

Unter Erweiterungen->Module-> Neu -> Navigation – Navigationspfad versteckt sich ein Modul, das einen „Wo bin ich“-Navigationspfad an der gewünschten Layoutposition ausgibt. Nützlich bei verschachtelten Untermenüs!

Blanko-Modul für eigene Inhalte

Man hat unter Module->Neu->Eigenes Modul die Möglichkeit, ein Modul mit selbstdefinierten Inhalten zu erstellen. Ich finde, hier ist eigener PHP-Code, mit Hilfe des Sourcerer eingefügt, gut aufgehoben. Man kann es aber auch für öfter genutzte Texte, z.B. Copyrightvermerke oder dergleichen gut gebrauchen.

Ihre Meinung interessiert mich!

Wie hat Ihnen dieser Artikel gefallen?

sehr gutgutbefriedigendausreichendmangelhaftungenügend

Noch ein nettes kleines Modul: Zufallsbild

Da hatte ich doch glatt den Menüpunkt „Rezeptbilder als Geschenke“ unterschlagen, und weils Spaß macht, legen wir den mit dem Modul für Zufallsbilder an. Voraussetzung ist natürlich, dass man ein paar Bilder zu den vorhandenen Artikeln hochgeladen hat, die stecken dann im Verzeichnis „images“. Man kann sich aber auch ein extra Bilderverzeichnis anlegen, dann den Pfad entsprechend anpassen

Erweiterungen->Module->Neu „Zufallsbild“, bei Bilderverzeichnis images oder das eigene Verzeichnis angeben. Dem Modul einen Namen geben, speichern.

Dann einen Beitrag für das Zufallsbild aussuchen oder neu anlegen, ggf. einem eigenen Menüpunkt zuordnen. Im Beitragseditor die Option „Module“ wählen und das eben erstellte Modul einfügen – fertig!

zufallsbild

zufallsbild

Das Modul könnte man ausser in einem Beitrag natürlich auch an einer Modulposition im Layout anzeigen lassen, aber da kann jeder selber rumprobieren.

Mehr zur Bilderverwaltung in Joomla gibts später in einem eigenen Artikel.

 

Ihre Meinung interessiert mich!

Wie hat Ihnen dieser Artikel gefallen?

sehr gutgutbefriedigendausreichendmangelhaftungenügend

Da ist Joomla stark: ein bisschen Feintuning

Bevor ich hier in die Details gehe, noch ein kleiner Nachtrag: ich habe glatt die Anzeige der neuesten Beiträge vergessen!

Liste der neuesten Beiträge anzeigen

Auch hierfür gibt es ein Modul, es ist zu finden unter Erweiterungen->Module->Neu-> Beiträge-Neueste. Titel vergeben, Kategorie einstellen, ggf. Anzahl und gewünschte Sortierung einstellen, rechts die gewünschte Modulposition wählen, fertig. Jetzt sieht das so aus:

neueste_beitraege

neueste_beitraege

Man könnte natürlich auch noch eine Liste der neuesten Kochbücher (oder jeder anderen Kategorie) ebenso erstellen, aber darauf verzichte ich mal, jetzt gehts ans Feintuning.

Autor der Beiträge ausblenden

Wie bereits erwähnt ist der Autor der Beiträge ggf. immer ich, der Admin, daher ist die Anzeige völlig überflüssig. Man kann sie auf Beitragsebene einzeln oder global für ein Menü ausblenden, ich nehme mal letzteren Weg:

Menüs->Main Menu->Optionen (rechts oben)->Beiträge

Hier kann man den Autor verbergen, und ich stelle mal die Position der Beitragsinfos auch gleich auf „darunter“, weil mir das besser gefällt.

menue_beitragsoptionen

menue_beitragsoptionen

Autor in Blogliste ausblenden

In unserem Inhaltsverzeichnis wird der Autor immer noch angezeigt, dem kommen wir so bei:

Menüs->Main Menü->Rezepteliste A-Z->Listenlayout->Autor in Liste verbergen

Ich habe hier auch den Anzeigefilter auf verbergen gestellt, den brauche ich nicht. Die Zugriffsstatistik (steckt unter Seitenaufrufe) lass ich mal drin, das ist vielleicht für den Besucher ganz interessant.

Anzahl der Schlagworte in der Liste anzeigen

Erweiterungen->Module->Rezeptkategorien (oder wie ihr Modul heisst)->Anzahl Einträge anzeigen

Layout der Blogseiten anpassen

Menüs->Main Menü-> z.B. Alle Rezepte->Blog-Layout

Defaultmäßig wird hier der neueste Beitrag als führender Beitrag auf voller Breite dargestellt, die restlichen folgen mehrspaltig, letzteres ist abhängig vom gewählten Template. Damit es aussieht wie in WordPress, stellt man Führende auf 0 und Spalten auf 1, ich finde aber die mehrspaltige Anzeige recht ansprechend.

In den Blog-Seiten das Pin-Icon ausblenden

Erweiterungen->Templates->Stile-> Template auswählen, unter dem Reiter „Blog“ Show Icon auf No stellen.

Sticky Header ausschalten

Ich finde Sticky Headers extrem irritierend, deswegen mach ich da kurzen Prozess:

Erweiterungen->Templates->Stile->pixel (oder ihrer) -> Sticky Header „No“.

Die Option ist Template-abhängig.

Suche einfügen

Erweiterungen->Module->Neu, Suche

Titel vergeben, Position wählen, fertig.

Die Darstellung der Suchergebnis-Seite kann über Komponenten->Suche->Optionen bis zu einem gewissen Grad gesteuert werden, das kann sich jeder selber anschauen, die Joomla-Suche bietet erheblich mehr Optionen als die WordPress-Suche.

suchergebnis_feineinstellungen

suchergebnis_feineinstellungen

Mehr Feintuning der Suchergebnis-Seite geht offenbar noch über eine Anpassung der Template-Dateien, einen Ansatz findet man hier im Deutschen Joomla-Forum, aber das führt mir hier wesentlich zu weit.

Layoutmodifikationen ohne Ende – übers Kontrollzentrum

Sie sehen schon, es gibt in Joomla nahezu unendlich viele Möglichkeiten, das Aussehen der Seitenkomponenten den eigenen Wünschen anzupassen. Und das alles, ohne in den Templates herumfuhrwerken zu müssen! Das finde ich wirklich eine sehr grosse Stärke gegenüber WordPress, wo man doch meistens nicht darum herumkommt, in den Theme-Templates herumzupfuschen. Denn die sind ja meistens gar nicht bis grottenschlecht dokumentiert, da betreibt man meistens Trial&Error in grossem Stil. Es enthebt einen auch der Notwendigkeit, gleich ein Child-Theme anlegen zu müssen, wenn man eigene Anpassungen am Layout sauber vom Eltern-Theme trennen will.

Child Themes

Die gibt es in Joomla übrigens auch, eine kurze Einführung finden sie hier , Details zur Anwendung der sogenannten Overrides und sonstige Informationen zur Templateentwicklung kann man in der Joomla Documentation nachlesen, ich werde hier nicht näher darauf eingehen, weil es a) den Rahmen dieser kurzen Einführungsserie sprengen würde und b) zur Erstellung einer vernünftigen Webseite mit Joomla nicht wirklich notwendig ist.

Jetzt schauen wir aber mal, was bei unserem neuen Kochbuch auf Joomla-Basis noch fehlt, und dazu gibt es einen neuen Beitrag.

Ihre Meinung interessiert mich!

Wie hat Ihnen dieser Artikel gefallen?

sehr gutgutbefriedigendausreichendmangelhaftungenügend