NAVIGATION
Bei der Verwendung der CPs Bilder <div> und Bilder Spezial soll der Captiontext (Bildunterzeile) in der einfachen FE-Ausgabe gekürzt werden. In der LightBox bleibt der Text vorhanden.
Angenommener Templateeintrag:
[CAPTION]<p style="margin:3px 0 0 0; width:200px; height:15px;"><span class="cut_caption">{CAPTION}</span></p>[/CAPTION] [CAPTION_ELSE]<p>{IMGNAME}</p>[/CAPTION_ELSE]
Es wird auf die Zeichenfolge <span class=“cut_caption”> Caption-Text </span> getriggert.
Caption-Text wird somit separiert, ausgelesen und verarbeitet.
Die Stelle <span …> …. </span> wird mit dem Ergebnis überschrieben.
In diesem Beispiel werden die Zeichen substr('$1', 0, 8) von Position 0 bis 8 ausgeschnitten und zurückgegeben.
Ergebnis: Yes We Can do many things with this cms → Yes We C
<?php // ------------------------------------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) { die("You Cannot Access This Script Directly, Have a Nice Day."); } // ------------------------------------------------------------------------------------------- // Cutting the caption text in FE output (substr('$1', 0, 8) = cutting out charakter 0 to 8) // K.Heermann (flip-flop) 17.05.09 /* * cp_trigger_function_name - the unique function name * $text - holds the content part html source on which you can parse or do custom processing * $data - is a reference to an array which holds content part values like ID, dates and other values - see db table phpwcms_articlecontent Always return $text; */ /* e.g. Template ------------------------------------------------------------- [CAPTION]<p style="margin:3px 0 0 0; width:200px; height:15px;"><span class="cut_caption">{CAPTION}</span></p>[/CAPTION] [CAPTION_ELSE]<p>{IMGNAME}</p>[/CAPTION_ELSE] ----------------------------------------------------------------------------- */ function CP_CUT_CAPTION_TEXT($text, & $data) { // CPs: 29 => image <div>, 31 => image special if ( $data['acontent_type'] == 29 OR $data['acontent_type'] == 31 ) { $text = preg_replace("/<span class=\"cut_caption\">(.*?)<\/span>/e","substr('$1', 0, 8).' ...'" , $text); // First word in string // $text = preg_replace("/<span class=\"cut_caption\">(.*?)<\/span>/e","substr('$1', 0, strpos('$1', ' ')).' ...'" , $text); } return $text; } register_cp_trigger('CP_CUT_CAPTION_TEXT'); ?>
Bei der Verwendung der CPs Bilder <div> und Bilder Spezial soll der Captiontext (Bildunterzeile) für die einfache FE-Ausgabe gezielt gekürzt werden. In der LightBox bleibt der gesamte Text vorhanden.
Dies wird erreicht durch den Einsatz eines CP triggers im Ordner /template/inc_script/frontend_init/
In das Template wird (siehe unten) eine genau definierte Zeichenfolge um den {CAPTION}-Platzhalter eingebaut. Diese Zeichenfolge wird von dem Trigger-Programm im …/frontend_render/ ausgefilter und ausgewertet. Es können hier Steuerparamter über einen einfachen Klassennamen vom Template an das Programm übergeben werden.
Angenommener Templateeintrag:
[CAPTION]<p style="margin:3px 0 0 0; width:200px; height:15px;"><span class="cut_caption-c20-w3">{CAPTION}</span></p>[/CAPTION] [CAPTION_ELSE]<p>{IMGNAME}</p>[/CAPTION_ELSE]
Im frontend_init-Programm wird auf die Zeichenfolge <span class=“cut_caption-c20-w3”> Caption-Text </span> getriggert.
Caption-Text wird somit separiert, ausgelesen und verarbeitet.
V1.1.1: Zusätlich werden die Parameter in cut_caption-c20-w3 erkannt und verarbeitet.
Parameterbedeutung:
Werden beide Parameter angegeben, gilt folgendes: Ist der String “XX Worte” im Modus [word] länger als max. Zeichen in -cXX angegeben, wird autom. auf den Modus [char] umgeschaltet.
Die Stelle <span …> …. </span> wird mit dem Ergebnis überschrieben.
In diesem Beispiel würden die ersten drei Worte ausgegeben wenn vorhanden oder falls der Wortstring länger als 20 Zeichen sein sollte, diese ausgegeben.
Gegebene Zeichenkette: Yes We Can do many things with this cms
Templateaufruf | Ergebnis | Kommentar |
---|---|---|
<span class=“cut_caption-c20-w3”> | Yes We Can … | |
<span class=“cut_caption-c8-w6”> | Yes We C … | 8 Zeichen / |
<span class=“cut_caption-w6”> | Yes We Can do many things … | 6 Wörter |
<?php // ------------------------------------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) { die("You Cannot Access This Script Directly, Have a Nice Day."); } // ------------------------------------------------------------------------------------------- // Cutting the caption text in FE output V1.1.1 // K.Heermann (flip-flop) 18.05.09 /* * cp_trigger_function_name - the unique function name * $text - holds the content part html source on which you can parse or do custom processing * $data - is a reference to an array which holds content part values like ID, dates and other values - see db table phpwcms_articlecontent Always return $text; */ /* e.g. Template ------------------------------------------------------------- [CAPTION]<p style="margin:3px 0 0 0; width:200px; height:15px;"><span class="cut_caption-c20-w3">{CAPTION}</span></p>[/CAPTION] [CAPTION_ELSE]<p>{IMGNAME}</p>[/CAPTION_ELSE] ----------------------------------------------------------------------------- */ /* ----------------------------------------------------------------------------- [$text=whole string] [$param=mode e.g. -c20-w3] -cX = max characters to show -wX = max words to show (if word string > max charakters, max.char is used) Yes, I know the php function str_word_count, but there is a problem with utf-8 Sonderzeichen like ä, ü, ö .... ----------------------------------------------------------------------------- */ function String_Word_Limiter($text, $param=''){ // Default, if there is no parameter from client $max_char = 100; $limit_word = 4; $prio_char_word = 'char'; if (!empty($text) ) { // parameter set by user ? $string = $text; // Yes and save $param = strtolower($param); // convert all to lower char $_param = explode('-',$param); // Cut out all parameters $_param[1] - [2] foreach ($_param as $key=>$value) { // Cutting out and allocate the parameters if (substr($value, 0, 1) == 'c') { $max_char = substr($value, 1); $prio_char_word = 'char'; } elseif (substr($value, 0, 1) == 'w') { $limit_word = substr($value, 1); $prio_char_word = 'word'; } } } else { // No parameter set by user $string = $param; } if ($prio_char_word == 'word') { // Is it the word mode? $explode = explode(' ',$text); // Cut out all words $string = ''; for($i=0; $i<$limit_word; $i++){ // Generate the new word string $string .= $explode[$i]." "; } // Fallback, if word string is too lang if (strlen($string) > $max_char ) $string = substr($text, 0, $max_char); } // It is the Charakter mode else $string = substr($text, 0, $max_char); $dots = (strlen($text) > strlen($string) ) ? ' ...' : ''; // Dots set return $string.$dots; } // ---------------------------------------------------------------------------- function CP_CUT_CAPTION_TEXT($text, & $data) { // CPs: 29 => image <div>, 31 => image special if(($data['acontent_type'] == 29 OR $data['acontent_type'] == 31)) { //<span class="cut_caption">Caption-Text</span> // $1 = -c20-w4 // e.g. <span class="cut_caption-c20-w4">Caption-Text</span> $search = "/<span class=\"cut_caption(.*?)\">(.*?)<\/span>/e"; $replace = "String_Word_Limiter('$2','$1')"; $text = preg_replace($search,$replace , $text); } return $text; } register_cp_trigger('CP_CUT_CAPTION_TEXT'); ?>
<note important> Bei der Verwendung eines UTF-8 Zeichensatzes wird jedes Sonderzeichen (noch) doppelt gezählt. Z.B. hätte der Satzteil “Keine Übergrößen” eine Zeichenanzahl von 16, für die interne Zählung lautet das Ergebnis jedoch 19 Zeichen. </note>