In Views Feld "title" HTML zulassen
am 16.12.2009 - 01:16 Uhr in
Mir geht es darum in einer View bei der Ausgabe des Feldes "Title" einen HTML-Tag zuzulassen. Momentan ist es so, dass diese völlig ignoriert werden. Es reicht leider nicht ein HTML-Tag ringsherum zu bauen, sondern einen Tag, der sich bereits im Titel einer Node befindet, einfach zu interpretieren.
Dazu habe ich bereits in einer entsprechenden node-xyz.tpl die Variable <?php print $title ?>
in <?php echo $node -> title; ?>
geändert. Das funktioniert super. Nur in Views ist es irgendwie nicht möglich. Hat jemand einen Tip, wie das funktioniert? Auch über das Feld-Theming habe ich es nicht hinbekommen.
Ziel ist es bei sehr langen Worten im Titel den Tag ­
mitzugeben, um in besonders kleinen Boxen auf der Startseite eine Stelle im Wort vorzugeben, an der mit einem Bindestrich umgebrochen wird, wenn der Platz nicht reicht. Zu lange Worte in einer engen Box ergeben sonst sehr hässliche Effekte. Oder gibt es eventuell andere Lösungen?
- Anmelden oder Registrieren um Kommentare zu schreiben
View direkt ausgeben, aber XSS-Sicherheit nicht vergessen
am 17.12.2009 - 14:43 Uhr
Hallo green_eye55,
Dein Problem basiert darauf, daß in Drupal Informationen, die von Benutzern stammen diverse Funktionen zum Schutz vor Cross-Site-Scripting (XSS) durchlaufen. Vor allem Titel werden konsequent gefiltert und zu reinem Text umgewandelt.
Jetzt ist die große Frage, ob die Titel von vertrauenswürdigen Leuten stammen oder nicht?
Dazu habe ich bereits in einer entsprechenden node-xyz.tpl die Variable
<?php print $title ?>
in<?php echo $node -> title; ?>
geändert.An dieser Stelle umgehst Du den Filter, aber damit auch die Sicherheit.
So weit ich weiß geht so etwas mit Views nur, wenn Du die Ausgabe des Views auch direkt vornimmst, in dem Du z.B. einen Block mit eigenem PHP erzeugst, der den View lädt und so ausgibst, wie Du möchtest.
Du solltest der Sicherheit wegen Deine Titel-Informationen sowohl in der node.tpl.php als auch bei einer eigenen Views-Ausgabe auch durch eine bereinigende Funktion schicken. Die Funktion filter_xss macht genau das gleiche, wie der modifizierbare HTML-Filter für Body-Inhalte:
http://api.drupal.org/api/function/filter_xss/6
Ein Beispiel mit erlaubtem b-Tag:
<?php
$title_filtered = filter_xss($title_raw, $allowed_tags = array('b'));
?>
­
braucht aber anscheinend bei filter_xss nicht extra frei gegeben werden. Aber sonstige HTML-Befehle sollten damit sicherheitshalber heraus gefiltert werden.Viele Erfolg für Dein Projekt,
Carsten
Nachtrag
Einstieg zum Enbinden von Views zB. hier: http://www.drupalcenter.de/handbuch/views#comment-13909
--
paratio.com e.K.: Qualität-im-Internet.de
Views-Tipps
am 17.12.2009 - 15:13 Uhr
Ich schreibe da vllt. mal einen Handbuch-Eintrag zu, aber vorweg schon mal ein paar Tipps.
Vor allem für die oben beschriebene Notwendigkeit an RAW-Daten zu kommen, sind View-Render-Funktionen (wie z.B. views_build_view) nicht hilfreich. Also besser diesen Weg verfolgen:
<?php
$view = views_get_view($_my_view_name);
$view->set_items_per_page($_my_view_limit);
$view->set_arguments($_my_args);
$view->execute();
$_my_view_items = $view->result;
?>
Bis ich den Hinweis auf set_items_per_page gekommen bin, hatte ich auch viel suchen müssen, da die Einstellungen im GUI-Bereich für den View diesbezüglich ignoriert werden und ohne eine entsprechende Anweisung immer das Limit bei 10 steht.
--
paratio.com e.K.: Qualität-im-Internet.de