Gästebucheintrag verbergen

Eine kleine Erweiterung um im Gästebuch neue Einträge unsichtbar zu schalten, bis diese im BE editiert (freigegeben) worden sind.

Ablauf:

  • Nach dem Absenden eines neuen Eintrags wird dem Message-Text automatisch ein ”[##]” vorangestellt (Mini-Hack).
  • Alle Einträge die ein ”[##]” beinhalten werden in der FE-Ausgabe nicht angezeigt, bzw. ein Alternativtext ausgegeben. (Template/cp-trigger Script).
  • Dieses ”[##]” kann im BE aus dem Eintrag gelöscht werden, ab diesem Zeitpunkt ist der Eintrag im FE sichtbar. (Das ”[##]” kann auch im BE hinzugefügt werden, um Einträge zu verstecken).


Gesperrte Einträge:

Entsperrte Einträge:


Voraussetzungen

- dazu sind:

  1. Der Schalter $phpwcms['guestbook_hidden'] = 1; wird in die conf.inc.php eingetragen
  2. Die Datei include/inc_front/content/cnt18.article.inc.php verändern (kleiner Hack)
  3. Im Template template/inc_cntpart/guestbook/*.html mind. zwei neue Tags einsetzen
  4. Das PHP-Script template/inc_script/frontend_init/cp_trig_guestbook.php installieren



Docu: –
Forum: –

Autor: K.Heermann (flip-flop) http://planmatrix.de
CMS Version: >= 1.4x
Version: V1.0 (08.02.2010)
Bedingung:/config/phpwcms/conf.inc.php

  • $phpwcms['allow_ext_init'] = 1;
  • $phpwcms['allow_cntPHP_rt'] = 1;


Tag (in der Vorlage):

<!--GUESTBOOK_ENTRY_START//-->
<!--##Begin-{DBID}##//--> … Eintrag … <!--##End-{DBID}##//-->
<!--GUESTBOOK_ENTRY_END//-->

  • Alles zwischen <!--##Begin-{DBID}##//--> und <!--##End-{DBID}##//--> wird getriggert und wenn ein [##] dort auftaucht nicht ausgeliefert.

In

<!--##:AlternativText AlternativText:##//-->

steht der Alternativtext der angezeigt wird wenn der Eintrag gesperrt ist, z.B. <!--##:<h2>{TIMESTAMP:d.m.Y H:i}</h2> :##//-->.

<!--##:AlternativText AlternativText:##//--> muss irgendwo zwischen <!--##Begin-{DBID}##//--> und <!--##End-{DBID}##//--> gesetzt werden.
(Wird dieser Alternativtext-Tag nicht verwendet, bleibt die Ausgabe für den gesperrten Eintrag leer).


Beispiel:

<!--GUESTBOOK_ENTRY_START//-->
 
  <div class="gbListEntry" id="entry-{DBID}">
 
  <!--##Begin-{DBID}##//-->
 
   <!--##:<h1 style="padding-top:10px">Eintrag am {TIMESTAMP:m/d/Y H:i} von {NAME}</h1>:##//-->
 
    <h1><span class="entryID">entry #{ID} by </span>[URL]<a href="{URL}" target="_blank">{NAME}</a>[/URL][URL_ELSE]{NAME}[/URL_ELSE]</h1>
    <h2>{TIMESTAMP:m/d/Y H:i}[EMAIL] &#8212; <a href="mailto:{EMAIL}">email</a>[/EMAIL]</h2>
    [IMAGE]<div class="gbImage">{IMAGE:50x50x1}</div>[/IMAGE]
    [MSG]<p>{MSG}</p>[/MSG]
 
  <!--##End-{DBID}##//-->
 
  </div>
 
<!--GUESTBOOK_ENTRY_END//-->


conf.inc.php

Mit diesem Schalter wird bestimmt, ob dieses Versteckspiel ein -oder ausgeschaltet ist. (Ist der Schaltet nicht vorhanden ist das gleichbedeutend “0” = aus ).

In der config/phpwcms/conf.inc.php wird eingefügt

$phpwcms['guestbook_hidden']  = 1; // enable|disable hidden guestbook entry +KH090210


Codeschnipsel (Hack)

Dateiname: cnt18.article.inc.php
Ort: include/inc_front/content/

Erweiterung der Datei etwa ab Zeile 387:

Die Zeile

$guestbook['sql'] .= "guestbook_msg='".aporeplace($guestbook['post']['msg'])."', ";


wird ersetzt durch

// Insert tag to hide entry  ================= +KH090210
if ($phpwcms['guestbook_hidden'])
     $guestbook['sql'] .= "guestbook_msg='".'[##]'.aporeplace($guestbook['post']['msg'])."', ";
else $guestbook['sql'] .= "guestbook_msg='".       aporeplace($guestbook['post']['msg'])."', ";
// =========================================== +KH090210


In neueren Versionen des CMS

$guestbook['sql'] .= "guestbook_msg="._dbEscape($guestbook['post']['msg']).", ";


wird ersetzt durch

// Insert tag to hide entry  ================= +KH090210
if ($phpwcms['guestbook_hidden'])
     $guestbook['sql'] .= "guestbook_msg="._dbEscape('[##]' . $guestbook['post']['msg']).", ";
else $guestbook['sql'] .= "guestbook_msg="._dbEscape($guestbook['post']['msg']).", ";
// =========================================== +KH090210


Dokumentation

Die Datei PATCH-DOC01.php im Verzeichnis include/inc_front/content/ ablegen. (Oder an einem anderen Ort und/oder mit anderem Namen - aber immer mit der Endung *.php)

include/inc_front/content/PATCH-DOC01.php

<?php
/* ========================================================
// 09.02.10 KH
 
// Hide guestbook entry with simple tag [##] in message text
// Around line 387
// disble and/or replace the following snipped:
 
 
// guestbook['sql'] .= "guestbook_msg='".aporeplace($guestbook['post']['msg'])."', ";
 
 
// Insert tag to hide entry  ================= +KH090210
if ($phpwcms['guestbook_hidden'])
    $guestbook['sql'] .= "guestbook_msg='".'[##]'.aporeplace($guestbook['post']['msg'])."', ";
else $guestbook['sql'] .= "guestbook_msg='".aporeplace($guestbook['post']['msg'])."', ";
// =========================================== +KH090210
 ======================================================== */
?>


Vorlage

Dateiname: guestbook_vorlage.html
Ort: template/inc_cntpart/guestbook/

Hier müssen noch die Wrapper-Tags eingesetzt werden:

Z.B.:

<!--GUESTBOOK_ENTRY_START//-->
 
    <!--##Begin-{DBID}##//-->
        <!--##:ERSATZTEXT ERSATZTEXT ERSATZTEXT:##//-->
        .....
        .....
    <!--##End-{DBID}##//-->
 
<!--GUESTBOOK_ENTRY_END//-->

<note important> Der Tag <!--##:ERSATZTEXT ERSATZTEXT ERSATZTEXT:##//--> muss innerhalb von
<!--##Begin-{DBID}##//-->
<!--##:ERSATZTEXT ERSATZTEXT ERSATZTEXT:##//-->
<!--##End-{DBID}##//-->
stehen. </note>


PHP

Im Bereich CUSTOM VAR ==========================
kann in der Variablen $replacement_text ein zusätzlicher Text eingetragen werden, der ausgegeben wird, wenn ein Eintrag noch nicht freigegeben ist. Dieser Text wird nur ausgegeben, wenn in der Vorlage ebenfalls der Tag <!--##:AlternativText AlternativText:##//--> gesetzt ist.



Dateiname: cp_trig_guestbook.php
Ort: template/inc_script/frontend_init/

cp_trig_guestbook.php

<?php
/**
 * Hide an guestbook entry with a simple tag [##]
 * 09.02.2010 K.Heermann (flip-flop) http://planmatrix.de
 * Template:
 * <!--GUESTBOOK_ENTRY_START//-->
 *
 *    <!--##Begin-{DBID}##//-->
 *       <!--##:REPTEXT REPTEXT REPTEXT:##//-->
 *       .......
 *       .......
 *    <!--##End-{DBID}##//-->
 *
 *<!--GUESTBOOK_ENTRY_END//-->
 *
 * Tag in message: [##]
 *
 * If the script find te tag [##] in a guestbook message, this message kicked out for output and
 * a replacement text in <!--##:REPTEXT REPTEXT REPTEXT:##//--> appears.
 *
 * CUSTOM VAR:
 * $guestbook_hidden = 1;   // if not set in the config
 * $entry_count      = 20;  // only the last XX entries are processed
 * $replacement_text = '';  // additional replacement text
 *
*/
 
// -------------------------------------------------------------------------------------------
// obligate check for phpwcms constants
  if (!defined('PHPWCMS_ROOT')) {die("You Cannot Access This Script Directly, Have a Nice Day."); }
// -------------------------------------------------------------------------------------------
 
 
function CP_GUESTBOOK($text, & $data) {
 
    if( $data['acontent_type'] == 18 )  // CP: 18 => guestbook
    {
        // Is the var in config set?
        if (isset($GLOBALS['phpwcms']['guestbook_hidden'])) $guestbook_hidden = $GLOBALS['phpwcms']['guestbook_hidden'];
        else $guestbook_hidden = 1;  // CUSTOM VAR
 
        // CUSTOM VAR ==========================
 
        // For small process runtime, only the last XX entries are processed
        // if you want that all messages are processed, increment the counter e.g. to 10000
        $entry_count = 20;
 
        // additional replacement text
        $replacement_text = ' <span style="color:red"> &nbsp;[[Der Eintrag wird bearbeitet]]</span><br><br>'.LF;
//        $replacement_text = ' <span style="color:red"> &nbsp;[[The entry will be processed]]</span><br><br>'.LF;
 
        // =====================================
 
 
 
        // Cut out text between your tags in template
        preg_match_all('/<!--##Begin-(.*?)##\/\/-->(.*?)<!--##End-(.*?)##\/\/-->/ism',$text, $_text);
 
        if ($_text[2][0]) {  // is there any text available?
 
            foreach ($_text[2] as $key =>$value) {
 
                // Hidden tag [##] find?
                if ( strpos($value, '[##]')!== false ) {
 
                    // Hidden tag entry switched on or off?
                    if ($guestbook_hidden) {
 
                        // replacement text available?
                        if (preg_match('/<!--##:(.*?):##\/\/-->/ism', $value, $_temp)) {
 
                            $value = $_temp[1] . $replacement_text;
                        }
                        else $value = '';  // no entry is shown
 
                    // no hidden tag entry in config, kill the tag for output
                    } else $value = str_replace('[##]','', $value);
 
 
                    $search = '/<!--##Begin-'.$_text[3][$key].'##\/\/-->(.*?)<!--##End-'.$_text[3][$key].'##\/\/-->/ism';
 
                    $text = preg_replace($search, $value, $text,1);
                }
 
                // Only the first XX entries for small runtime
                if ($key > $entry_count) break;
            }
 
            // If you want kill the replacement text comment
//            $text = preg_replace('/<!--##:(.*?):##\/\/-->/ism', '$1', $text);  // Kill all <!--:TEXT TEXT {NAME}://-->
 
        }
 
    }
    return $text;
}
 
register_cp_trigger('CP_GUESTBOOK');
 
?>


deutsch/andere-erweiterungen/hacks/gaestebuch-eintrag-unsichtbar.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