CP-trigger

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

Eine sehr einfache Methode um eine Benutzerfunktion einzubinden, die immer durchlaufen wird, wenn ein ContentPart geparst wird.

Der Unterschied zu einer Funktion in /frontend_render/ liegt in der gezielten Abarbeitung eines Content-Teilbereichs. Es wird nur der Inhalt des/der CPs verarbeitet, nicht der gesamte Inhalt der Seite.

Definition

Datei: /template/inc_script/frontend_init/disabled/trigger_test.php

Diese Datei wird ein Verzeichnis nach oben kopiert in - /template/inc_script/frontend_init/.

Der Ersetzer Tag {CPDATE} wird im ContentPart platziert.

Benutzerfunktionen werden wie folgt definiert:

function cp_trigger_function_name($param1, & $param2) {
   $param1 = do_this_or_that($param2['acontent_id']);
   return $param1;
}
  • cp_trigger_function_name - der eindeutige Funktionsname
  • $param1 - beinhaltet den ContentPart html Quelltext der geparst werden oder auf den ein Benutzerprozess angewendet werden kann.
  • $param2 - ist eine Referenz zu einem Array welches die ContentPart-Werte wie ID, Datum und andere Parameter beinhaltet - zu sehen in der DB Tabelle phpwcms_articlecontent.

Es wird immer $param1; zurückgegeben.

Die Funktion muss in phpwcms registriert werden, damit diese vom System geparst wird:

register_cp_trigger('cp_trigger_function_name', 'LAST');

Die Funktion kann auch auf einen speziellen ContentPart (siehe ContentPart -Typen) begrenzt werden:

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;
}

TABELLE phpwcms_articlecontent

Kurze Beschreibung der Tabelle phpwcms_articlecontent

Einiger der Felder sind sehr speziell. Leider ist die Namensgebung historisch bedingt nicht immer eindeutig.

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

Als Hilfe kann der Aufruf der integrierten Funktion dumpVar($varname); dienen um mehr Imformationen über die tatsächlichen Daten zu erhalten.

ContentPart Typen

Bitte schaue dir folgendes an: ContentPart-Typen

1. Beispiel: CP_IMGDIV_img_class

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

Eine Klasse zu einem Bild hinzufügen, das aus dem CP Bilder <div> generiert wird. Gegeben ist diese Ausgabe:

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

Die Konstruktion soll strukturell etwa so aussehen:

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

Lösungsmethode:

- mit einem Trigger auf border=“0” und Ersetzung nach class=“MY_CUSTOM_CLASS” border=“0” ergibt:

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


Der Ersetzer:

/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. Beispiel: CP_PLAINTEXT_P

Der Contentpart Einfacher Text/plain text liefert seinen Inhalt zwischen <p> … </p> Tags aus. Je nach Planung der Seite ist dies in vielen Fällen ungünstig. Diese Tags können jedoch recht einfach beseitigt werden.

cp plaintext

function CP_PLAINTEXT_P($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. Beispiel: CP_PLAINTEXT_P_BR

Der Contentpart Einfacher Text/plain text ersetzt mehrere aufeinanderfolgende <br /> <br /> in einen einleitenden <p> Tag. Um dieses Verhalten rückgängig zu machen kann der nachfolgende Trigger verwendet werden. (Wandelt alle <p> und </p> in <br /> um).

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. Beispiel: CP_SEARCH_NO_SUMMARY

Der Contentpart Suche/search soll im Suchergebnis nur den Artikeltitel ausgeben ohne den Schlagtext (summary). Im Augenblick (Sept. 2009) ist es nicht möglich im Feld [max. Anzahl Worte (Summary)] den Wert Null zu führen, da dies als “Alles ausgeben” gewertet wird.

Die Standardausgabe umschließt den gefundenen Schlagtext jeweils mit <p>… Summary …</p>. Also ist es möglich hiernach zu suchen und den gesamten Inhalt von <p>…</p> durch eine leere Menge zu ersetzen.

Forum: http://forum.phpwcms.org/viewtopic.php?p=120031#p120031

cp_search_no_sum.php

<?php
// -------------------------------------------------------------------------------------------
// obligate check for phpwcms constants
  if (!defined('PHPWCMS_ROOT')) {
    die("You Cannot Access This Script Directly, Have a Nice Day."); }
// -------------------------------------------------------------------------------------------
// 01.10.09 KH (flip-flop) Kill all summary entries between <p> and </p> in search result
// -------------------------------------------------------------------------------------------
 
   function CP_SEARCH_NO_SUMMARY($text, & $data) {
 
      if( $data['acontent_type'] == 13  )  // CP: 13 => search
      {
        $text = preg_replace("/\<p\>(.*?)\<\/p\>/si", '', $text);  // kill all <p> ....</p>
      }
      return $text;
   }
 
   register_cp_trigger('CP_SEARCH_NO_SUMMARY');
?>


deutsch/ersetzer_rts/frontend_init/cp_trigger.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