Joomla und Erweiterungen (Templates, Komponenten, Plugins, Module)
Wissenswertes, Anleitungen, Workarounds, Bugfixes zu Joomla und Joomla-Erweiterungen
- Details
Wie wird modChrome genutzt und aufgerufen?
templates/hm_yaml/html/index/THEME/index.php | |
1 2 3 4 5 6 7 8 9 10 11 |
<?php if($this->countModules( 'teaser' )) : $jyaml->getPosition('modules', 'teaser', 'rounded', ''); endif; ?> <?php if($this->countModules( 'HeadFuncModules' )) : $jyaml->getPosition('modules', 'HeadFuncModules', 'headfunctionmodule', ''); endif; ?> |
Die "Pflichtparameter" sind type, name und style. Ein weiterer Parameter kann genutzt werden um diverse Variablen (Attribute) zu übergeben, die durch modChrome interpretiert werden. Dazu gleich mehr. Zu den ersten beiden Parametern type und name muss wohl nichts gesagt werden, das ist in vielen anderen Artikeln zum Joomla Template und PatTemplate hinreichend dokumentiert (z.B. hier). Mit dem Style-Paramter übergeben wir in unserem Beispiel den Bezeichner teaser. Damit wird in der Funktion modChrome festgelegt, welcher Style verwendet werden soll. Im Anderen Fallbeispiel wird hier rounded verwendet. rounded ist eine der vorgefertigten hm_yaml-Styles, so wie es z.B. auch xhtml, table, none und horz gibt. Im zweiten Fallbeispiel wollen wir einen eigenen Style headfunctionmodule in der Modulposition HeadFuncModules verwenden.
Was passiert bei modChrome?
Im Detail passiert folgendes: Verantwortlich für individuell modChrome-Definitionen ist das Script modules.php. Bei JYAML liegt das im Verzeichnis joomlarootpfad/templates/hm_yaml/html/. Enhalten ist dort schon ein Beispiel mit dem Bezeichner jyaml Der Bezeichner jyaml wird montiert zum Methodennamen modChrome_jyaml. Genau diese Methode muss in modules.php existieren und ist die für den Style verantwortliche. Es können dann also in modules.php mehrere modChrome-Methoden definiert werden und somit wie oben als Wunschstyle definiert und wahlweise in der Templates-index.php aufgerufen werden.
Hier also mal ein Beispiel wie so eine Methode aussehen kann. Erzeugt wird ein flexibler Modulestyle, welcher einen Border um das Modul zieht, einen Module-Titel auf einem separaten farbigem Hintergrund ausgibt und den Module-Inhaltsbereich mit einem Schatten Links und oben versieht. Außerdem kann das Module ein Modulbild enthalten, welches wiederum mit einer Link versehen werden kann.
templates/hm_yaml/html/modules.php | |
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
<?php function modChrome_jyaml($module, &$params, &$attribs) { $headerLevel = isset($attribs['headerLevel']) ? $attribs['headerLevel'] : '3'; $cssId = isset($attribs['cssId']) ? ' id="'.$attribs['cssId'].'"' : ''; $bkColor = isset($attribs['bgColor']) ? ' style="background:'.$attribs['bgColor'].';"' : ''; $linkStart = isset($attribs['link']) ? ' <a href="' . $attribs['link'] . '" style="color:#333; text-decoration:none;">' : ''; $linkEnde = isset($attribs['link']) ? '</a>' : ''; $modulId = ' id#' . $module->id; $TeaserMenuBoxHeight = isset($attribs['items'])? ' style="height:' . ($attribs['items']*24 + 125) .'px"' : ''; // echo "modChrome_jyaml" . $TeaserMenuBoxHeight; if (!empty ($module->content)) : ?> <div class="modBox"> <?php if ($module->showtitle) : ?> <?php echo $linkStart ?><div<?php echo $bkColor ?> class="modBoxTitle"><?php echo $module->title; ?><?php echo $linkEnde ?></div> <?php endif; ?> <div class="modBoxContent"<?php echo $TeaserMenuBoxHeight?>> <?php if (isset($attribs['img'])) : ?> <div class="modBoxMotivBkGd"> <?php echo $linkStart ?><img src="/<?php echo $attribs['img'] ?>"><?php echo $linkEnde ?> <div class="modBoxMotivShdwLft pngTrans"></div> </div> <?php endif; ?> <div class="floatbox TeaserMenu module<?php echo $params->get('moduleclass_sfx'); ?>"><?php echo $module->content; ?></div> <div class="modBoxShdwTop pngTrans"></div> </div> </div> <?php endif; } function modChrome_pvh($module, &$params, &$attribs) { $headerLevel = isset($attribs['headerLevel']) ? $attribs['headerLevel'] : '3'; $cssId = isset($attribs['cssId']) ? ' id="'.$attribs['cssId'].'"' : ''; $bkColor = isset($attribs['bgColor']) ? ' style="background:'.$attribs['bgColor'].';"' : ''; $imgPath = isset($attribs['imgPath']) ? $attribs['imgPath'] : '/templates/hm_yaml/images/pvh/'; $modulId = ' id#' . $module->id; $TeaserMenuBoxHeight = isset($attribs['items'])? ' style="height:' . ($attribs['items']*24 + 125) .'px"' : ''; // echo "modChrome_jyaml"; echo $TeaserMenuBoxHeight; if (!empty ($module->content)) : ?> <?php if ($module->showtitle) : ?> <div<?php echo $cssId . $bkColor ?> class="TeaserMenuBoxTitle"><?php echo $module->title; ?></div> <?php endif; ?> <div class="TeaserMenuBox"<?php echo $TeaserMenuBoxHeight?>> <div class="TeaserMenuMotivBkGd"><img src="/<?php echo $imgPath; ?>/TM_Stifte.jpg"></div> <div class="floatbox TeaserMenu module<?php echo $params->get('moduleclass_sfx'); ?>"><?php echo $module->content; ?></div> <div class="TeaserMenuShaddowTop pngTrans"></div> <div class="TeaserMenuShaddowLeft pngTrans"></div> </div> <?php endif; } function modChrome_slider($module, &$params, &$attribs) { jimport('joomla.html.pane'); // Initialize variables $sliders = & JPane::getInstance('sliders'); $sliders->startPanel( JText::_( $module->title ), 'module' . $module->id ); echo $module->content; $sliders->endPanel(); } ?> |
Natürlich sind die Styles zu diesem Module-Style in CSS-Dateien hinterlegt und hier werden nur die Classen-Selectoren erzeugt.
Wenn Ihnen dieser Beitrag geholfen und viel Zeit gespart hat, zeigen Sie sich erkenntlich: Über einen Klick auf Google+1 oder Rückmeldungen freue ich mich. Zeigen Sie mir, dass sich die Mühe für die Beitragerstellung gelohnt hat. Schenken Sie auch den Produktwerbungen Ihre Beachtung, denn damit wird mein Aufwand für diese Beiträge refinanziert.
- Details
- Wir gehen in unsere Template index.php an die gewünschte Stelle und fügen folgende Zeilen ein:
Template: index.phpWenn countModules also größer Null (ein oder mehrere hierin plazierte Module), dann wird die Modulposition aktiviert mit dem Namen "teaser".
- Damit Joomla nun diese Modulposition auch verwenden kann, gehen wir einfach auf das Modul, welches wir in diesem Teaser-Container veröffentlichen wollen - z.B. in ein Modul zur Ausgabe eine Flash-Movies. Schauen wir uns die Pulldown-Liste für die Modulpositionen an, steht dort natürlich keine mit dem Namen "teaser". Kein Problem, einfach das selbe Feld der Pulldown-Liste als Eingabefeld nutzen - also "teaser" eingeben ... das Modul veröffentlichen - und das wars dann schon, die Modulposition ist Joomla nun bekannt. Will man ein weiteres Modul bearbeiten, wird man diese Modulposition schon in der Liste finden und kann sie nun auswählen ohne Eingabe.
- Details
Bitte beachten:
Die nachfolgenden Ausführen konzetrieren sich auf Joomla Vers. 1.5.x - speziell die Angaben zu diversen Scripten. In neueren Versionen wird's ziemlich sicher anderes gehandhabt. Unverändert blieben bisher die Ablageorte für die Standard-Favicons, solangen man diese als Dateinamen favicon.ico verwendet.
Favicon einfach überschreiben
Das Frontend-Icon
Das Backend-Icon
In meinen Projekten lege ich meistens auch noch für den Admin-Bereich ein eigenes Projekticon ab, dass errleichtert mir die Orientierung in den Tabs, wenn ich zw. diversen Kundenprojekten wechseln muss. Dies erfolgt nach dem gleichen Prinzip, nur dass wir hier in das Template-Verzeichnis des Backend-Templates gehen müssen joomlarootpath/dministrator/templates/khepri/favicon.ico.
Das Error-Icon oder Standard-Icon
Letzlich kann man noch ein drittes Standard-Favicon ablegen. Wozu? Ich nenne es wg. seiner typischen Verwendung immer das Error-Favicon, denn es wird immer dann aufgerufen wenn z.B. eine Fehler auftritt und Joomla mal ganz seinen Dienst versagt. Natürlich passiert das nicht nur dann sondern auch wenn ich z.B. in dem Webverzeichnis weitere i.d.R. kleine Hilfstools und Seiten habe, die unabhängig von Joomla laufen, z.B. Importscripte etc.
Hier passiert nämlich folgendes: Auf Grund dessen, weil Joomla nicht ausgeführt wird, werden auch die Templates nicht gefetcht und so auch nicht o.g. Favicons eingebunden. Wird durch ein Script oder html-Seite eine Seite an den Browser gesendet, in der kein Favicon definiert ist, ruft der Client automatisch eine favicon.ico aus der Domain-Wurzel ab - das ist eben so ein Quasi-Standard. Das machen wir uns also zu nutze und legen dort eine dritte FavIcon-Variante ab.
- Details
Aktivierung von Joomla-SEF
- Zunächst sollte die erste Option aktiviert werden: "Suchmaschinenfreundliche URLs". Das sollte sofort Wirkung zeigen und die URSs nun schon wir folgt aussehen lassen: ...index.php/faq/1-wissen/1-nicht-vergessen
- Dann die Option "mod_rewrite nutzen". Diese sorgt dafür dass die .htaccess die im Joomla/Server-Root liegen sollte verwendet wird. Joomla liefert dazu eine fertige gut opitmierte htaccess.txt, die eigentlich nur noch umbenannt werden mus in .htaccess. Mehr ist dafür nicht nötig. Eine weitere Anpassung der .htaccess war in meiner Praxis nicht nötig. Die htaccess schmeißt z.B. ein paar Dinge aus der URL heraus, die dort nicht hineingehören, wie das /index.php/ und sonstige unschöne Sonderzeichen.
- Schließlich kann man der URL die jetzt aus der Domain und einem generiertem Pfad zusammengesetzt ist noch den Look verpassen, als ob eine HTML-Datei aufgerufen wird. Dazu wird die 3. Option aufgerufen die dann z.B. .html an die URL anhängt.
sh404SEF hinzufügen
- Ganz wichtig. Zunächst gleich mal per ftp-Client in das Verzeichnis /joomlapfad/administrator/components/com_sh404sef wechseln. Hier müssen nämlich neben diesem Verzeichnis selbst(!) Verzeichnisrechte Schreibrechte 777 erhalten. Leider steht das nirgens, ich mußt es selbst herausfinden. Von sh404SEF wird das zwar geprüft aber die Prüfung findet nur statt wenn das "speichern" als Option überhaupt aktiviert wurde. Macht man das schon nicht, dann wird auch dieser Missstand nicht angemahnt und man kann Stunden in der Componente herumstochern ohne die gewünschten Ergebnisse.
Also im Detail: es betrifft dort die Verzeichnisse (hier also mit 777, im Fall des von Joomla genutzten FTP-Layers setzen):
- /config/
- /logs/ und
- /security/
Außerdem gibt es im Verzeichnis /joomlapfad/components/com_sh404sef noch ein Pfad /cache/. Wenn das cachen genutzt werden soll, dann muss auch dieses Verzeichnis Schreibrechte erhalten. - Nun weiter zur Konfiguration von sh404SEF. Die Komponente wird aufgerufen und dann die "Konfiguration" angeklickt. Im zuerst erscheinenden Registerreiter "Allgemein" die Option "Aktiviert" auf "Ja" schalten und anschließend diese Einstellungen speichern. Nun kann man sich die Auswirkungen auf der Website anschauen.
- Sollte es zu Problemen kommen, empfiehlt es sich die Konfiguration wieder aufzurufen und auf den Registerreiter "Erweitert" zu wechseln. Hier finden wir weiter ganz wichtige Einstellungen.
- Zunächst den Rewrite-Modus. Es ist in jedem Fall der Modus "Mit .htaccess (mod_rewrite) zu empfehlen. Dieser nutzt die oben beschriebene .htaccess und liefert die besten Ergebnisse. Sollte es hiermit trotz aller Bemühungen zu Problemen kommen (dazu mehr unten), dann kann optional umgeschaltet werden auf "ohne .htaccess (index.php)" oder "ohne .htaccess (index.php?). Die dritte Variante ist die robusteste aber mit dem Nachteil, dass eben "index.php?" hinter der Domain und vor den Pfadangaben in der URL auftaucht.
- Dann könnte hier der Cache eingeschaltet werden. Das hat i.d.R. keinen Einfluss auf die Funktion, macht die Seite aber schneller. Bedenken sollte man dabei aber das das Cachen auch ein Relaod erschwert. Gerade für die Zeit der Entwicklung einer Seiten absolut unpraktikabel.
- Nun wieder der Stolperstein, von dem ich oben schon sprach: Unten auf dieser Seite befinden sich 4 Optionsschalter, davon der erste, "Konfiguration sichern" sollte nach meinen Erfahrungen eingeschaltet sein, denn sonst scheint sh404SEF gewisse Einstellungen nicht wirklich wirksam zu übernehmen. Auch erst dann, wenn dieser Schalter gesetzt ist, kommen die Meldungen zu den evtl. nicht vorhandenen Schreibrechten. An dieser Stelle habe ich bei einem Projekt unendlich viel Zeit verbraten. Warum diese Einstellung von Anfang an auf "Aus" gestellt war, ist mir ein Rätsel.
Wenn SEF Probleme macht
- Zunächst nochmal prüfen, ob der Server alle wichtigen Voraussetzungen mitbringt, die notwendig sind für den sauberen Betrieb von Joomla 1.5.x. Das wird z.B. hier http://help.joomla.org/content/view/1938/302/ veröffentlicht. Wie demgegenüber die eigene Serverkonstellation aussieht kann man einfach erfahren, in dem man im Backend unter dem Menüpunkt "Hilfe" > "Systeminfo" sich die jeweiligen umfangreichen Infos anschaut.
- Dann ist wichtig, zu testen ob der bevorzugte mod_rewrite-Modus unterstützt wird. Hierfür gibt es einen einfach Trick. fügen Sie in Ihre .htaccess-Datei ziemlich weit oben folgende Zeile ein: RewriteRule (.*) http://www.google.com/ [R=301,L] Es ist dann ganz einfach so, dass wenn die .htaccess richtig von Joomla verarbeitet wird, bei jedweder URL unter Ihrer Domain, die Sie eingeben die Seite sofort weiterspringt auf Google - also ein klassische 303-Redirekt. Sollte das nicht funktionieren müssen Sie entweder auf die beiden o.g. Modi ausweichen, oder mit Ihrem Provider in Kontakt treten, dann an dieser Stelle muss der Server entspr. konfiguriert werden. Mitunter wird er Ihnen dann auch Möglichkeiten mitteilen, wie diese notwendigen Anpassung selbst vornehmen können. Wenn Sie selbst die Hoheit auf Ihrem Rechner haben, können Sie natürlich auch selbst den Apachen für mod_rewrite umstellen. Dazu müssen Sie eine Datei httpd.conf suchen und in Ihr die Zeile
LoadModule rewrite_module modules/mod_rewrite.s
rekommentieren.
- Gelesen habe ich auch von etwaigen Problemen bei der Umstellung von php4 auf php5. Auch dazu gibt es vom Provider entspr. Hinweise, die serverabhängig sind und wo Einträge entweder in die .htaccess oder in eine php.ini oder wie auch genannte Datei eingepflegt werden müssen. Diese könnten z.B: so aussehen:
denkbare Eintragungen in die .htaccessAction application/x-httpd-php /cgi-sys/php-fcgi-starter.fcgi
AddType application/x-httpd-php .php3 .php4
Action application/x-httpd-php5 /cgi-sys/php5-fcgi-starter.fcgi
AddType application/x-httpd-php5 .php .php3 .php4 .php5
AddHandler application/x-httpd-php52 .php .php5 .php4 .php3
AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php
AddType php5-cgi .php
AddHandler php5-cgi .php - Schließlich gibt es noch die Möglichkeit mit folgenden zwei Zeilen in der .htaccess zu experimentieren. Zum einen die Zeile #Options +FollowSymLinks. Hier kann das auskommentierende Doppelkreuz entfernt werden. Wer sein Joomla in einem Unterverzeichnis vom www-Root-Verzeichnis betreibt also z.b. www.domain.de/joomla/, der sollte die Zeile # RewriteBase / z.B. ändern in RewriteBase /joomla
- Details
- Öffnen des Verzeichnisses \xampp\apache\conf\,
- öffnen der Datei httpd.conf im Editor
- ca. in der Zeile 118 steht #LoadModule rewrite_module modules/mod_rewrite.so Hier muss die Kommentar-Raute entfernt werden
- Speichern
- Xampp "Neu starten".