This is an old revision of the document!


cp_trigger

Forum: http://forum.phpwcms.org/viewtopic.php?p=107107#p107107
- Autor: OG

A very simple way to implement custom functions which are pocessed each time a content part is parsed in phpwcms.

Unlike to a function running in /frontend_render/ is the purposeful processing of a content subarea. Only the cp content is processed, not the whole side contents.

Definition

Just take that and move the file one directory up - put it in here template/inc_script/frontend_init/.

Put in the replacement tag in your content part: {CPDATE} and check the preview link.

Custom functions have to be defined this way:

function cp_trigger_function_name($param1, & $param2) {
   $param1 = do_this_or_that($param2['acontent_id']);
   return $param1;
}
  • cp_trigger_function_name - the unique function name
  • $param1 - holds the content part html source on which you can parse or do custom processing
  • $param2 - is a reference to an array which holds content part values like ID, dates and other values - see db table phpwcms_articlecontent

Always return $param1;

And must be registered in phpwcms - just tell the system to parse it:

register_cp_trigger('cp_trigger_function_name', 'LAST');

You can also limit your function to work for special content parts (especially content part types):

function cp_trigger_function_name($param1, & $param2) {
   if($param2['acontent_type'] == 14) { // 14 is CP WYSIWYG
      $param1 = do_this_or_that($param2['acontent_id']);
   }
   return $param1;
}

TABLE phpwcms_articlecontent

Short description of the TABLE phpwcms_articlecontent

Some more of the fields are very specific and - yes sorry - not clear by name. It's historical and cannot be changed easy again

TABLE phpwcms_articlecontent

acontent_id              auto increment unique ID
acontent_aid             ID of parent article
acontent_uid             ID of the user has saved CP at last
acontent_created         Date: CP created, MySQL date format
acontent_tstamp          Date: CP updated, MySQL date format
acontent_title           Title text
acontent_text            Plain Text (in general)
acontent_type            Type of the Cntent Part - look at include/inc_lib/article.contenttype.inc.php
acontent_sorting         sort value: [value]
acontent_image           Holds image information (older CP)
acontent_files           Hold file information (older CP)
acontent_visible         Visible [0/1]
acontent_subtitle        Subtitle text
acontent_before          Space: before [value]
acontent_after           Space: after [value]
acontent_top             Top anchor jump [0/1]
acontent_redirect        can hold an URL (cannot remember at the moment)
acontent_html            also Text, can be HTML styled text but also other texts
acontent_trash           0= available  9= trash
acontent_alink           Also older CP - article link
acontent_media           CP Multimedia information
acontent_form            more complex - current CPs store serialized infos there
acontent_newsletter      ??                          (mediumtext)
acontent_block           display: e.g. [Content] - in general empty mean main block
acontent_anchor          anchor: [0/1]
acontent_template        template filename if there
acontent_spacer          ??                          (int(1))
acontent_tid             ??                          (int(11))
acontent_livedate        Livedate (not in use ??)
acontent_killdate        Killdate (not in use ??)
acontent_module          Module name
acontent_comment         notes: [value]
acontent_paginate_page   Paginate subsection: [value]
acontent_paginate_title  subsection title: [value]
acontent_category        ??
acontent_granted         if set [0/1] visible for logged-in users only

Some enhancements only

dumpVar($varname);

to get more information based on real data.

Content Part Types

Please have a look into: Content Part Types

1. example: CP_IMGDIV_img_class

Forum: http://forum.phpwcms.org/viewtopic.php?p=107107#p107107

Add a class to an image, based on the cp image <div>. The given output:

<img src="content/images/xyz.jpg" alt="Alt-Text" title="Titel-Text" **border="0"** width="120" height="90">

The construction structurally is look like:

<img CLASS="MY_CUSTOM_CLASS" src="content/images/xyz.jpg ...."

Method of resolution:

- using a trigger to border=“0” and replace to class=“MY_CUSTOM_CLASS” border=“0” ends in this result:

<img src="content/images/xyz.jpg" alt="Alt-Text" title="Titel-Text" **class="MY_CUSTOM_CLASS" border="0"** width="120" height="90">

/template/inc_script/frontend_init/rt_cp_trigger.php

<?php
 
// http://forum.phpwcms.org/viewtopic.php?p=107107#p107107
/* ------------------------------------------------------------------
function cp_trigger_function_name($param1, & $param2) {
   if($param2['acontent_type'] == 14) { // 14 is CP WYSIWYG
      $param1 = do_this_or_that($param2['acontent_id']);
   }
   return $param1;
}
 
* cp_trigger_function_name - the unique function name
* $param1 - holds the content part html source on which you can parse or do custom processing
* $param2 - is a reference to an array which holds content part values like ID, dates and other values - see db table phpwcms_articlecontent
 
Always return $param1;
*/
// ------------------------------------------------------------------
// obligate check for phpwcms constants
if (!defined('PHPWCMS_ROOT')) { die("You Cannot Access This Script Directly, Have a Nice Day."); }
// ------------------------------------------------------------------
 
 
function CP_IMGDIV_img_class($text, & $data) {
   if($data['acontent_type'] == 29) { // 29 is CP img div
      $text = preg_replace('/border="0"/i', 'border="0" class="MY_CUSTOM_CLASS"', $text);
   }
   return $text;
}
register_cp_trigger('CP_IMGDIV_img_class');
 
 
/* ------- and the next one
function CP_Other_CP($text, & $data) {
   if($data['acontent_type'] == XX) { // XX is CP Other CP
      $text = custom processing ;
   }
   return $text;
}
register_cp_trigger('CP_Other_CP');
---------- and so on */
 
?>


2. example: CP_PLAINTEXT_P

The contentpart plain text is delivering out the content between <p> … </p> tags. Depending upon planning of the side this is unfavorable in many cases. These tags can be quite simply eliminated.

cp plaintext

function ($text, & $data) {
    if($data['acontent_type'] == 0) { // 0 is CP plain text
 
        $text = preg_match("/\<p\>(.*?)\<\/p\>/si", $text, $g) ? $g[1] : $text;
    }
    return $text;
}
register_cp_trigger('CP_PLAINTEXT_P');


3. example: CP_PLAINTEXT_P_BR

The contentpart plain text replaces several successive <br /> <br /> to one <p> tag. To cancel this behavior, the following trigger can be used. (Every <p> and </p> is converted into <br />).

cp_plaintext_p_br.php

<?php
// -------------------------------------------------------------------------------------------
// obligate check for phpwcms constants
  if (!defined('PHPWCMS_ROOT')) {
    die("You Cannot Access This Script Directly, Have a Nice Day."); }
// -------------------------------------------------------------------------------------------
 
   function CP_PLAINTEXT_P_BR($text, & $data) {
 
      if( $data['acontent_type'] == 0  )  // CP: 0 => plain text
      {
         $text = str_replace('<p>', '<br />', $text);
         $text = str_replace('</p>', '<br />', $text);
      }
      return $text;
   }
 
   register_cp_trigger('CP_PLAINTEXT_P_BR');
?>


4. example: Shorten the CAPTION text

When using the CPs image <div> and image special, the caption text is to be shortened for the the simple FE output. In LightBox the whole caption text is available.

Assumed template entry:

[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]

It is triggered to the character sequence <span class=“cut_caption”> cption-text </span>.
caption-Text is thus separated, selected and processed.
The place <span …> …. </span> is signed over with the result.

In this example the character stream substr('$1', 0, 8) from position 0 to 8 is cutting out and returned.

Result: 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);
      }
 
      return $text;
   }
 
   register_cp_trigger('CP_CUT_CAPTION_TEXT');
 
?>


5. example: Shorten the CAPTION text V1.1

FIXME translate

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

// -------------------------------------------------------------------------------------------
// 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');
english/phpwcms_replacer_rts/frontend_init/cp_trigger.1242690183.txt.gz · Last modified: 2018/06/03 18:08 (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