In einem meiner größten (im Sinne von umfangreich, nicht von großartig
) eigenen Projekte nutze ich Joomla und WordPress parallel. Wer dies auch tut (den Kommentaren zu meinem Modul zufolge bin ich damit ja nicht ganz alleine) oder in Zukunft aus diversen Gründen vorhat, hat unter Umständen auch Interesse daran, dass das Layout der Joomla-Seite mit dem der WordPress-Seite identisch ist.
Als Joomla auf besagtem Projekt noch in Version 1.0.x lief, hatte ich das Joomla-Template recht umständlich umkonvertiert, damit es beim WordPress annähernd gleich aussah.
Soviel Arbeit wollte ich mir aber nicht nochmal machen, da jede einzelne Änderung im Joomla-Template eben auch im WordPress angepasst werden musste und so suchte ich eine andere Lösung, die ich dann auch fand (sonst würde es ja dieses Posting nicht geben
)
Die Konstellation bei dem Projekt ist folgende: Joomla im FTP-Root installiert, WordPress im Unterverzeichnis "blog". Die folgende Beschreibung bezieht sich auch darauf. Wenn es bei euch anders aufgebaut ist, müssen manche Sachen natürlich angepasst werden…
Im Prinzip ist es ganz einfach:
In kurz:
- Ihr erstellt euch im Joomla eine Dummy-Seite mit Platzhaltern für Content und Sidebar
- per Cronjob wird diese Dummy-Seite geladen etwas prepariert und manipuliert
- das Ergebnis wird in ein spezielles Verzeichnis gespeichert (man könnte fast schon sagen: gecached), von wo aus das WordPress-Theme es sich dann holt
- im WordPress-Theme wird weitgehend auf header und footer verzichtet, statt dessen wird dort das gecachte Joomla-Template geladen
Fertig.
Und nun nochmal ausführlich:
1. Ihr erstellt im Adminbereich der Joomla-Installation einen neuen Artikel, z. B. mit dem Namen "Blog Dummy". Der Inhalt des Artikels sollte nicht leer gelassen werden. Statt dessen könnt ihr einfach einen Text nehmen, der sonst nirgends auf der Seite und im Quelltext auftaucht, z. B. ##BLOGDUMMYCONTENT## (unformatiert natürlich).
Der Artikel wird gespeichert und veröffentlicht.
2. Der eben erstellte Artikel sollte in irgendeinem (möglichst nicht für den normalen User sichtbaren) Menü verlinkt werden. Ich habe mir dafür (und für diverse "Spezialfälle") extra ein Menü im Joomla-Backend erstellt, was in keinem Modul o.ä. auftaucht. Es dient lediglich dazu, die Zuweisung bestimmter Module auf bestimmte Seiten zu ermöglichen. Aus genau dem Grund wird die Verlinkung im Menü benötigt.
3. Ihr erstellt euch ein neues Modul vom Typ "Custom HTML". Der Inhalt ebenfalls wieder ein uniquer String, z. B. ##BLOGDUMMYSIDEBAR## (natürlich wieder unformatiert)
Veröffentlicht wird das Modul ohne Titel. Bei der "Menu Selection" wählt ihr den eben im versteckten Menü verlinkten Artikel. Nur dort sollte das Modul veröffentlicht werden. Die Position ist jene, wo später im WordPress eure Sidebar stehen soll.
Das wars schon im Joomla. Jetzt gehts weiter zum Cronjob. Wenn ihr bei eurem Server/Webspace keine Möglichkeit für Cronjobs habt, gibt es im Internet einige Dienste, die das für euch übernehmen.
4. Erstellt euch im Hauptverzeichnis der Joomla-Installation ein Verzeichnis "cronjobs".
In dieses Verzeichnis kommt ein weiteres Unterverzeichnis namens "blogtemplate_prepared". Dieses Verzeichnis bekommt dann Schreibrechte, d.h. am besten 777 (per FTP-Client oder per Shell setzen).
In das Verzeichnis "cronjobs" kommt eine PHP-Datei mit folgendem Inhalt (der natürlich angepasst werden muss):
<?php
// hier natürlich die URL einsetzen, unter der euer Blog-Dummy im Joomla zu finden und aufrufbar ist
$content = file_get_contents(‘http://www.euredomain.de/blog-dummy.html‘);// an der Stelle, wo der Content später hinsoll, wird jetzt erstmal geteilt
$layout_joomla = explode(‘##BLOGDUMMYCONTENT##", $content);$header = $layout_joomla[0];
$footer = $layout_joomla[1];// Datei für den Header schreiben
$fp = fopen( dirname(__FILE__) . ‘/blogtemplate_prepared/header.html", ‘w" );
fwrite( $fp, $header );
fclose( $fp );// Datei für den Footer schreiben
$fp = fopen( dirname(__FILE__) . ‘/blogtemplate_prepared/footer.html", ‘w" );
fwrite( $fp, $footer );
fclose( $fp );?>
Gespeichert wird die Datei im Verzeichnis cronjobs unter dem Namen blogtemplate_generieren.php
Jetzt könnt ihr das Script erstmal manuell aufrufen und schauen, ob die Dateien header.html und footer.html im Verzeichnis cronjobs/blogtemplate_prepared auch wirklich generiert wird.
Geht alles gut, tragt ihr bei einem Dienst eurer Wahl einen stündlichen Cronjob ein, der das PHP Script aufruft, z. B. www.euredomain.de/cronjobs/blogtemplate_generieren.php
Jetzt haben wir das Layout aus dem Joomla schon "extrahiert" und fast einsatzbereit fürs WordPress. Weiter gehts…
5. Ihr kopiert euer aktuelles WordPress-Template nochmal neu auf den Server und benennt in der Datei style.css des Themes die Zeile 2 um, z. B. von
Theme Name: WordPress Default
in
Theme Name: WordPress Joomla Combination
Dieser Schritt ist nötig, damit ihr das neue Template auch im WordPress-Adminbereich auswählen könnt.
6. Jetzt gehts an die Datei header.php und footer.php des Themes.
In die Datei header.php kommt z. B. folgendes:
<?php
global $layout_joomla;// der Pfad zur vorhin via Cronjob erstellten Template-Cache-Datei
$header_joomla = file_get_contents( dirname(__FILE__) . ‘/../../../../cronjobs/blogtemplate_prepared/header.html");// Titel generieren, zwischen ob_start() und $wp_title = ob_get_contents(); kommt der Code, der in der Datei header.php ursprünglich zwischen <title> und </title> steht
ob_start();
optimal_title();
if ( is_single() ) { ?> – <?php } ?> <?php bloginfo(‘name");
$wp_title = ob_get_contents();
ob_end_clean();// Stylesheet des Blogs noch mit ergänzen
ob_start();
echo ‘<link rel="stylesheet" href="‘;
bloginfo(‘stylesheet_url");
echo ‘" type="text/css" media="screen" />";
echo ‘<link rel="pingback" href="‘;
bloginfo(‘pingback_url");
echo ‘" />";
wp_head();
$wp_head = ob_get_contents();
ob_end_clean();$header_joomla = preg_replace("/<title>(.*)<\/title>/", ‘<title>" . $wp_title . ‘</title>", $header_joomla );
$header_joomla = str_replace(‘<meta name="generator" content="Joomla! 1.5 – Open Source Content Management" />", $wp_head, $header_joomla);
echo $header_joomla;
?>
Das wars, mehr kommt in die header.php nicht rein (also keine sonstigen HTML-Tags, kein body-Tag usw.). Natürlich könnt ihr hier auch noch sonstigen Kram ersetzen, z. B. andere Meta-Tags o. ä.
In die Datei footer.php kommt folgendes:
<?php
// der Pfad zur vorhin via Cronjob erstellten Template-Cache-Datei
$footer_joomla = file_get_contents( dirname(__FILE__) . ‘/../../../../cronjobs/blogtemplate_prepared/footer.html");ob_start();
get_sidebar();
$sidebar = ob_get_contents();
ob_end_clean();$footer_joomla = preg_replace("/##BLOGDUMMYSIDEBAR##/", $sidebar, $footer_joomla );
echo $footer_joomla;
?>
Auch hier keine sonstigen HTML-Tags, das wird alles von der Cache-Datei übernommen.
7. Jetzt das Template im WordPress-Adminbereich anschauen und aktivieren (wenn alles schick ist)
8. Jetzt noch nen Link im Joomla-Adminbereich zum Blog setzen (sofern noch nicht vorhanden)..
… und das wars.
Im Großen und Ganzen nicht schwer, durch viele verschiedene mögliche Konstellationen der CMS kann hier und da etwas mehr Einsatz erforderlich sein, mehr Code ersetzt werden usw. Auf alles hier einzugehen würde aber den Rahmen sprengen.
Viel Spaß damit
3 Kommentare
Sehr schönes Tutorial, aber ich denke soweit kommt es bei mir nicht das ich mir die Arbeit mache ^^. Dennoch denke ich das es für einige hilfreich sein wird.
Das hoffe ich doch
i cant to read the lang, but i think the code is very useful to help me, thank you!