[How-To] – Programmieren eines Moduls für cms2day

Wir setzen für diese Anleitung nun ein Grundwissen im Bereich HTML/PHP/CSS voraus. Dieses Modul ist keines, was man aktiv als funktionales Modul nutzen kann, doch es wird am Ende des Tutorial’s zum Download stehen. Es dient als Grundlage für ein eigenes Modul.

Vorbereitung:
Für ein Modul beim Content Management System cms2day werden folgende Dateien in einem Ordner benötigt.

  • admin.inc.php -> Zugriffsdatei für die Administration
  • frontend.inc.php -> Zugriffsdatei für die eigentliche Homepage
  • info.inc.php -> Informationsdatei für Daten über den Autor
  • install.sql -> SQL Skripte für die Installation
  • uninstall.sql -> SQL Skript für die Deinstallation

„inc.php“ sind die Funktionsdateien des cms2day. Dabei werden zwei „Klassen“ explizit angesprochen durch das CMS. Das ist zum einen die „admin.inc.php“ welche über das Admincenter angesprochen wird, falls das Modul aktiviert ist. Zum anderen die
„frontend.inc.php“ welche durch das Frontend angesprochen wird. Dabei ist die Information „frontend“ in der info.inc.php auf „true“ zu setzen. Die „info.inc.php“ wird bei der Installation ausgelesen und gibt den Inhalt in die Datenbank. Danach wird das Modul mit diesen Daten auch in der Übersicht der Module angezeigt.
Den grundliegenden Aufbau könnt Ihr euch auf folgendem Bild einmal genauer ansehen.

Bildschirmfoto 2014-06-02 um 15.34.06

Eine weitere Voraussetzung ist der Ordner-Name, dieser muss genau der sein, der auch in der „info.inc.php“ eingetragen wurde, da sonst die Installation nicht funktioniert.

Nun aber genug Geschwafel, nun gehen wir mal an den Sourcecode.
Schauen wir uns erst einmal die „info.inc.php“ an

 

[code lang=”php”]</span>

<?php

&nbsp;

/*

&nbsp;

MODUL für cms2day

Autor: Sascha Lewandowski <http://www.it-lew.de>
Copyright (c) 2014

*/

&nbsp;

$modul_name = "Sample-Modul";
$modul_code = "%SAMPLEMODUL%";
$modul_ordner = "samplemodul";
$modul_version = "1.0.0";
$modul_author = "Sascha Lewandowski";
$author_url = "http://www.it-lew.de";
$modul_info = "Ein Modul als Beschreibung für eine Modul-Programmierung für CMS2Day";
$modul_lizenz = "IT-Lew.de";
$frontend = "false"; #Anzeigen im Frontend in der Navi?

&nbsp;

?>

<span style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px;">[/code]


Wie ihr sehen könnt, sind dort alle Informationen zum Autor zu finden. Diese sind wichtig und geben dem „Nutzer“ einige Informationen, an wen er sich wenden muss, wenn etwas nicht funktionieren sollte.

[code lang=”php”]<?php

/*

MODUL für cms2day

Autor: Sascha Lewandowski <http://www.it-lew.de>
Copyright (c) 2013

*/
$sample = mysql_query("SELECT * FROM modul_sample");

print "<h3>Das ist ein Beispiel einer Überschrift über den eigentlichen Werten</h3>\n";
print "<hr style=\"margin-bottom: 10px;\" />\n";
print "<table class=\"getTabSub\" cellspacing=\"0\" cellpadding=\"0\" summary=\"text\">";
print "<tr class=\"getTR_main\">\n";
print "<td>Information</td>\n";
print "</tr>\n";
print "<tr>\n";
print "<td>";
print "<table class=\"getTabSubSub\" cellspacing=\"0\" cellpadding=\"0\" summary=\"text\">";
print "<tr>";
print "<td width=\"120px\">Wert 1</td>";
print "<td width=\"120px\">Wert 2</td>";
print "<td width=\"120px\">Wert 3</td>";
print "<td width=\"120px\">Wert 4</td>";
print "<td width=\"50px\">Einstellungen</td>";
print "</tr>";
print "</table>\n\n";
print "</td>";
print "</tr>";

while ($data = mysql_fetch_assoc($sample)) {

print "<tr>\n";
print "<td>";
print "<table class=\"getTabSubSub\" cellspacing=\"0\" cellpadding=\"0\" summary=\"text\">";
print "<tr>";
print "<td width=\"120px\">".$data[‘id’]."</td>";
print "<td width=\"120px\">".$data[‘value’]."</td>";
print "<td width=\"120px\"></td>";
print "<td width=\"120px\"></td>";
print "<td width=\"50px\" align=\"right\"><ul><li><a title=\"Updaten\" href=\"index.php?seite=modul&amp;modul=".$_GET[‘modul’]."&amp;datei=admin&amp;action=update&amp;team=".$data[‘team’]."&amp;source=".$data[‘source’]."\"><img src=\"../data/images/status/update.png\" alt=\"\" border=\"0\" /></a></li><li><a title=\"Updaten\" href=\"index.php?seite=modul&amp;modul=".$_GET[‘modul’]."&amp;datei=edit&amp;action=edit&amp;id=".$data[‘id’]."\"><img src=\"../data/images/edit.png\" alt=\"\" border=\"0\" /></a></li><li><a class=\"iconDelete\" onclick=\"return newsdelete();\" title=\"Datensatz löschen\" href=\"index.php?seite=modul&amp;modul=".$_GET[‘modul’]."&amp;datei=edit&amp;action=delete&amp;id=".$data[‘id’]."\"></a></li></ul></td>";
print "</tr>";
print "</table>\n\n";
print "</td>";
print "</tr>";
}

print "</table>\n";
?>[/code]

Die Ausgabe für die Besucher ist sehr schlicht gehalten, man hat vielleicht eine While/For-Schleife für einen Newsfeed oder aber eine Tabelle mit Informationen. Dem Autor sind dort keine Grenzen gesetzt.

[code lang=”php”]<?php

/*

MODUL für cms2day

Autor: Sascha Lewandowski <http://www.it-lew.de>
Copyright (c) 2014

*/

### Error Reporting ###
#ini_set(‘display_startup_errors’,1);
#ini_set(‘display_errors’,1);
error_reporting(E_ALL);

if (!isset($_SESSION[‘login’])) {

print "KEINE BERECHTIGUNG!";
exit;

}

$sample = mysql_query("SELECT * FROM modul_sample");

if (isset($_GET[‘action’]) && $_GET[‘action’] == "settings") {

# Hier drin ist dann der Update Befehl für die Settings, dabei kann ein ganz normaler SQL Update genutzt werden.

header ("Location: index.php?seite=modul&modul=".$_GET[‘modul’]."&datei=admin&&speichern=okay");
exit;
}

print ‘<div id="tabs">’;
print ‘<h1>Modul : Sample</h1>’;
print ‘<ul>’;
print "<li><a id=\"tab1_link\" onclick=\"cswitch(‘".$_GET[‘seite’]."-".$_GET[‘modul’]."-".$_GET[‘datei’]."’,’tab1′)\" class=\"\">&Uuml;bersicht</a></li>";
print "<li><a id=\"tab2_link\" onclick=\"cswitch(‘".$_GET[‘seite’]."-".$_GET[‘modul’]."-".$_GET[‘datei’]."’,’tab2′)\" class=\"\">Einstellungen</a></li>";
print ‘</ul>’;
print ‘</div>’;

print ‘<div id="tab1">’;
print ‘<div class="box">’;

print "<h3>Das ist ein Beispiel einer Überschrift über den eigentlichen Werten</h3>\n";
print "<hr style=\"margin-bottom: 10px;\" />\n";
print "<table class=\"getTabSub\" cellspacing=\"0\" cellpadding=\"0\" summary=\"text\">";
print "<tr class=\"getTR_main\">\n";
print "<td>Information</td>\n";
print "</tr>\n";
print "<tr>\n";
print "<td>";
print "<table class=\"getTabSubSub\" cellspacing=\"0\" cellpadding=\"0\" summary=\"text\">";
print "<tr>";
print "<td width=\"120px\">Wert 1</td>";
print "<td width=\"120px\">Wert 2</td>";
print "<td width=\"120px\">Wert 3</td>";
print "<td width=\"120px\">Wert 4</td>";
print "<td width=\"50px\">Einstellungen</td>";
print "</tr>";
print "</table>\n\n";
print "</td>";
print "</tr>";

while ($data = mysql_fetch_assoc($sample)) {

print "<tr>\n";
print "<td>";
print "<table class=\"getTabSubSub\" cellspacing=\"0\" cellpadding=\"0\" summary=\"text\">";
print "<tr>";
print "<td width=\"120px\">".$data[‘id’]."</td>";
print "<td width=\"120px\">".$data[‘value’]."</td>";
print "<td width=\"120px\"></td>";
print "<td width=\"120px\"></td>";
print "<td width=\"50px\" align=\"right\"><ul><li><a title=\"Updaten\" href=\"index.php?seite=modul&amp;modul=".$_GET[‘modul’]."&amp;datei=admin&amp;action=update&amp;team=".$data[‘team’]."&amp;source=".$data[‘source’]."\"><img src=\"../data/images/status/update.png\" alt=\"\" border=\"0\" /></a></li><li><a title=\"Updaten\" href=\"index.php?seite=modul&amp;modul=".$_GET[‘modul’]."&amp;datei=edit&amp;action=edit&amp;id=".$data[‘id’]."\"><img src=\"../data/images/edit.png\" alt=\"\" border=\"0\" /></a></li><li><a class=\"iconDelete\" onclick=\"return newsdelete();\" title=\"Datensatz löschen\" href=\"index.php?seite=modul&amp;modul=".$_GET[‘modul’]."&amp;datei=edit&amp;action=delete&amp;id=".$data[‘id’]."\"></a></li></ul></td>";
print "</tr>";
print "</table>\n\n";
print "</td>";
print "</tr>";
}

print "</table>\n";

print "</div>\n";
print "</div>\n";

print ‘<div id="tab2">’;
print ‘<div class="box">’;

print "<form name=\"einstellungen\" method=\"post\" action=\"index.php?seite=modul&amp;modul=".$_GET[‘modul’]."&amp;datei=admin&amp;wysiwyg=true&amp;action=settings\">\n";

print ‘<div class="inbox">’;
print "<h2>Sample Einstellungen</h2>";
print "<h3>Dies sind die Einstellungen für das Sample-Modul</h3>";

print "<table cellspacing=\"0\" cellpadding=\"0\" summary=\"text\">";

print "<tr>";
print "<td width=\"25\"><input type=\"radio\" name=\"typ\" value=\"0\" /></td>";
print "<td>A</td>";
print "</tr>";

print "<tr>";
print "<td width=\"25\"><input type=\"radio\" name=\"typ\" value=\"1\" checked=\"checked\" /></td>";
print "<td>B</td>";
print "</tr>";

print "</table>";
print ‘<br />’;
print ‘</div>’;

print "<p><input type=\"submit\" value=\"&Auml;nderungen speichern\" class=\"button\" /></p>";

print "</form>\n";

print "</div>\n";
print "</div>\n";

print ‘<div class="info">Hier ist eine Info unter dem Datensatz</div>’;

?>[/code]

Bei der „admin.inc.php“ schaut das ganze etwas anders aus. Sie ist das „Hirn“ hinter dem Modul. Über die Admin-Datei wird die gesamte Funktionalität gesteuert und Informationen in die Datenbank geschrieben.

[code lang=”sql”]CREATE TABLE IF NOT EXISTS `modul_sample` (
`id` int(60) NOT NULL AUTO_INCREMENT,
`value` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

INSERT INTO `modul_sample` (`id`, `value`) VALUES
(1, ‘hasdfasdg’),
(2, ‘asdfasdgasdg’),
(3, ‘asdgasdgasdf’),
(4, ‘asdfasdgasdgasd’),
(5, ‘asdgasdgasdfasdf’),
(6, ‘asdgfasdgasdf’),
(7, ‘asdfasdfasdf’),
(8, ‘asdfasdfasdf’),
(9, ‘asdfadsfasdgasdg’),
(10, ‘asdgasdgasdfasdf’),
(11, ‘asdfasdgasdg’);[/code]

Das Installationsskript ist eigentlich vergleichbar mit einem SQL-Dump. Das ist auch genau die Methode, wie es in das System eingespielt wird. Der Code wird aus der Datei ausgelesen und in das CMS, beziehungsweise in die Datenbank eingespielt.

[code lang=”sql”]DROP TABLE modul_sample[/code]

Dieses Skript ist eigentlich nur für eine Funktion da – LÖSCHEN! In unserem Beispiel besteht es aus einer Zeile, welche den Inhalt aus der Datenbank bezogen auf das Modul löscht.
Diese Datei muss beim Upload genau wie die „install.sql“ in einem Ordner „sql“ liegen. Alle anderen Dateien können im Modul-Stammverzeichnis liegen.
Das sind die wichtigsten und grundliegenden Dateien für ein Modul beim Content Management System cms2day.

Bei Fragen könnt Ihr gerne einen Kommentar hinterlassen.

 

DOWNLOAD des Beispiel-Moduls

4 Comments for “[How-To] – Programmieren eines Moduls für cms2day”

Horst Kreiner

says:

Hallo
habe heute probiert Ihr Modul zu installieren aber er schreibt nur “Vorgang konnte nicht durchgeführt werden!”.

Bitte um Antwort.

Danke im Voraus

says:

Hey Horst, entschuldige die Verspätung, das Modul ist nicht für die aktuelle Version von cms2day. Mit der aktuellen Major Version wurden viele Änderungen unterzogen, welche in dem Beispiel-Modul nicht berücksichtigt wurden 🙂

Schreibe einen Kommentar

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