Contents

Verwendung des Skeleton-Moduls als Einstieg in die Modul-Programmierung

Skeleton ist ein einfaches Modul. Es hat keine Funktion und wurde nur für den Zweck erstellt, Ihnen den Einstieg in die Programmierung Ihrer eigenen Module zu erleichtern.

Verwendung des ModuleMaker-Moduls als Einstieg in die Modul-Programmierung

  • 1. Laden Sie das ModuleMaker-Modul aus dem CMSms Forge.
  • 2. Installieren Sie es dann wie jedes andere Modul.
  • 3. Gehen Sie in der Administration in das Menü Erweiterungen > ModuleMaker und folgen Sie den Anweisungen des Assistenten.
  • 4. Für Unix/Linux müssen Sie noch den Eigenümer der Dateien Ihres Moduls ändern.
  • 5. Jetzt können Sie dem Modul die gewünschten Funktionen hinzufügen.

In AdoDB lite für Tabellen verfügbare Spaltentypen

Hierzu finden Sie unter Cross-Database Type Codes weitere Informationen (in Englisch).

Zugriff auf die aktuelle Seiten-ID oder -Alias

$gCms->variables['page_name'] (für den Alias der Seite)
$gCms->variables['content_id'] (für die ID der Seite)

Ausgabe von Status-Meldungen, nachdem eine Seite bearbeitet wurde

Sie müssen dazu der Redirect-Funktion nut einen weiteren Parameter hinzufügen. Ersetzen Sie dafür den Code:

$this->Redirect($id, 'defaultadmin', $returnid);

mit einem Code ähnlich dem folgenden (ersetzen Sie 'templateupdated' mit dem Namen des Sprach-Strings, den Sie anzeigen lassen wollen):

$params = array('module_message' => $this->lang('templateupdated'));
$this->Redirect($id, 'defaultadmin', $returnid, $params);

Hinweis: Dies funktioniert erst ab CMSms Version 1.0.

Ausgabe von Statusmeldungen für einen bestimmten Reiter

Im folgenden Beispiel werden wir eine Statusmeldung ausgeben, nachdem die Liste der Kommentare im Comments-Modul bearbeitet wurde.

Als erstes öffnen wir die Datei action.updatelisttemplate.php und suchen folgende Zeile:

$this->Redirect($id, 'defaultadmin');

Diese wird mit

$params = array('tab_message'=> 'list_template_updated', 'active_tab' => 'list_template');
$this->Redirect($id, 'defaultadmin', '', $params);

ersetzt. Um den Sprach-String 'list_template_updated' hinzuzufügen, öffnen wir jetzt die Datei lang/de_DE.php und ergänzen diese Zeile:

$lang['list_template_updated'] = 'Template für Kommentare-Anzeige erfolgreich aktualisiert.';

Als nächstes öffnen wir die Datei action.defaultadmin.php und suchen die folgende Zeile:

echo $this->StartTabHeaders();

Damit die Variable $tab den Namen des Reiters enthält, auf den sich die Anzeige beziehen soll, müssen die folgenden Zeilen hinzugefügt werden:

echo $this->StartTabHeaders();
if (FALSE == empty($params['active_tab']))
{
    $tab = $params['active_tab'];
} else {
    $tab = '';
}

Jetzt suchen wir die folgenden Zeilen

echo $this->SetTabHeader('list_template', $this->Lang('list_template'));

und ändern diese in

echo $this->SetTabHeader('list_template', $this->Lang('list_template'), ('list_template' == $tab));

Damit wird festgelegt, dass der Reiter auf aktiv gesetzt wird, wenn $params['active_tab'] == 'list_template' ist.

Dann gehen wir weiter zur folgenden Zeile:

echo $this->StartTab('list_template');

Damit die Statusmeldung angezeigt wird, muss der Parameter $params übergeben werden. Ändern Sie die Zeilen wie folgt:

echo $this->StartTab('list_template', $params);

Wenn Sie jetzt den Button "Absenden" im Reiter "Template für die Kommentar-Anzeige" klicken, kehren Sie zu diesem Reiter zurück und die Erfolgsmeldung wird angezeigt.

Beispiel: Comments-display-template-updated.png

Hinweis: Dies funktioniert erst ab CMSms Version 1.0.

Ausgabe von Fehlermeldungen mit Link auf die Fehlerbehebungsseite im Wiki

Verwenden Sie dazu den folgenden Code:

echo $this->ShowErrors($this->Lang('error_nofilesuploaded'));

Hinweis: Dies funktioniert erst ab CMSms Version 1.0.

Übersetzungen durch das Translation Center aktivieren

Aus dem Forum-Posting: New translation tool for modules and the core!

Wenn Sie Modul-Programmierer sind und Sie Ihr Modul "internationalisieren" wollen (= im Modulverzeichnis ist ein Verzeichnis /lang mit Ihrer Sprache enthalten), dann wird Ihr Modul im Translation Center gelistet.

Bitte übersenden Sie keine anderen Sprachdateien als die, in der das Modul programmiert wurde (= die Sprache, die in der Kategorisierung im CMSms Forge eingetragen wurde). Zum Beispiel ist die Sprache des TagRep-Moduls Englisch (obwohl der Autor deutsch spricht). Daher sollte nur die Datei en_US.php in das Module Repository hochgeladen werden.

Die Sprache des Moduls (wie zum Beispiel die en_US.php) sollte sich direkt im Verzeichnis /lang befinden. Von dort werden die Dateien für alle Übersetzungen entnommen, die dann ihrerseits im Verzeichnis /lang/ext/ zu finden sind (alle Übersetzungen, es gibt gegenüber früheren Versionen keine separaten Verzeichnisse für jede Sprache mehr).

Damit dies funktioniert, werden wir ab der CMSms-Version 0.11.3 eine kleine Modifikation vornehmen. Wenn Sie später eine Version veröffentlichen wollen, die mit 0.11.2 und älteren Versionen kompatibel ist, müssen Sie die Sprachdateien bei Veröffentlichung des Moduls selbst in das entsprechende Verzeichnis verschieben.

Sie müssen dann noch einen Befehl hinzufügen, damit die SVN-Version Ihres Modul-Projekts bei einer Aktualisierung alle Übersetzungen enthält. Denken Sie daran, dass manche Anwender mit den SVN-Versionen Ihres Moduls arbeiten und sich nicht das Modul bei dessen veröffentlichung herunter laden.

Der Befehl, um Ihr Modul ins SVN zu laden, ist folgender (sie sollten natürlich ModuleName durch den Namen Ihres Moduls ersetzen):

für Unix-Anwender:

svn propedit svn:externals modules/ModuleName/lang
ext http://svn.cmsmadesimple.org/svn/translatecenter/modules/ModuleName/lang/ext

für Windows-Anwender, die TortoiseSVN einsetzen:

Gehen Sie in das Verzeichnis einer funktionierenden Kopie Ihres Moduls. Klicken Sie dort auf die rechte Maustaste und dann auf Eigenschaften. Sie werden dann einen Reiter mit dem Namen Subversion finden (der mit dem Tortoise-Icon). Dort können Sie die Eigenschaften festlegen. Wählen Sie aus dem Listenfeld-Menü die Eigenschaft svn:externals property und tragen dann im Textfeld folgendes ein:

lang/ext http://svn.cmsmadesimple.org/svn/translatecenter/modules/ModuleName/lang/ext

Klicken Sie dann auf "Festlegen". Vergessen Sie nicht, das gesamte Modul nochmals hochzuladen oder wenigstens das Verzeichnis /lang.

Jetzt starten Sie die folgenden Befehle

svn cleanup lang
svn update
svn commit lang
svn update lang

Sie müssen dies nur einmal tun und dann bitte so schnell wie möglich!!

Wenn Sie Modulprogrammierer sind, aber bereits selbst eine Übersetzung erstellt haben, melden Sie sich bitte beim jeweiligen Sprachprojekt an. Über dieses werden dann die Berechtigungen eingerichtet, damit Sie im Translation Center Ihre Übersetzungen eingeben können.

Wenn Ihre Sprache im CMSms Forge noch nicht existiert, erstellen Sie ein Projekt und informieren uns darüber (die Kontaktinformation finden Sie am Ende dieser Seite). Wir werden dann die Konfiguration des Translation Centers entsprechend anpassen.

Wenn Sie Ihr Modul jedoch ausschließlich in Ihrer Sprache programmiert haben (= die Sprache ist hartcodiert), dann wird ihr Modul nicht im Translation Center erscheinen. Wenn Sie sich also später dafür entscheiden, das Feature der Internationalisierung zu nutzen, bitten wir Sie, uns entsprechend zu informieren, damit wir Ihnen das Translation Center ab diesem Moment zur Verfügung stellen können.

Die Verwendung von "sauberen" URLs durch Ihr Modul

von Elijah Lofgren

In diesem Beispiel werden wir das Album-Modul dazu bringen, "saubere" (= im Sinne von suchmaschinenfreundliche bzw. auch für Laien lesbare) URLs zu erzeugen.

Das Album-Modul verwendet zum Beispiel URLs wie diese index.php?mact=Album,cntnt01,default,0&cntnt01albumid=1&cntnt01pictureid=2&cntnt01returnid=55

um auf ein einzelnes Bild und URLs wie diese index.php?mact=Album,cntnt01,default,0&cntnt01albumid=1&cntnt01returnid=54

um auf die Alben zuzugreifen. Wie Sie sehen, enthalten die URLs die folgenden Parameter: "albumid", "pictureid", und "returnid". Damit wir saubere URLs verwenden können, müssen diese Parameter bei CMSms registriert werden.

Der richtige Platz, um dies für Ihr Modul zu tun, ist die SetParameters-Funktion.

Um dies für unser Beispiel in der Datei Album.module.php zu tun, muss die existierende SetParameters()-Funktion:

function SetParameters()
{
	$this->CreateParameter('albums', '', $this->lang('help_albums'));
}

wie folgt geändert werden:

function SetParameters()

{

	$this->CreateParameter('albums', '', $this->lang('help_albums'));
	// For viewing a picture
	$this->RegisterRoute('/album\/(?P<albumid>[0-9]+)\/(?P<pictureid>[0-9]+)\/(?P<returnid>[0-9]+)$/', 
array('action'=>'default'));
	// For viewing an album
	$this->RegisterRoute('/album\/(?P<albumid>[0-9]+)\/(?P<returnid>[0-9]+)$/',
 array('action'=>'default'));
	// For viewing a thumbnail page
	$this->RegisterRoute('/album\/(?P<albumid>[0-9]+)\/page(?P<page>[0-9]+)\/(?P<returnid>[0-9]+)$/',
 array('action'=>'default'));
}

Eine kleine Information über regex:

(20:32:13) elijahlofgren: I know some regex but what does "?P" stand for?
(20:32:48) Ted: You know the matches result? That basically gives a name to the result instead of looking for the index of it
(20:33:20) Ted: So, when I get my matches, I can just pass that along as the parameters that would've been on the 
 big long string
(20:33:39) elijahlofgren: Ted: ah, ok. (Thinks he undestands).
(20:34:36) Ted: So, I'll have $matches['albumid'] instead of $matches[1] in my result for that [0-9]+

Und noch eine Info über die RegisterRoute-Funktion:

/**
 * Register a route to use for pretty url parsing
 *
 * @param string Route to register
 * @param array Defaults for parameters that might not be included in the url
 */
function RegisterRoute($routeregex, $defaults = array())

Next we need to actually use clean URLs in the links that Album outputs.

URLs are outputted using the CreateLink function.

The prototype is:

CreateLink($id, $action, $returnid='', $contents='', $params=array(), $warn_message='', $onlyhref=false, 
$inline=false, $addttext='', $targetcontentonly=false, $prettyurl='') 

For example here is the function in album that outputs a URL to view an album.

$albums[$i]->link = $this->CreateLink($id, 'default', $returnid, '', 
array('albumid'=>$albums[$i]->id), '', true);

We need to add the $prettyurl parameter so it looks like this:

$albums[$i]->link = $this->CreateLink($id, 'default', $returnid, '', 
array('albumid'=>$albums[$i]->id), '', true, false, '', false, 'album/'.$albums[$i]->id.'/'.$returnid);

Now the URL for viewing an Album is: /album/1/54/ instead of: /index.php?mact=Album,cntnt01,default,0&cntnt01albumid=1&cntnt01returnid=54

Much nicer. :)

We also need to add the pretty URL parameter to the rest of the calls to CreateLink.

So we find:

$allpictures[$i]->link = $this->CreateLink($id, 'default', $returnid, '', 
array('albumid'=>$albumid,'pictureid'=>$allpictures[$i]->id), '', true);

and change it to:

$allpictures[$i]->link = $this->CreateLink($id, 'default', $returnid, '', 
array('albumid'=>$albumid,'pictureid'=>$allpictures[$i]->id), '', true, '', '', '', 
'album/'.$albumid.'/'.$allpictures[$i]->id.'/'.$returnid);

Now the URL for viewing a picture is like: /album/1/2/54/ instead of: /index.php?mact=Album,cntnt01,default,0&cntnt01albumid=1&cntnt01pictureid=2&cntnt01returnid=54

There is one last URL we need to change, the one for viewing a thumbnail page:

So we find:

$link['page'][$i] = $this->CreateLink($id, 'default', $returnid, '', array('albumid'=>$albumid,'page'=>$i), '', true);

And change it to:

$link['page'][$i] = $this->CreateLink($id, 'default', $returnid, '', array('albumid'=>$albumid,'page'=>$i), '', true, 
'', '', '', 'album/'.$albumid.'/page'.$i.'/'.$returnid);


Now the URL for viewing a thumbnail page will be: /album/1/page2/54/ instead of: /index.php?mact=Album,cntnt01,default,0&cntnt01albumid=1&cntnt01page=2&cntnt01returnid=54

There, using this example hopefully you can figure out how to make your module use pretty URLs.

If you have questions or problems, post in the Modules/Add-Ons forum.


This page in: English - Deutsch - Español - Français - Italiano - Lietuvių - Nederlands - Norsk - Polski - Česky - Русский - Svenska - Tiếng Việt - عربي - 日本語 简体中文

User Handbook/Developers Guide/Creating Modules/de

From CMSMS

A2 Hosting