{{indexmenu_n>100}} ====== Bildunterzeile kürzen ====== ===== V1.0 Kürzen des CAPTION-Textes ===== Bei der Verwendung der CPs //[[deutsch/phpwcms-system/artikel/contentparts/bilder-div|Bilder
]]// und //[[deutsch/phpwcms-system/artikel/contentparts/bilder-spezial|Bilder Spezial]]// soll der Captiontext //(Bildunterzeile)// in der einfachen FE-Ausgabe gekürzt werden. In der LightBox bleibt der Text vorhanden. Angenommener Templateeintrag: [CAPTION]

{CAPTION}

[/CAPTION] [CAPTION_ELSE]

{IMGNAME}

[/CAPTION_ELSE]
Es wird auf die Zeichenfolge #### //Caption-Text// #### getriggert. \\ //Caption-Text// wird somit separiert, ausgelesen und verarbeitet. \\ Die Stelle .... 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** \\ {CAPTION}

[/CAPTION] [CAPTION_ELSE]

{IMGNAME}

[/CAPTION_ELSE] ----------------------------------------------------------------------------- */ function CP_CUT_CAPTION_TEXT($text, & $data) { // CPs: 29 => image
, 31 => image special if ( $data['acontent_type'] == 29 OR $data['acontent_type'] == 31 ) { $text = preg_replace("/(.*?)<\/span>/e","substr('$1', 0, 8).' ...'" , $text); // First word in string // $text = preg_replace("/(.*?)<\/span>/e","substr('$1', 0, strpos('$1', ' ')).' ...'" , $text); } return $text; } register_cp_trigger('CP_CUT_CAPTION_TEXT'); ?> \\ ===== V1.1.1 Kürzen des CAPTION-Textes ===== Bei der Verwendung der CPs //Bilder
// 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]

{CAPTION}

[/CAPTION] [CAPTION_ELSE]

{IMGNAME}

[/CAPTION_ELSE]
Im frontend_init-Programm wird auf die Zeichenfolge #### //Caption-Text// #### 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:** * **-c**XX -> Ausgabe von max. XX Zeichen autom. Schaltung in den Modus [**char**] * **-w**XX -> Ausgabe von max. XX Wörtern autom. Schaltung in den Modus [**word**] Werden beide Parameter angegeben, gilt folgendes: Ist der String "XX Worte" im Modus [**word**] länger als max. Zeichen in **-c**XX angegeben, wird autom. auf den Modus [**char**] umgeschaltet. Die Stelle // .... // 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 ^ | | **Yes We Can ...** | 20 Zeichen / 3 Wörter | | | **Yes We C ...** | 8 Zeichen / 6 Wörter | | | **Yes We Can do many things ...** | 6 Wörter | \\ {CAPTION}

[/CAPTION] [CAPTION_ELSE]

{IMGNAME}

[/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
, 31 => image special if(($data['acontent_type'] == 29 OR $data['acontent_type'] == 31)) { //Caption-Text // $1 = -c20-w4 // e.g. Caption-Text $search = "/(.*?)<\/span>/e"; $replace = "String_Word_Limiter('$2','$1')"; $text = preg_replace($search,$replace , $text); } return $text; } register_cp_trigger('CP_CUT_CAPTION_TEXT'); ?> 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.