Dynamisches Bild im Node
am 17.08.2011 - 12:55 Uhr in
Hallo
ich will für meine Website an einen Inhaltstypen einen Wertungskasten anhängen, dh.: dort steht dann ein kurzes
Fazit und es soll ein Bild mit der Wertung angezeigt werden. Mit purem PHP wär das für mich kein Problem denk ich,
aber kann ich denn so ein bisschen php Code einem Inhaltstypen hinzufügen?
Bis jetzt hab ich einfach eine int variable für die Wertung erstellt, die würde ich dann verstecken und einfach per php abfragen
wie hoch die Wertung ist und dann das entsprechende Bild anzeigen.
danke
Trautmann
- Anmelden oder Registrieren um Kommentare zu schreiben

Trautmann schrieb aber kann
am 17.08.2011 - 13:23 Uhr
aber kann ich denn so ein bisschen php Code einem Inhaltstypen hinzufügen?
Je nach Drupal Version gibt es die CORE Module PHP oder PHPFILTER ... damit lässt sich ausführbarer PHP Code direkt eingeben.
PS: Es gibt aber für Abstimmungen etc. auch eine Menge an Contrib Modules wie z.B. FIVE STAR
Hallo Thoor danke für die
am 17.08.2011 - 13:35 Uhr
Hallo Thoor danke für die schnelle Antwort.
Den Filter hab ich schon gefunden und auch aktiviert, nur wie Füge ich einem Inhaltstypen einen fixen Text zu?
Ich will das der Autor nur die Wertung eingeben muss und keinen Verwirrenden PHP-Code sieht.
lg
Na davon bin ich aber auch
am 17.08.2011 - 13:47 Uhr
Na davon bin ich aber auch ausgegangen, daß Du keinem User erlaubst, das PHP Modul zu nutzen :-) Damit würdest Du bösen Zeitgenossen Tür und Tor öffnen, um bei Dir Schindluder auf dem Server zu treiben :-)
Ich habe das nur erwähnt, weil ich dachte, daß Du ausführbaren PHP Code in einem Node einfügen willst? Aber jetzt weiss ich gerade gar nicht, was Du da eigentlich vorhast?
Wenn also irgendjemand was auf der Seite bewerten soll, dann rate ich nochmal zu Modulen wie FIVE STAR, RATE und VOTE UP DOWN.
Hallo, also es soll nicht der
am 17.08.2011 - 14:02 Uhr
Hallo,
also es soll nicht der Artikel bewertet werden sondern ein Film.
Der Redakteur schreibt die Kritik und gibt dem Film eine Wertung und die soll dann in einem speziellen Wertungskasten angezeigt werden.
lg
Dazu brauchst du dann nur
am 17.08.2011 - 14:09 Uhr
Dazu brauchst du dann nur FiveStar und keinen PHP Code!
Das sind alles Module bei
am 17.08.2011 - 14:25 Uhr
Das sind alles Module bei denen viele User bewerten sollen,
ich will aber das der Redakteur genau eine Wertung festlegt und die dann als zahl nur eben als Bild angezeigt wird.
lg
Mach doch ein CCK-Feld rein,
am 17.08.2011 - 14:41 Uhr
Mach doch ein CCK-Feld rein, bei dem der Autor aus einer Selectbox z. B. einen Note zwischen 1 und 5 auswählen kann.
Im Node-Template blendest du dann je nach CCK-Field-Wert ein anderes Bild ein.
Trautmann schrieb Das sind
am 17.08.2011 - 15:05 Uhr
Das sind alles Module bei denen viele User bewerten sollen,
ich will aber das der Redakteur genau eine Wertung festlegt und die dann als zahl nur eben als Bild angezeigt wird.
lg
Dann setzt du die Rechte nur für Redakteure und dann gehts! Und mann kann bei FiveStar die Bewertung nur als Bild anzeigen!
Na gut überredet! Kannst du
am 17.08.2011 - 15:47 Uhr
Na gut überredet!
Kannst du mir vielleicht noch sagen wo ich die Einstellung dafür finde das ganze nur als Bild anzuzeigen?
lg
Ich bin ja auch immer der
am 17.08.2011 - 16:17 Uhr
Ich bin ja auch immer der Meinung, dass man so wenige Module wie nötig einsetzen sollte, deshalb hier nochmal, wie Exterior es meinte:
Erstelle in Deinem Inhaltstyp ein Feld grade und nenne es z.B. Note. Als Typ für das Feld nimmst Du Integer Zahlen und eine Auswahlliste 1,2,3,4 ...
Damit wähl der Redakteur dann die Note aus.
Dieses Feld rufst Du jetzt in der node-xxx.tpl.php des Inhaltstypen auf. Und zwar verabreichst Du dem Feld gleich noch die gleiche CSS Klasse, wie den auszugebenden Wert mit:
<?php if ($node->field_grade[0]): ?><?php print '<div class="'.$node->field_grade[0]['view'].'">'.$node->field_grade[0]['view'].'</div>'; ?>
<?php endif; ?>
( Ist jetzt für D6! Du verrätst leider nicht, mit welcher Version Du arbeitest. Bei D7 ist die Feldausgabe unterschiedlich)
Wenn jetzt als Note 4 eingegeben wurde, dann lautet die Ausgabe:
<div class="4">4</div>Und jetzt verpasst Du den Klassen mit CSS ein entsprechendes Hintergrundbild und lässt den Text verschwinden:
.1,
.2,
.3,
.4 {
height: 30px;
margin: 10px;
width: 30px;
text-indent: -9999em;
}
.1{
background: url("/sites/all/themes/dein_theme/1.png") no-repeat scroll 0 0 transparent;
}
.2{
background: url("/sites/all/themes/dein_theme/2.png") no-repeat scroll 0 0 transparent;
}
.3{
background: url("/sites/all/themes/dein_theme/3.png") no-repeat scroll 0 0 transparent;
}
.4{
background: url("/sites/all/themes/dein_theme/4.png") no-repeat scroll 0 0 transparent;
}
Du musst natürlich die Bilder 1.png, 2.png, 3.png, 4.png vorher erstellen und in Deinen Themeordner packen und den Beispielpfad hier anpassen. Damit sollte das dann aber wie gewünscht erledigt sein.
Hey Thoor,dieser Ansatz
am 17.08.2011 - 16:41 Uhr
Hey Thoor,
dieser Ansatz gefällt mir gut, könntest du mir noch sagen was ich für Drupal 7 änder muss?
Hab das eigentlich beim erstellen den Threads angegeben aber das wird irgendwie nicht angezeigt :/
edit: in welchem Ordner finde ich die entsprechende node?
danke
Trautmann
In Drupal 7 gibt man das Feld
am 17.08.2011 - 17:08 Uhr
In Drupal 7 gibt man das Feld mit
<?php print render($content['field_grade']); ?>aus.Und die erwähnte node.tpl.php findest Du im Normalfall in Deinem Theme-Ordner. Man kann aber auch inhaltstypisch spezifischenTemplates im Theme anlegen. Das ist dann das eigentliche Theming bei Drupal. -> http://drupal.org/node/190815
Hallo Thoor,danke für die
am 22.08.2011 - 11:24 Uhr
Hallo Thoor,
danke für die Hilfe. Ich hab jetzt die Zeit gefunden das ganze einmal auszuprobieren aber für mich ist das theming ein bisschen verwirrend.
Ich habs so probiert das ich im Ordner wo die node.tlp.php liegt, eine Datei mit dem Namen "node--kritik.tpl.php" erstellt habe mit dem selben
Inhalt wie dir Originaldatei. Dann habe ich dieser Datei nachdem der Content gepostet wird folgende Zeilen hinzugefügt:
<?php if ($content['field_wertung'])): ?><?php print '<div class="'.render($content['field_wertung']).'">'.render($content['field_wertung']).'</div>'; ?>
<?php endif; ?>
es tut sich aber leider gar nichts. keine Fehlermeldungen kein div erscheint nichts :(
was mache ich falsch?
lg
In welchen Ordner? Der
am 22.08.2011 - 12:03 Uhr
In welchen Ordner? Der richtige Ordner dafür ist der Ordner in dem die Template Dateien Deines Themes sind!
Und node--kritik.tpl.php? Das ist der maschinenlesbare Name des Inhaltstypen in dem Du die Filmkritik schreibst und auch die Note abgibst lautet kritik - oder?
Nachdem jetzt nichts erscheint. Schreib doch einfach mal ein
<h1>TEST</h1>in Deine node--kritik.tpl.php. Erscheint das TEST dann in der Ausgabe, wenn Du einen Node erstellst? Wenn Nein, das Theme nochmal in der Theme-Verwaltung aktivieren ( nennt sich Theme Registry neu aufbauen ) und eventuell Caches leeren!Und Deine vergebene Film-Note ( field_wertung ) erscheint die denn in der Ausgabe des Nodes?
Wenn die ersten beiden Punkte funktionieren, dann würde ich versuchen das Feld erstmal ganz normal auszugeben. Und wenn das auch noch hingehauen hat, die Ausgabe dann in die endgültige Form mit den CSS Klassen zu bringen.
Das mit der Theme Registry
am 22.08.2011 - 16:28 Uhr
Das mit der Theme Registry hat hingehauen.
Nur wurde dann statt dem Artikel nur eine weiße Seite ohne dem Main Content angezeigt.
Alle Menüs waren falsch angeordnet und überhaupt nicht gestylet :(
Ist das überhaupt so richtig das ich die Original node.tlp kopieren und dort dann Veränderungen durchführe,
oder soll ich in die neue Datei nur den zusätzlichen Code schreiben?
lg
Also Deine
am 22.08.2011 - 17:07 Uhr
Also Deine node--kritik.tpl.php hat schon mal nichts mit dem Laden Deiner Stylesheets zu tun. Wahrscheinlich hast Du ein DIV nicht geschlossen oder sonst irgendwas falsches getan. Der Weg an sich ist jedenfalls richtig.
Ich klinke mich jetzt hier aber aus. Ich habe Dir das nötige dazu erklärt, Du beantwortest leider auch keine Fragen, die man im Gegenzug an Dich stellt. Und besser krieg ich eine Erklärung auch nicht hin. Viel Erfolg noch!
Einfacher wär es mit Fivestar
am 22.08.2011 - 17:50 Uhr
Einfacher wär es mit Fivestar gegangen.... Dazu sind ja Module da um sie zu nutzen...
An dieser Stelle ist hinten
am 22.08.2011 - 19:05 Uhr
An dieser Stelle ist hinten zumindest eine ")" zu viel:
<?phpif ($content['field_wertung'])):
?>
Poste doch bitte mal den gesamten Inhalt der neuen Template-Datei.
Und bitte mach Code-Tags um den gesamten Code, sonst kann das später niemand mehr lesen. In deinem Beitrag weiter oben habe ich das mal für dich ergänzt. Bitte in Zukunft selbst dran denken ;)
Einfacher wär es mit Fivestar gegangen.... Dazu sind ja Module da um sie zu nutzen...
Aber so wirklich den gewünschten Zweck - nämlich die Bewertung beim Erstellen des Nodes abzugeben - erfüllt Fivestar nicht. Das wäre dann auch meiner Meinung nach eher eine Ausweich-Lösung.
<?php// $Id: node.tpl.php,v
am 22.08.2011 - 20:13 Uhr
<?php
// $Id: node.tpl.php,v 1.4.2.4 2011/02/18 05:26:30 andregriffin Exp $
?>
<?php if (!$page): ?>
<article id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
<?php endif; ?>
<?php if ($user_picture || $display_submitted || !$page): ?>
<?php if (!$page): ?>
<header>
<?php endif; ?>
<?php print $user_picture; ?>
<?php print render($title_prefix); ?>
<?php if (!$page): ?>
<h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>"><?php print $title; ?></a></h2>
<?php endif; ?>
<?php print render($title_suffix); ?>
<?php if ($display_submitted): ?>
<p class="submitted"><?php print $submitted; ?></p>
<?php endif; ?>
<?php if (!$page): ?>
</header>
<?php endif; ?>
<?php endif; ?>
<div class="content"<?php print $content_attributes; ?>>
<?php
// Hide comments, tags, and links now so that we can render them later.
hide($content['comments']);
hide($content['links']);
hide($content['field_tags']);
hide($content['field_wertung'])
print render($content);
?>
</div>
<?php if ($content['field_wertung']): ?>
<?php print '<div class="'.render($content['field_wertung']).'">'.render($content['field_wertung']).'</div>'; ?>
<?php endif; ?>
<?php if (!empty($content['field_tags']) || !empty($content['links'])): ?>
<footer>
<?php print render($content['field_tags']); ?>
<?php print render($content['links']); ?>
</footer>
<?php endif; ?>
<?php print render($content['comments']); ?>
<?php if (!$page): ?>
</article>
<?php endif; ?> <!-- /.node -->
So die Klammer hab ich schon weggenommen
Bin mir halt nicht sicher ob ich das an der richtigen Stelle eingefügt habe.
danke
lg
Fivestar
am 22.08.2011 - 20:26 Uhr
Aber so wirklich den gewünschten Zweck - nämlich die Bewertung beim Erstellen des Nodes abzugeben - erfüllt Fivestar nicht. Das wäre dann auch meiner Meinung nach eher eine Ausweich-Lösung.
Doch das geht problemlos mit Fivestar. Habe ich kürzlich auf einer Musikseite eingebaut, wo die Redakteure beim Erstellen einer Plattenbesprechung per Fivestar ihre Bewertung für den Tonträger abgeben können/müssen.
@ caw Wie bekommt man
am 22.08.2011 - 20:45 Uhr
@ caw
Wie bekommt man FiveStar denn ins Node-Formular?
@ Trautmann
Und wenn du die Klammer entfernst, klappt es trotzdem nicht? Funktioniert es denn, wenn du den gesamten PHP-Schnippsel von dir entfernst?
Übrigens, ersetze diesen Teil:
<?php if ($content['field_wertung']): ?><?php print '<div class="'.render($content['field_wertung']).'">'.render($content['field_wertung']).'</div>'; ?>
<?php endif; ?>
mal damit:
<?php if ($content['field_wertung']): ?><div class="<?php print render($content['field_wertung']); ?>"><?php print render($content['field_wertung']); ?></div>
<?php endif; ?>
Exterior schrieb@ cawWie
am 22.08.2011 - 21:11 Uhr
@ caw
Wie bekommt man FiveStar denn ins Node-Formular?
Ich antworte mal stellvertretend für caw :) Nach der Fivestar-Installation steht in der Feldverwaltung ein Feldtyp "Fivestar-Bewertung" zu Verfügung, die Benutzung funktioniert dann wie bei jedem anderen CCK-Feld. Man kann übrigens über die sog. Voting-Axis des Moduls auch mehrere Bewertungen für einen Node einrichten, und darüber z.B. Zustand, Cover, Aufnahmequalität etc. einzeln bewerten. Sehr praktisch.
Cool, kannte ich noch gar
am 22.08.2011 - 21:35 Uhr
Cool, kannte ich noch gar nicht :) Tja, man lernt eben nie aus =)
Da braucht man keine Felder!
am 23.08.2011 - 05:32 Uhr
Da braucht man keine Felder! Fivestar kann man dann bei jedem Inhaltstypen aktivieren und schon ist ein Bewertungsfeld mit optionalem Kommentarfeld vorhanden!
Natürlich kann man auch ein CKK Fivestarfeld nehmen...
caw schrieb Da braucht man
am 23.08.2011 - 06:13 Uhr
Da braucht man keine Felder! Fivestar kann man dann bei jedem Inhaltstypen aktivieren und schon ist ein Bewertungsfeld mit optionalem Kommentarfeld vorhanden!
Doch, man braucht Felder. Aktiviert man Fivestar nur für den Inhaltstypen, steht einem Webseitenbesucher ein Bewertungsfeld für den Node (und/oder Kommentar) zur Verfügung, aber der Ersteller des Nodes hat keine Möglichkeit, gleich im Formular eine eigene Bewertung abzugeben (das war ja die Frage von Exterior). Dies muß man bei Fivestar über ein CCK-Feld machen.
ja so gesehen; klar
am 23.08.2011 - 07:00 Uhr
ja so gesehen; klar