Titel mit Stil
Manchmal hat man das Verlangen, den Titel einer Seite etwas aufzupeppen und bestimmte Teile des Titels andersfarbig oder in einer anderen Schrift darzustellen. Jedoch ist es in Drupal nicht möglich, HTML im Titelfeld zu verwenden.
Dieses Tutorial zeigt, wie man trotzdem ein wenig Stil in den Titel bekommt.
Voraussetzungen
Bevor wir starten, müssen sowohl das Content Construction Kit, als auch Automatic Nodetitles installiert sein.
Bei CCK muss das Untermodul "Text" auf jeden Fall aktiviert sein, sonst lässt sich das Tutorial nicht umsetzen.
Umsetzung
Zuerst verändern wir die Datei template.php unseres Themes (hier im Beispiel "Garland") ein wenig, damit die gestylten Titel auch richtig umgesetzt werden können.
Zuerst fügen wir eine neue Funktion hinzu:
<?php
/**
* Function to replace '[::]' tags with span elements to allow title styling.
*/
function style_title($title) {
// Remove all html tags.
$styled_title = strip_tags($title, array());
$styled_title = check_plain($styled_title);
// Check if at least one start marker is present.
if (strpos($styled_title, '[:') > -1) {
$cnt_open = 0;
$cnt_closed = 0;
// Replace all start markers.
while (($pos = strpos($styled_title, '[:')) > -1) {
$cnt_open++;
$replace = '<span class="styled-title style-'. $cnt_open .'">';
$styled_title = substr_replace($styled_title, $replace, $pos, 2);
}
$cnt_closed = substr_count($styled_title, ':]');
// Replace all end markers with closing tags.
$styled_title = str_replace(':]', '</span>', $styled_title);
// Close all elements that are still open.
for ($i = 0; $i < ($cnt_open - $cnt_closed); $i++) {
$styled_title .= '</span>';
}
}
return $styled_title;
}
?>
Dann erweitern wir die Funktion phptemplate_preprocess_page(&$vars)
folgendermassen:
<?php
function phptemplate_preprocess_page(&$vars) {
// bestehender Code der Funktion ...
// Styled titles
if (isset($vars['node']) && isset($vars['node']->field_styled_title[0])) {
$styled_title = $vars['node']->field_styled_title[0]['value'];
$vars['title'] = style_title($styled_title);
}
}
?>
Wie zu sehen ist, wird hier auf das Feld field_styled_title
verwiesen. Dieses wird jetzt unter admin/content/node-type/page/fields angelegt:
Ich habe folgende Einstellungen für das Feld verwendet:
Schnell noch die Reihenfolge der Felder ändern, so dass das neue Titelfeld auch oben angezeigt wird und dann noch die Einstellungen zur Anzeige des Feldes beim Betrachten der Seite anpassen (unter admin/content/node-type/page/display):
Da wir jedoch nur ein Titelfeld angezeigt haben wollen, müssen wir jetzt noch den automatischen Titel für den Inhaltstyp konfigurieren.
Unter admin/content/node-type/page finden wir ganz oben den Bereich "Automatic title generation". Dort werden diese Einstellungen vorgenommen:
Dies hat zur Folge, dass sämtliche Marker im eigentlich Titel der Seite nicht auftauchen, so dass auch nach dem Titel gesucht werden kann.
Um den Titeln von Seiten jetzt ein wenig Stil beizubringen werden einfach die Marker [:
und :]
im Titel verwendet.
"Dies ist [:ein:] [:bunter [:Titel
" wird so zu "Dies ist ein <span class="styled-title style-1">ein</span> <span class="styled-title style-2">bunter <span class="styled-title style-3">Titel</span></span>
".
Wie man sieht, werden die Tags auch automatisch am Ende des Titels geschlossen (falls mal ein Endmarker vergessen wurde).
- Anmelden oder Registrieren um Kommentare zu schreiben
Du könntest sogar ne
am 20.05.2009 - 18:29 Uhr
Du könntest sogar ne Waschmaschine mit Drupal bauen ;-)
http://www.twitter.com/aschiwi
Drupal-Initiative e.V.
Stefan bohrt es auf
am 08.07.2009 - 11:08 Uhr
Ah, sogar ne schöne Anleitung dafür. Das wird gnadenlos verwendet. Danke an den edlen Spender.
Drupal Usability Edition - Goddammit, put it on the Internet!
Dankeschön :-)
am 08.07.2009 - 12:00 Uhr
Hallo Stefan Borchert,
Das ist wirklich eine super Anleitung und gut verständlich. Ich habe diese gleich in meine "gemerkten Seiten" aufgenommen.
Das kann ich sicher mal brauchen ...
Gruss und ein Dankeschön aus der Schweiz
Fredi
Funktionierte ebenfalls auf
am 23.03.2010 - 20:06 Uhr
Funktionierte ebenfalls auf Anhieb :)
Das einzige was mich stört, aber womit man leben kann ist, wenn man den Befehl am Anfang des Titels setzt, t.B.: [:here:] You Text !!!
dann schreibt er es auch [:here:] Your Text !!! ... wenn man ein Leerzeichen davor setzt, funktioniert es auch mit dem ersten Wort im Titel :)
Cheers
Skull
edit: Die Anzeige funktioniert soweit :) Wenn ich nun Blöcke speichern, oder den Cache löschen, oder Nodes abspeichern möchte, bekomme ich:
Referrer http://drupaltest.....org/admin/build/block
Nachricht Cannot modify header information - headers already sent by (output started at /www/htdocs/.../drupaltest/sites/all/themes/framework/template.php:1) in /www/htdocs/w009e5c5/drupaltest/includes/common.inc in Zeile 345.
Schweregrad Fehler
edit2: Hab das ganze mal auf ne frisch augesetzte Drupal 6.16-DE oberfläche und dem integrierten Garland Theme ausprobiert. Leider auch hier derselbe Fehler.
Das muss an der Template.php liegen ... so sieht die aus: http://pastebin.org/120551
edit3: habs jetzt mal mit Zen probiert, nu gehts :)O