Robert Deutz meistens harmlos

... hier schreibe ich über Dinge, die mich freudig stimmen, über schönes, aber auch über das was mich nervt und aufregt, ich fordere hier Gerechtigkeit für alle bin aber nicht gerecht zu jedem, ich bin hemmungslos parteiisch und schwer von einer anderen Meinung zu überzeugen und oft bestimmt auch ratlos aber nicht sprachlos. Nur damit keiner sagen kann er hätte es nicht gewusst.

Joomla! 1.5 erweitern - Das Backend

Der erste Artikel endet damit, dass einige Verzeichnisse und Dateien angelegt wurden. Starten wir nun den zweiten Teil mit einer Erläuterung für was die Verzeichnisse und Dateien gedacht sind.

Im Verzeichnis "models" findet man nur die comments.php, der Grund dafür ist, dass wir bei about nur Text ausgeben möchten und keine Daten benötigen.

Dann noch "views", hier sind nun die Dateien zu finden, die für die Ausgabe zuständig sind. Also wieder about.php und comments.php.

Fehlt noch die übergeordnete Ablaufsteuerung, ich hatte im ersten Teil schon erwähnt das Joomla nicht wirklich viel macht, es wird die Datei admin.rdbs_comment.php eingebunden und dabei natürlich der enthaltene php-Code ausgeführt (bzw. interpretiert). In den alten Zeiten hat man hier meistens eine umfangreiche switch-Anweisung für die Steuerung gefunden. Jetzt wird hier fast nur der richtige Controller erzeugt und dann die execute-Methode aufgerufen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
$task = JRequest::getVar('task');
$controllerName = JRequest::getVar( 'section', 'comments' );

switch ($controllerName)
{
// wenn nichts passt dann nimm dies
default:
$controllerName = 'comments';
// die folgenden Bereiche kennen wir
case 'comments';
case 'about';
// die richtige Datei einbinden
$dir=JPATH_COMPONENT.DS.'controllers'.DS;
require_once( $dir.$controllerName.'.php' );
// Controllernamen zusammenbauen
$controllerName = 'RdbsCommentController'.$controllerName;

// Controller erzeugen
$controller = new $controllerName();

// und nun den task ausführen
$controller->execute( $task );

// Wenn der Controller ein Redirect gesetzt hat dann machen wir das auch
$controller->redirect();

break;
}
?>

Warum so kompliziert? Also ich unterteile hier meine Komponente in unterschiedliche Bereiche. Im Grunde würde es ausreichen nur den Task zur Steuerung zu verwenden, das kann aber, wenn die Erweiterung größer wird, schnell unübersichtlich werden. Deshalb führe ich hier den Begriff Section ein. Um das zu verdeutlichen ein Beispiel:
Nehmen wir an, ich hätte eine Komponente mit der ich unterschiedliche Daten bearbeiten könnte, ganz abstrakt: daten1, daten2, daten3, …. datenN. Diese Daten kann man natürlich Editieren, Löschen, Anlegen. Wenn ich nur den Task zur Steuerung verwenden würde, müsste ich Aktion und Datentyp kombinieren, um das Ganze eindeutig zu halten. Das müsste ich dann auch in der Toolbar durchhalten, außerdem müsste ich den Task auseinanderpflücken um den passenden Controller zu erzeugen und last but not least muss man viel mehr tippen und kann die Dateien nicht einfach kopieren und verwenden.

Momentan ist das sicher oversized, aber die Komponente kann ja größer werden und wir sind dann vorbereitet:-).

Arbeiten wir uns jetzt durch die einzelnen Menüpunkte, zuerst "about". Das ist der einfachere von den beiden und man kann daran schon einiges verstehen. Die Datei about.php im Controller-Verzeichnis enthält den folgenden Programmcode:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20


<?php
jimport( 'joomla.application.component.controller' );

class RdbsCommentControllerAbout extends JController
{
/**
* Display the about page
*/
function display()
{
require_once(JPATH_COMPONENT.DS.'views'.DS.'about.php');
RdbsCommentViewAbout::display( );
}

function cancel ()
{
$this->setRedirect( 'index.php?option=com_rdbs_comment' );
}
}
?>




Zuerst wird die Basisklasse eingebunden, das passiert in der Zeile:

1


<?phpjimport( 'joomla.application.component.controller' );?





diese includiert die Datei controller.php aus dem Verzeichnis libaries/joomla/application/component (die Verzeichnisangabe startet im Joomla-Root-Verzeichnis). Damit kennt das System dann die Klasse JController. Von dieser leiten wir unsere eigene Controller-Klasse ab. Unsere eigene Klasse erbt so ein paar nützliche Methoden z.B. execute. Wer keinen blassen Schimmer von objektorientierter Programmierung hat der schaut sich bitte diese und vielleicht noch diese Seite an.

Eine weitere nützliche Sache ist, dass die Klasse (Jcontroller) eine Defaultmethode festlegt, macht man nichts ist das die Methode "display". Wählen wir den Menüpunkt "About" aus, wird der in der Datenbank für diesen gespeicherte link verwendet, hier ist das:
option=com_rdbs_comment&section=about&task=about

Die Section im Link sorgt dafür, dass der About-Controller verwendet wird, über den Task "about" müsste die Methode about verwendet werden. Gibt es nicht(!), also zieht hier die Defaultmethode und display wird verwendet. Man kann also über die execute-Methode der Klasse eine Funktion innerhalb der Klasse ausführen. Gibt es keine passende Funktion wird die Defaultmethode benutzt. In unserer Klasse haben wir die Defaultmethode auch noch überladen (im Zusammenhang mit OOP spricht man hier von Polymorphie) und eine eigene display-Funktion definiert. Des Weiteren haben wir noch eine cancel-Funktion vereinbart, diese setzt aber nur den redirect und macht ansonsten nichts.

Was macht also unser Controller, aktuell bindet er die passende Viewdatei ein und ruft die Display-Methode auf. Die schauen wir uns jetzt an:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 

<script language="javascript" type="text/javascript">
<!--
function submitbutton(pressbutton) {
var form = document.adminForm;
if (pressbutton == 'cancel') {
submitform( pressbutton );
return;
}
}
//-->
</script>
< ?php
echo '<form action="index.php" method="post" name="adminForm">';

..... der Text der ausgegeben werden soll

echo '<input type="hidden" name="section" value="about" />';
echo '<input type="hidden" name="option" value="com_rdbs_comment" />';
echo '<input type="hidden" name="task" value="" />';
echo '';

}
?>

Zunächst wird die toolbar (RdbsCommentViewAbout::setToolbar();) erzeugt, früher hat man dafür die Dateien toolbar.KOMPONENTE.php und toolbar.KOMPONENTE.html.php. Diese sind nun überflüssig, die Ausgabe wird komplett in der Viewdatei erzeugt. Dann wird ein wenig java-script eingebunden und es folgt ein Formular. Dieses gibt den Text aus und setzt einige Felder, die wir für den Ablauf benötigen. Im Wesentlichen sind das "option" und "section", die "option" sorgt das wir wieder bei unserer Komponente landen und mit section=about wird dann wieder der About-Controller geladen. Die ganze Seite hat nur einen Cancel-Button, drückt man den, wird der Task auf Cancel gesetzt. Damit ruft der Controller dann die Cancel-Methode auf, der setzt den redirect und gut ist. Der wird dann in der übergeordneten Ablaufsteuerung ausgeführt und wir befinden uns wieder fast am Anfang.

Damit haben wir den ersten Menüpunkt abgearbeitet!

Den Code für die Toolbar liefere ich jetzt auch zum Abschluss:

1
2
3
4
5
6
7




<?php
function setToolbar ()
{
JToolBarHelper::title( JText::_( 'About' ), 'generic.png' );
JToolBarHelper::cancel( 'cancel' );
}
?>


Den zweiten Menüpunkt machen wir dann in der nächsten Folge. Dann gibt es auch wieder ein Archiv mit den ganzen Dateien.


Administrator
Geschrieben am Donnerstag, den 10. Mai 2007 um 17:09 Uhr von Administrator

Bis jetzt schon 4932 mal gelesen. Ist das Interessant? Twittere es deinen freunden!

Beitrag bewerten

(2 votes)

Die letzten Beiträge von
Administrator

  • Öfter mal was neues Geschrieben am Donnerstag, den 18. Juni 2009 um 20:37 Uhr

    Mit diesem Blog ist es schon etwas schwer, ich würde ja gerne mehr schreiben, aber…

  • RSS Feed Manager für 1.5 Geschrieben am Donnerstag, den 29. Mai 2008 um 08:18 Uhr

    In der letzten Zeit erreichen mich immer wieder Anfragen, ob ich den RSS Feed Manager…

  • Umgestaltung Geschrieben am Mittwoch, den 23. April 2008 um 08:16 Uhr

    Es war mal wieder längere Zeit recht ruhig hier und dieses schreibe ich auch nur…

  • Update Sitemap-Komponente für Joomla 1.5 Geschrieben am Mittwoch, den 07. November 2007 um 08:12 Uhr

    Ich habe die Komponente nun auch fit für die RC3 von Joomla gemacht. An der…

  • Sitemap für Joomla 1.5 veröffentlicht Geschrieben am Samstag, den 25. August 2007 um 08:08 Uhr

    Gesten habe ich meine auf Joomla 1.5 umgestellte Sitemap Komponente fertig gestellt. Die Komponente nutzt…

Die neuesten Tweets von
Robert Deutz

  • @olivierk + I would guess that 8min the ball is hold by the Quarterback looking where he can pass it, but respect they make mil $ with 4min. Link Montag, den 06. Februar 2012 um 10:29 Uhr
  • @adriybarrarojas ;-) Viele Grüße, hoffe es geht dir gut. Link Montag, den 06. Februar 2012 um 08:28 Uhr
  • now I have an idea what the Super Bowl is: 4 hour commercial interrupted by 10 sec portions of "sport" #superbowl Link Montag, den 06. Februar 2012 um 07:28 Uhr
  • @philiplocke I have only a few, I have to play a little bit more but I will do when I have a list :-) Link Sonntag, den 05. Februar 2012 um 21:18 Uhr
  • had a lot of fun with bootstrap joomla template, thanks @philiplocke, don't know what your plan is with it but I've some suggestions/ideas Link Sonntag, den 05. Februar 2012 um 20:34 Uhr

Kommentare

Bisher keine Kommentare

Neuen Kommentar hinzufügen

 
 
 
 
 
 

RDBS Comment entwickelt von Robert Deutz Business Solution

Ich lese gerade

Was würde Google tun?
Wie man von den Erfolgsstrategien des Internet-Giganten profitiert

Auf dieser Seite nutze ich

J! & Beyond | International Joomla! Event - May 6th to May 8th, 2011
Joomla! Community Magazine | Because community matters...