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.