Code Snippets Ablage/Verwaltung/Einbindung in Artikel via eine Drupal Instanz, fuer mehrere Sites ?

am 01.02.2009 - 10:55 Uhr in
Hallo, bin neu hier und auch noch recht frisch erst kuerzlich in Drupal 6 eingestiegen.
Der jetzige Stand ist folgender: eine Drupal Instanz, mehrere Sites im Ordner /sites, die ein Theme fuer alle benutzen.
Was ich derzeit suche ist eine Idee oder ein Modul fuer folgende Aufgabe:
Code Snippets Ablage/Verwaltung/Einbindung in Artikel via eine Drupal Instanz, fuer mehrere Sites
Ich beschreibe mal im folgenden erst den Ist-Zustand und daraufhin den Soll-Zustand.
Ist-Zustand:
Bisher nutze ich oft den Eingabefilter PHP um z.B. eine Karte einzubinden, z.B. in einem Artikel fuer Deutschland, in einem anderen fuer die Schweiz. Das ergibt Redundanzen und erhoehten Wartungsaufwand, und ist "dreckig": z.B. koennen sich viele Config Parameter wiederholen (Redundanz) oder die Stelle wovon der Service (die Karte) eingebunden ueber Nacht wechseln (require_once...). Das wuerde bedeuten ich muss z.B. 20 Artikel nachziehen. Da einige Sites dazu noch multi-lingual sind, habe ich mir zeitweise damit beholfen nur einen Artikel zu erstellen, und je nach Sprache den Artikel mit einem Query Parameter aufzurufen, und davon abhaengig die Config zu aendern, damit nicht ganz ein "Schlammfeld von copy-paste-Seiten" entsteht. Dirty?
Soll-Zustand:
Die Moeglichkeit verschiedene Javascript und PHP Code Snippets via Drupal so zu verwalten und zu pflegen, dass diese an EINER ZENTRALEN STELLE liegen, und bspw. dann in Artikel X auf Site A oder Artikel Y auf Site B bei Bedarf eingebunden werden koennen. Dabei waere es sehr nuetzlich, wenn man diese Code Snippets auch noch gleich in Drupal selber editieren/warten koennte (viel wartungsfreundlicher, "FTP Geschubse" entfaellt).
Ein Artikel der dann ein Code Snippet einsetzt koennte dann bspw. nur noch so aussehen:
Hier sehen Sie eine Deutschlandkarte mit aktuellen Verkehrsinformationen.
<?php
// Wie sieht es eigentlich aus bzgl. Namespace-Verschmutzung?
// ggf. noch ein require_once ?
meinePhpFunktionFuerKartenErstellung("de");
?>
Anderes Beispiel fuer einen Artikel der eine Javascript Snippet einsetzt:
Klicken Sie auf ein Faehnchen um den zugehoerigen Wiki Eintrag zu sehen:
<a href="javascript:void(0);" onclick="openWiki(this.irgendwas.value);"><img src=...><...></a>
Man kann das sicher alles irgendwie "fast & dirty hacken", also schlampig loesen. Ein sauberer, wartungsfreundlicher Ansatz ist mir jedoch viel lieber. Gibt es hierfuer ggf. ein Modul (evtl. eins was das leistet aber eigentlich fuer was anderes ist?)? Die Anforderungen sind nochmal kurz zusammengefasst:
- Zentrale Ablage von mehreren PHP und Javascript Code Snippets
- Einbinden der Snippets in Drupal Artikel bei Bedarf, sowohl auf Site A als auch auf B moeglich
- nicht ein Muss, waere aber super: Editieren der Snippets in Drupal moeglich
Ich hoffe ich konnte mich gut genug ausdruecken - und denke nicht etwa zu "verkorkst". Irgendwelche Ideen oder Anregungen werden gerne entgegengenommen :-)
Gruss, Airport1
- Anmelden oder Registrieren um Kommentare zu schreiben
Vlt. nicht so richtig eine
am 01.02.2009 - 11:41 Uhr
Vlt. nicht so richtig eine Antwort.
Aber ich fnde allgemein PHP EVAL nicht ein erstrebenswertes Ziel.
Stattdessen könntest du dir ein Filter Modul schreiben, welches die entsprechenden Snippets reinschiebt.
Aber das ist schon ein bisschen Arbeit.
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.deXING
bzgl. PHP Eval ggf. beide Augen zudruecken ;)
am 01.02.2009 - 12:38 Uhr
dass PHP Eval an fuer sich nicht so toll ist, ist sicher richtig. In dem Fall gehts aber drum, moeglichst schnell moeglichst viele Demo-Seiten verschiedener Produkte fuer verschiedene Laender und Sprachen zu bauen (d.h. grosse Redundanz von einzubindendem Code, wenn man es nicht "zentralisiert").
Ggf. wird man (aufgrund des Zeitdrucks) bzgl. PHP Eval beide Augen zudruecken muessen ;)
PS: Selber ein Modul zu entwickeln ist wahrscheinlich etwas muehselig, oder? Wieviel "Overhead" muss man denn fuer sowas einplanen?
page.tpl.php des Themes als "Zentralablage"?
am 02.02.2009 - 00:07 Uhr
Hm mir faellt dann sonst nur noch ein, die PHP/Javascript Snippets irgendwo im Theme zu verankern, z.B. in die page.tpl.php? Ist zwar ggf. suboptimal, aber es scheint ja keine bessere Loesung oder gar ein Modul hierfuer zu geben, oder?
PS: Gibts ggf. ein Modul womit man auch die page.tpl.php in Drupal bearbeiten kann? Dann entfaellt das "FTP Geschubse" ;)
Keine schoene Loesung, aber die einzige?
am 02.02.2009 - 11:53 Uhr
Moegliche - wenn auch "dirty hack" - Loesung: Hab die Code Snippets jetzt in der template.php vom Theme abgelegt. Den Code kann man dann im Artikel einfach aufrufen, wenn man dazu auch php eval nutzen muss. Ist zwar keine schoene Loesung, aber sie scheint zu funktionieren.
Anregungen fuer eine bessere Loesung sind natuerlich gerne erwuenscht :)
template.php taugt leider
am 02.02.2009 - 13:49 Uhr
template.php taugt leider irgendwie nicht als Ablage:
Fuege ich dort bspw. eine Funktion ein
function snippet1() {
return "snippet1";
}
und binde es im Artikel ein, z.B. mit:
<?php
echo snippet1();
?>
habe ich derzeit das Problem, das oft anfangs die Funktion zwar aufgerufen werden kann und der Artikel im VIEW Modus brav "snippet1" ausgibt, aber bei weiterem Updaten des Artikels ist die Funktion dann anscheinend nicht mehr da/verfuegbar, es wird nur eine weisse Seite ausgegeben.
Unter Site Building ist Caching schon komplett abgeschaltet, dennoch bleibt dieses Verhalten. Wie kann man das abstellen, bzw. kann es sein dass trotzdem das template.php gecached wird und ggf. so dass nur bestimmte Funktionen dabei "ueberleben"? Oder sollte ich die Snippets sowieso lieber wo anders ablegen?
Nun wirds noch "dreckiger": jetzt landen die Codes in ner extra-Datei die in /includes/common.inc eingebunden wird. das tut, auch wenns alles andere als sauber geloest ist ;)