Headerbild automatisch anhand Menüpunkt laden
am 11.05.2008 - 12:48 Uhr in
Hallo Forum,
folgendes Problem:
ich möchte gerne eine Homepage erstellen, die für jeden Menüpunkt ein eigenes Bild verwendet.
Prizipiell gibt es hier ja die Möglichkeit über das Modul "headerimage" oder aber über verschiede Blöcke zu arbeiten.
Tja, nun ist mein Problem aber, dass Nutzer selber neuen Content und neue Menüpunkte anlegen können sollen. Es ist aber nicht realistisch, dass die dann zusätzlich in die Blockverwaltung gehen oder über das headerimage-Modul Anpassungen machen.
Was ich suche wäre optimalerweise ein Modul, dass beim Bearbeiten von Contentseiten über ein neues Feld die Möglichkeit gibt, ein Bild für den Header auszuwählen und gegebenenfalls hochzuladen. Verwende den FCKeditor und das dortige Bildmodul ist den Nutzern z.B. bekannt.
Alternativ könnte ich mir vorstellen das Bild automatisch entsprechend dem Seitentitel oder einer sonstigen festen Größe aus der Seitendefinition zu verwenden (z.B. URL-Alias).
Also: Nutzer legt z.B. die neue Seite "Dies ist meine erste Seite" mit dem URL-Alias "meine_erste" an und lädt über den Bildeditor von FCKeditor das Bild meine_erste.gif hoch.
Wie würde ich jetzt den Header in der page.tpl.php definieren (verwende Drupal 6.2) damit dieser automatisch das richtige Bild einsetzt??
Oder, wie würdet ihr das machen, damit das möglichst einfach für unbedarfte Nutzer funktionieren könnte?
Gruß und schöne Pfingsten!
Kai
- Anmelden oder Registrieren um Kommentare zu schreiben

Mehrere Möglichkeiten
am 12.05.2008 - 16:41 Uhr
Hallo Kai,
es gibt bei Drupal ja immer viele Wege, etwas realisieren zu können.
Für einen relativ einfachen Weg über CCK und CCK-Blocks fehlt leider noch ein entsprechendes, stabiles Modul für Drupal 6. image_field ist noch nicht mal im dev-stadium. Dafür gibt es ein neues Feld für das IMCE-Modul (leider erst dev). Wenn Du das Risiko eines unfertigen Moduls eingehen möchtest, dann geht es so:
Bild-Feld erstellen, aber Anzeige deaktivieren. Im Template eine eigene Region erstellen und in diesem per CCK-Block das Bild-Feld hinein schieben. Die Region-Variable dann in der page.tpl.php platzieren.
Eine weitere Möglichkeit würde das Mopdul contemplate bieten. Mit diesem Modul kann man Einfluß auf die $content-Variable nehmen, die in der page.tpl.php angezeigt wird. Dort ließe sich dann z.B. das Image-Modul "verbiegen", in dem man dort auf die Anzeige von
$node->images['_original'](oder thumbnail, preview, eigener Typ) verzichtet und stattdessen auf folgende Art an gewünschter Stelle einbindet:<?php if ($node->type == "image") { print theme('image', $node->images['_original']);}?>.(Korrektur: $node-pictures war falsch und ich habe die theme-funktion zum Rendern eingefügt. Ansonsten wird nur der Path zum Bild ausgegeben, was auch hilfreich sein kann).
Dieser Weg hat den Nachteil, daß das Image-Modul damit an eine Funktion "gebunden" ist.
Der Vorteil der beiden Methoden ist eine Drupalseitige Verarbeitung der Bilder inklusive Ihrer Größen.
Bezüglich der Aufgabe, Bilder in einem Header unterzubringen, ist vllt. auch ein CSS-Hintergrund sinnvoll.
Dafür kann man verschiedene kleine Programmier-Logik-Wege beschreiten, die eine CSS-Anweisung in den Header schreiben.
Eine Möglichkeit wäre z.B. die zu nutzenden Bilder eine node-abhängige Kodierung über die Variable $node-nid zu geben, die der Nutzer dann anwenden muss (z.B. node3.png). Wenn Path benutz wird, kann man den angemeldeten Benutzern zu Not die Node-Id per Block oder per page.tpl.php anzeigen lassen.
Die wichtigstes Frage auch bezüglich deiner Idee, das ganze per Path-Information zu regeln, liegt darin, was man Deinen Benutzern zumuten kann an Komplexität? Wenn dies eher gering ist aber eine gewisse Stabilität gewünscht wird (Vorsicht mit den Dev-Modulen), dann kann man noch eine Strategie finden und programmieren, die oben beschriebene Bequemlichkeit mit sich bringt, solange die CCK-Möglichkeiten für Drupal 6 noch nicht ausgereift sind.
Das sind meine ersten Ideen dazu.
Bis dann,
Carsten
Hallo Carsten, ich bin
am 13.05.2008 - 10:47 Uhr
Hallo Carsten,
ich bin Beeindruckt von deiner Antwort und den dort gezeigten vielfältigen Möglichkeiten.
Herzlichen Dank dafür!!!
Ja, mein Hauptproblem ist, dass den Nutzern wirklich nicht viel zuzumuten ist - die werden schon mit der "normalen" Content-Bearbeitungsseite "gut zu tun haben". Deshalb bin ich auf der Suche nach einer möglichst einfachen Lösung in Bezug auf die Anwenderfreundlichkeit!
Ich werde mir auf jeden Fall mal den Weg über contemplate-Modul anschauen.
Eine CSS-Lösung, wie z.B. in einem erst kürzlich erschienen Beitrag im gleichen Forum kann ich leider auch nicht gehen, da ja der User dann u.U. selbst neue CSS-Einträge zufügen müsste - was mit Sicherheit scheitern würde!
Könntest du für mich den letzten Punkt mit der node-abhängigen Kodierung etwas genauer ausführen? Das ist mir noch nicht ganz klar.
Ansonsten überlege ich, dass ja gerade die CCK-Lösung recht genial wäre. Vielleicht sollte ich einfach die Seite doch mit Drupal 5.x erstellen?!
Hmm, werde das auch mal testen.
LG
Kai
Node-ID abhängige CSS-Anweisung
am 13.05.2008 - 13:07 Uhr
Hallo Kai,
wegen den vielen Möglichkeiten mag ich Drupal ja so gerne. Allerdings erschweren die vielen Möglichkeiten einerseits den Einstieg ins System und die konkrete Hilfe hier im Forum. Man kann ja immer nur bei Dingen helfen, die man selbst verstanden hat. Teilweise sind wir hier aber auf unterschiedlichen Wegen unterwegs :-)
Eine CSS-Lösung, wie z.B. in einem erst kürzlich erschienen Beitrag im gleichen Forum kann ich leider auch nicht gehen, da ja der User dann u.U. selbst neue CSS-Einträge zufügen müsste - was mit Sicherheit scheitern würde!
Das habe ich schon bedacht. Ich würde die Steuerung der CSS-Informationen ja auch per PHP steuern. D.h. User kann Bild hochladen. Und im Template wird das Bild automatisch dort per CSS eingebunden, wo es gebraucht wird.
Das führt mich zu Deiner nächsten Frage:
Könntest du für mich den letzten Punkt mit der node-abhängigen Kodierung etwas genauer ausführen?
So etwa in diese Richtung:
<style type="text/css" media="all">#custom_header_div {background: url(pfad_zu_user_bildern/evtl_praefix_<?php print $node->nid ?>oder_ergaenzung.png)} </style>Anpassen und einfügen in der page.tpl.php hinter dem Einfügen der $styles-Variable.
Man könnte sogar per PHP auch in einem speziellen Verzeichnis des Autors suchen lassen oder abfragen, ob das Bild überhaupt da ist usw.
Wenn man z.B. CSS-Anweisungen vom überordneten Menü-Punkt abhängig machen will, kann man dies per Datenbank-Abfrage auch realisieren usw.
Diese Lösungen bremsen aber das CMS schon ein wenig aus. Da die Variable $node ohnehin schon geladen ist, ist die beschriebene Lösung relativ effizient. Vielleicht solltest Du noch eine IF-Bedingung (siehe anderen Kommentar von mir) um das ganze setzen (z.B.
<?php if (node->type == "page") { ?> obiger code <?php } ?>), wenn die verwendete page.tpl.php noch für andere Seiten benutzt wird.Bis dann,
Carsten
Hallo Carsten, super, so
am 13.05.2008 - 16:27 Uhr
Hallo Carsten,
super, so werde ich es versuchen!
Sehe ich das richtig, dass der Rückgabewert von $node->nid die ID der Content-Seite ist (also die fortlaufende Zahl, die ohne URL-Alias hinter dem www.domain.de/node/X angegeben wird)?
Prizipiell ist diese Lösung für mich genau das was ich brache, da der Nutzer auf der Seite ja mehrfach angezeigt bekommt, wie diese nid lautet und dann nur bei der Benennung der neuen Bilder aufpassen muss ;-)
Herzlichen Dank und Gruß!
Kai
/node/$node->nid
am 13.05.2008 - 21:19 Uhr
Sehe ich das richtig, dass der Rückgabewert von $node->nid die ID der Content-Seite ist (also die fortlaufende Zahl, die ohne URL-Alias hinter dem www.domain.de/node/X angegeben wird)?
Kurz und bündig: Ja.
Modul Header image
am 14.05.2008 - 10:34 Uhr
Du könntest aber auch das Modul Header Image nutzen - wenn du "Lesbare URLs" verwendest, ist die Konfiguration auch für unerfahrene Benutzer recht einfach..
http://drupal.org/project/headerimage
Gruss,
SteffenR
Hallo Steffen, danke, diese
am 14.05.2008 - 11:07 Uhr
Hallo Steffen,
danke, diese Erweiterung wurde ja auch schon von Carsten genannt - da ist im Moment nur der dev-Status hinderlich. Ich werde dieses Modul aber auf jeden Fall im Auge behalten und jetzt die Lösung wie zuvor angeführt erst einmal nutzen.
Danke euch!!
Kai
Modul: Headerimage
am 14.05.2008 - 17:56 Uhr
Das besagte Modul war mir nicht bewußt bei meiner ersten Überlegung. Ich habe mich aber auch nicht auf die Suche danach begeben.
Es sieht nach einer weiteren – vor allem sehr flexiblen – Möglichkeit aus. Ich werde mir das Modul mal näher anschauen und seine Entwicklung beobachten. Da die letzte D6-dev-Version vom 09.05.08 ist, ist die Entwicklung vielleicht auch im vollen Gange.
Ich wäge den Einsatz von Modulen immer sehr sorgfältig ab, da ich mich damit in eine Abhängigkeit begebe. Es gibt teilweise Module auf drupal.org, deren einzige D5-Version ein über 12 Monate alter Development-Snapshot ist. Da bin ich dann sehr skeptisch, ob dann eine stabile D6-Version bald fertig wird.