{{indexmenu_n>10}} ====== 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 [[:deutsch:phpwcms-system:artikel:contentparts|ContentPart]] geparst wird. !!Der Unterschied zu einer Funktion in [[:deutsch:ersetzer_rts:frontend_render|/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 [[:deutsch:phpwcms-system:artikel:contentparts|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 [[:deutsch:phpwcms-system:artikel:contentparts|ContentPart]] (siehe [[:deutsch:technik:aufruf-interner-funktionen:content_part_typen|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. 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: [[:deutsch:technik:aufruf-interner-funktionen:content_part_typen|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
generiert wird. Gegeben ist diese Ausgabe: Alt-Text Die Konstruktion soll strukturell etwa so aussehen: ==== Lösungsmethode: ==== - mit einem Trigger auf **border="0"** und Ersetzung nach **class="MY_CUSTOM_CLASS" border="0"** ergibt: \\ Alt-Text \\ **Der Ersetzer:** \\ ===== 2. Beispiel: CP_PLAINTEXT_P ===== Der Contentpart //Einfacher Text/plain text// liefert seinen Inhalt zwischen **

...

** Tags aus. Je nach Planung der Seite ist dies in vielen Fällen ungünstig. Diese Tags können jedoch recht einfach beseitigt werden. function CP_PLAINTEXT_P($text, & $data) { if($data['acontent_type'] == 0) { // 0 is CP plain text $text = preg_match("/\(.*?)\<\/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 **

** in einen einleitenden **

** Tag. Um dieses Verhalten rückgängig zu machen kann der nachfolgende Trigger verwendet werden. (Wandelt alle **

** und **

** in **
** um). plain text { $text = str_replace('

', '
', $text); $text = str_replace('

', '
', $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 **

... Summary ...

**. Also ist es möglich hiernach zu suchen und den gesamten Inhalt von **

...

** durch eine leere Menge zu ersetzen. Forum: [[http://forum.phpwcms.org/viewtopic.php?p=120031#p120031]] and

in search result // ------------------------------------------------------------------------------------------- function CP_SEARCH_NO_SUMMARY($text, & $data) { if( $data['acontent_type'] == 13 ) // CP: 13 => search { $text = preg_replace("/\(.*?)\<\/p\>/si", '', $text); // kill all

....

} return $text; } register_cp_trigger('CP_SEARCH_NO_SUMMARY'); ?>
\\