Theming für angehängte Bilder im Teaser u. in Views
am 07.04.2009 - 21:29 Uhr in
Angehängte Bilder werden in Drupal in der Beitragsvorschau (Teaser) rechts unten angezeigt und nach dem Text.
Ich möchte das für den Teaser (Beitragsvorschau) ändern, dass das Bild zuerst kommt und rechts daneben der Text. Das soll für bestimmte Content Typen geändert werden.
Jetzt ist die Frage, wo man hier ansetzt und welche Templates man überschreibt: Ein Template vom Modul views überschreiben? Habe mir alle angesehen, da gibt es keinen Bereich, wo Attachements ausgegeben werden, alles spielt sich in
<?php print $rows; ?>
ab, auch die Attachements, also die angehängten Bilder, scheinen dort drinnen ausgegeben zu werden.
Kann man da trotzdem noch tiefer reingehen und eine tpl.php für die entsprechenden Views erstellen, damit das angehängte Bild vor dem Text und der Text rechts davon ausgegeben wird?
Oder ist der Startpunkt für diese Änderung das Upload-Modul? Dieses Modul hat leider keine Template Dateien (tpl.php).
Oder ist der Startpunkt für diese Änderung das Template für Nodes allgemein? Dort habe ich nichts über Attachements gefunden.
Bitte um Tipps oder eine Lösung.
vielen Dank.
- Anmelden oder Registrieren um Kommentare zu schreiben

node.tpl.php
am 07.04.2009 - 22:04 Uhr
Moin!
Mach mal in Deiner node.tpl.php oder node-<Typ>.tpl.php ein
<?php drupal_set_message('<pre>'. print_r($node, 1) .'</pre>'); ?>.Dann siehst Du alles, was im Node-Objekt enthalten ist.
Mit diesen Informationen kannst Du dann die entsprechenden Daten an der gewünschten Stelle ausgeben.
hth,
Stefan
Wie geht es weiter?
am 07.04.2009 - 22:09 Uhr
Danke!!
Genau das habe ich in der Views-Doku gelesen. Aber wie geht es dann weiter?
Einfacher wäre es doch, man müsste nur eine bestehende tpl.php hernehmen, wo das enthalten ist, und dann an der Reihenfolge und am Styling etwas ändern. Gibt es in dieser tiefen ebene keine Default-Templates? Oder was ist der Grund, warum ich das nirgendwo finde, wo die attached Bilder ausgegeben werden im Teaser eines Nodes, eines Views und im Content eines Nodes?
Was genau muss ich dann weiter machen?
Wo ist das Theming für das Attachment?
am 07.04.2009 - 22:20 Uhr
Wenn ich
<?phpdrupal_set_message('<pre>'. print_r($node, 1) .'</pre>');
?>
in die node.tpl.php eingebe, erhalte ich ein riesiges Arry über mehrer hundert Zeilen mit vielen Infos (auch die ganzen Arrayfelder der Views), aber nichts über das angehängte Bild (attachment). Gar nichts.
node.tpl.php
am 07.04.2009 - 22:48 Uhr
Wie bereits gesagt: Du siehst dann alle Daten des Node-Objektes. Inklusive der Dateien.

Ich hab das Node-Objekt jetzt mal bei mir mit der Funktion
dsm()(devel.module) ausgegeben:Da haben wir doch ein schönes Array mit sämtlichen an das Node-Objekte angehängten Dateien. Diese können jetzt ganz einfach über die Funktion theme_upload_attachments() an beliebiger Stellen in der node.tpl.php ausgegeben werden.
hth,
Stefan
Eine Ebene zu tief
am 07.04.2009 - 22:54 Uhr
Danke.
So weit war ich auch schon, habe mir das schon zuvor im Modul upload.module angesehen. Aber hier ist man schon eine ebene zu tief, hier kann ich nur noch verändern, welche Info vom Attachment ausgegeben werden soll.
Ich will aber das Attachement so belassen, wie es ist, es aber weiter nach vor schieben, also vor den Content.
In der node.tpl.php ist nirgendwo ein Code dafür!!!! Und daher kann ich ihn auch nicht nach vor verschieben. Wenn ich hier in der node.tpl.php wie Du schreibst an beliebiger Stelle was ausgeben, dann würde das Image doppelt im Node erscheinen!!!
Daher bleibt noch die Frage: Wo wird das derzeit ausgegeben an welcher Stelle im Node und wie kann ich es dort wegtun und weiter nach vor rücken, vor dem Content-Text?
Merci.
node.tpl.php
am 07.04.2009 - 23:05 Uhr
Ich zitier mich mal selbst: "Mit diesen Informationen kannst Du dann die entsprechenden Daten an der gewünschten Stelle ausgeben.".
Soll heissen: alle Daten. Also alles das, was normalerweise in
$contentdrinsteht, gibst Du jetzt selbst aus.Stefan
Oder anderst ausgedrückt.
am 08.04.2009 - 00:06 Uhr
Oder anderst ausgedrückt. Du musst dir alles das was sonst in $content ausgegeben wird, direkt in der node.tpl.php aus den gewünschten Variablen zusammensetzen.
Sehr gut ist auch das Modul Contemplate. Damit kann man sich auch alles anzeigen lassen. Es werden alle Variablen und und dessen Kind-Arrays mit Inhalte ausgeben. Dann kann man sich entscheiden welche Variablen für die Ausgabe am besten ist. Also ob nur der reine Wert oder gleich mit eingebettenen HTML -Code und bereinigt.
Wobei ich die Variante mit:
<?phpdrupal_set_message('<pre>'. print_r($node, 1) .'</pre>');
?>
besser finde.
--------
Active-Media-Production
Individual Web Development and Design
Wo ist der Code, wo Attachments im Node angehängt werden???
am 08.04.2009 - 09:24 Uhr
Ich will aber nicht $content selbst neu ausgeben, das ist doch ein voller Eingriff in Drupal. Hier was zu verändern ist nur dann sinnvoll, wenn man eine tpl.-Datei hat, die genau dies ausgibt in seinen Einzelteilen und man dann diese tpl anpasst und die Einzelteile in der Reihenfolge verschiebt. Das will ich machen und nicht mehr. Keinesfalls den ganzen $content selbst ausgeben ohne, dass ich mehr als eine kleine Verschiebung machen muss. Es geht hier nämlich nicht nur um einen einzigen Content-Typ sondern um alle, da überall Bilder angehängt werden können. Dies bedeutet, dass ich mit $content so gut wie alles was im Contentbereich ausgegeben wird, verändere. Nein, das ist zu viel.
Es muss doch eine Stelle geben im upload-Modul oder im image-Modul oder einem anderen Modul, wo das angehängte Bild zum Content hinzugefügt wird. Und diese Stelle will ich überschreiben, egal ob nun mit einem Template oder einer Funktion (lieber wäre mir tpl). Und dann gebe ich einfach das Attachment vor dem Content aus, also eine reine Verschiebung (statt $output = $content.$attachment --> $output = $attachment.$content, das ist prinzipell das, was zu tun ist, real etwas anders aber ähnlich).
Wo ist diese Stelle nur?
Ähm ... trau mich fast
am 08.04.2009 - 11:45 Uhr
Ähm ... trau mich fast nicht, das dazu zu schreiben, weil es so banal ist ... warum packst Du Dein Bildfeld nicht einfach in der Felder-Verwaltung Deiner Inhaltstypen vor Deinen Text?
Dann lässt Du das Bild mit CSS floaten und fertig ist ...
Dafür musst du weder deine node.tpl.php ändern, noch sonst irgendwelche Verrenkungen anstellen.
-------------------------------------------------------------------------------
Drupal ist das "Coolste", was mir in 10 Jahren Webworking untergekommen ist!
Meine persönliche Drupal Spielwiese
Ja, das dachte ich gestern auch
am 08.04.2009 - 12:22 Uhr
Es geht aber um die vordefinierten Inhaltstpyen, dort kann man zwar die Felder in der Reihenfolge erstellen, wie es dann unter "Inhalt erstellen" - "irgendein Typ" erscheint, aber nicht, wie das Endergebnis, die erstellte Seite aussehen soll.
Dies müsste nämlich unter "Felder anzeigen" eingestellt werden, hier findet man aber nur den Satz
"Für diesen Inhaltstyp sind keine Felder konfiguriert. Neue Felder können auf der Felder verwalten-Seite hinzugefügt werden."
Ist ja auch klar, ich habe ja nicht das Attachment dem Inhaltstyp hinzugefügt unter diesem Menüpunkt, sondern die Attachments sind automatisch dazugekommen durch das Modul Upload oder Image oder Image Attach oder so ähnlich.
Man muss unterscheiden zwischen "Dateianhänge" - darum geht es nicht, das ist ein anderes Modul, ich will keine Dateien anhängen, sondern ein Bild in/vor/nach den Text einfügen und zwar als Attachment - und zweitens "Angehängte Bilder" - genau darum geht es! Und die angehängten Bilder kann man nicht verschieben!!!!
Welche Lösung gibt es daher wirklich?
Das kannst du alles mit dem
am 08.04.2009 - 12:27 Uhr
Das kannst du alles mit dem Mpdul Contemplate machen.
http://drupal.org/project/contemplate
--------
Active-Media-Production
Individual Web Development and Design
Contemplate - verschieben der angehängten Bilder?
am 08.04.2009 - 12:36 Uhr
Ja, danke!!!
Das habe ich installiert und verwende es zusammen mit dem FlashVideo-Modul, wo ich im Teaser [thumbnail] ausgebe.
Allerdings wie soll das hier gehen?
Wie spreche ich das angehängte Image an?
Und wie erreiche ich vorallem , dass das Modul das Image dann unten nicht noch ein zweites Mal ausgibt???
Content Template - verschieben der angehänten Bilder vor d. Text
am 08.04.2009 - 12:49 Uhr
Das kannst du alles mit dem Mpdul Contemplate machen.
http://drupal.org/project/contemplate
Aber ich glaube, Du hast recht, es dürfte damit gehen, ich experimentiere gerade und suche die richtigen Variablen um einen neuen Teaser zusammenzustellen, der
<?phpprint $teaser
?>
ersetzt.
Danke an PowerMan - Content Template einfach genial
am 08.04.2009 - 16:46 Uhr
Danke an PowerMan!
Content Templates sind genial uns so einfach ist es nun:
<?php print $node->content['image_attach']['#value']; ?><?php print $node->content['body']['#value']; ?>
statt
<?php print $teaser ?>und mit CSS
.view-front-topnews .image-attach-teaser {
float:left;
margin-left:0px;
margin-top:10px;
margin-right:25px;
margin-bottom:10px;
}
.view-front-topnews .image-attach-teaser img {
border:1px dashed #000000;
padding:5px;
}
erhält man ein sehr schönes Ergebnis, wo das angefügte Bild links vom Beitrag angezeigt wird und mit einem tollen Rahmen umgeben ist.
Merci.
Unglaublich einfache Lösung: angehängte Bilder im Teaser u Views
am 08.04.2009 - 18:41 Uhr
Es ist einfach unglaublich, wie kompliziert wir alle zusammen (ich auch) gedacht haben, dabei gibt es eine noch viel einfachere Lösung, obwohl die Lösung mit Content Templates auch einfach ist:
Einfach unter Verwalten .. Inhaltstypen bei den Einstellungen eines Inhaltstyps unten bei "Einstellungen für Bildanhang" den Wert für "Bildreihenfolge im Anrisstext" auf einen negativen Wert setzen (z. Bsp. -5).
Und dann noch mit CSS formatieren (float: left, etc, wie oben).
SO EINFACH, aber keiner hat daran gedacht.
Drupal ist genial.
Dann kann man aber nicht so gut mit CSS formatieren, wenn man zusätzlich auch noch Kategorien bei den Artikeln verwendet (Taxonomie). Dann kann man per CSS nur alle Node aller Contentbereiche links floatend formatieren aber nicht selektiv. Daher ist die Variante mit Content Template mächtiger, hier kann man umhüllend auch noch jeweils eine div-Klasse ausgeben und schon ist das gelöst.
div (Klasse) bei Kategorien fehlt
am 08.04.2009 - 18:52 Uhr
Warum liefern Kategorien (Taxonomie) eigentlich keine eigene Klasse (
<div>) im Node oder im Contentbereich des Nodes?Um Rechnenleistung und
am 09.04.2009 - 10:05 Uhr
Um Rechnenleistung und Arbeitsspeicher zu sparen kannst du Contemplate auch nur dafür nutzen um dir die Variablen raus zu suchen. Und diese dann in die richtige Templatedatei (node.tpl.php) ausgeben. So muss Drupal nicht erst das modul laden, die ganzen Sachen parsen, die Variablen neu zusammenstellen.
Hier musst du nur aufpassen, das die Variablen nicht ausgegeben werden, wenn Sie auch keinen Inhalt enthalten. Dadurch kannst du dann das überflüssige drumherum auch weglassen.
Es gibt für den gleichen Inhalt immer mehrere Variablen. Mit eingebetteten HTML-Code, ohne HTML, überprüft (Filter) und nur die reine Benutzereingabe. Da musst du gucken was die Variablen enthalten, wenn nix drin steht. Sind Sie vollständig leer, also auch ohne den umgebenen HTML-Code kannste einfach nur ausgeben.
Terms kannst du dir mit folgendem Code auseinanderbauen und gestalten:
<?phpif (is_numeric($node->nid) && $page!=0) {
$terms = taxonomy_node_get_terms($node->nid);
$items = array();
$items_tag = array();
foreach ($terms as $term) {
$items[] = l($term->name, 'taxonomy/term/'. $term->tid);
}
if (!empty($items)) {
print '<div class="taxonomy-terms">'.theme('item_list', $items).'</div>';
}
}
?>
--------
Active-Media-Production
Individual Web Development and Design
Wozu dient dieser Code?
am 09.04.2009 - 16:46 Uhr
Wozu dient dieser Code?
Damit kannst dir innerhalb
am 09.04.2009 - 18:08 Uhr
Damit kannst dir innerhalb einer node.tpl.php alle Terms ausgeben lassen.
--------
Active-Media-Production
Individual Web Development and Design
Node-Layout komplett verschieben?
am 15.04.2009 - 19:46 Uhr
Neuen Thread gestartet: hier
Hallo, an dieser Stelle
am 29.06.2009 - 13:55 Uhr
Hallo,
an dieser Stelle würde ich mich gerne einklinken.
Einfach unter Verwalten .. Inhaltstypen bei den Einstellungen eines Inhaltstyps unten bei "Einstellungen für Bildanhang" den Wert für "Bildreihenfolge im Anrisstext" auf einen negativen Wert setzen (z. Bsp. -5).
Wo genau finde ich diese Einstellung? Sehe ich bei meinen Inhaltstypen nach, ist nichts dergleichen zu finden.
Vielen Dank einstweilen!
Ja das würde mich auch
am 29.06.2009 - 14:20 Uhr
Ja das würde mich auch einmal interessieren wo diese Einstellung sein soll. Kann vieleicht sein, das du ein spezielles Modul installiert hast. Nach Möglichkeit bitte mit Screeshot posten und falls du ein spezielles Modul verwendet hast, welches diese Konfiguration erlaubt auch den Pfad dorthin.
Dank wenns auch leichter geht
--------
Active-Media-Production
Individual Web Development and Design
Einstellungen für Bildanhang
am 01.07.2009 - 11:09 Uhr
Der Pfad dorthin:
/admin/content/node-type/story
(story ist der Inhaltstyp mit dem Namen "Artikel", geht aber bei jedem Inhaltstyp).
Und dort auf "Einstellungen für Bildanhang" klicken.
Module: Image, Image attach, Upload
Ich hoffe, das hilft weiter.
Aha, da liegt der Haken, du
am 01.07.2009 - 11:52 Uhr
Aha, da liegt der Haken, du hast das Modul Image installiert. Soweit ich das hier verstanden habe, wurde hier das Modul CCK Image verwendet. Und dort geht das ganze nämlich nicht.
--------
Active-Media-Production
Individual Web Development and Design
Ja, Image ist elementar, und
am 01.07.2009 - 17:43 Uhr
Ja, Image ist elementar, und wie man sieht funktionierts.