Bildunterzeile kürzen

V1.0 Kürzen des CAPTION-Textes

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 cmsYes We C


cp_trig_cut_caption_text.php

<?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');
 
?>


V1.1.1 Kürzen des CAPTION-Textes

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:

  • -cXX → Ausgabe von max. XX Zeichen autom. Schaltung in den Modus [char]
  • -wXX → 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 -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 … 20 Zeichen / 3 Wörter
<span class=“cut_caption-c8-w6”> Yes We C … 8 Zeichen / 6 Wörter
<span class=“cut_caption-w6”> Yes We Can do many things … 6 Wörter


cp_trig_cut_caption_text.php

<?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>

deutsch/ersetzer_rts/frontend_init/cp_trigger/bildunterzeile-kuerzen.txt · Last modified: 2018/06/03 18:09 (external edit)
www.planmatrix.de www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0