{{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
{CAPTION}
[/CAPTION] [CAPTION_ELSE]{IMGNAME}
[/CAPTION_ELSE]
{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.