Checkbox in Kommentarfunktion einbauen

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
bla!zilla
Regular
Posts: 10
Joined: Wed Apr 09, 2008 1:16 pm

Checkbox in Kommentarfunktion einbauen

Post by bla!zilla »

Hallo Forengemeinde,

ich möchte in die Kommentarfunktion eine Checkbox einbauen, welche aktiviert sein muss, damit das Posting überhaupt gesendet werden kann. Wie kann ich sowas realisieren? Ich habe mich etwas umgesehen, finde aber keinen richtigen Ansatz. Ich nutze S9Y 1.3.

Vielen Dank.

cya
bla!zilla
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Checkbox in Kommentarfunktion einbauen

Post by garvinhicking »

Hi!

Das kannst Du alles über ein Plugin lösen, was grob so aussehen könnte:

Code: Select all

<?php # $Id: serendipity_event_spamblock.php 1852 2007-08-14 18:43:00Z brockhaus $

if (IN_serendipity !== true) {
    die ("Don't hack!");
}

class serendipity_event_spamcheckbox extends serendipity_event {
    var $title        = 'Anti-Spam Checkbox';
    var $checkboxname = 'mycheckbox';

    function introspect(&$propbag) {
        global $serendipity;

        $propbag->add('name',          $this->title);
        $propbag->add('description',   '');
        $propbag->add('stackable',     false);
        $propbag->add('author',        'Garvin Hicking');
        $propbag->add('requirements',  array(
            'serendipity' => '1.0',
            'smarty'      => '2.6.7',
            'php'         => '4.1.0'
        ));
        $propbag->add('version',       '1.0');
        $propbag->add('event_hooks',    array(
            'frontend_saveComment' => true,
            'frontend_comment'     => true,
        ));
    }

    function event_hook($event, &$bag, &$eventData, $addData = null) {
        global $serendipity;

        if (!isset($hooks[$event])) {
            return false;
        }

        switch($event) {
            case 'frontend_saveComment':
                if ($addData['type'] != 'NORMAL') {
                    // Do not apply to Trackbacks.
                    return true;
                }
                
                if (!isset($_REQUEST[$this->checkboxname])) {
                    $eventData = array('allow_comments' => false);
                    $serendipity['messagestack']['comments'][] = 'Sie müssen die Checkbox aktivieren';
                    return false;
                }

                return true;
                break;

            case 'frontend_comment':
                echo '<input type="checkbox" name="' . $this->checkboxname . '" value="true" /> Checkbox!<br />';
                return true;
                break;
        }
    }
}
Die DAtei unter plugins/serendipity_event_spamcheckbox/serendipity_event_spamcheckbox.php speichern und das Plugin aktivieren. Dann wird die Checbkxo ausgegeben und das Kommentar verworfen wenn sie nicht gesetzt ist.

Wenn Du die Checkbox nicht dort haben willst wo sie üblicherweise erscheint (unter dem Eingabeformular) kannst du auch die commentform.tpl templatedatei anpassen und deine checkbox irgendwo anders hinpacken.

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
bla!zilla
Regular
Posts: 10
Joined: Wed Apr 09, 2008 1:16 pm

Post by bla!zilla »

Hallo,

der Hinweis ist klasse. Danke dafür. Nur mit dem Einbinden hapert es. Die Checkbox soll schon unterhalb des Kommentarfeldes erscheinen, da wo auch die anderen beiden Buttons für die Benachrichtigung und das speichern der Eingaben ist. Nur da erscheint es nicht. Ein Hinweis??

Um das Rätsel aufzulösen: Der Button soll auf jeden Fall angehakt werden, da mit einer Aktivierung der Kommentator der Speicherung seiner IP-Adresse explizit zustimmt. Schönes, neues Datenschutzgesetz in Deutschland. ;)

Danke und Gruß
bla!zilla
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Wie erwähnt, dann musst Du's in die commentform.tpl schreiben.

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
bla!zilla
Regular
Posts: 10
Joined: Wed Apr 09, 2008 1:16 pm

Post by bla!zilla »

Ich habe mich vielleicht unklar ausgedrückt: Die Box erscheint gar nicht. :) Plugin ist eingebunden. Normalerweise müsste ich doch nichts in die commentform.tpl eintragen, oder? Das die Checkbox da erscheint sollte doch das Plugin schon übernehnen, oder habe ich das falsch verstanden?

Danke und Gruß
bla!zilla
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Das Plugin taucht also in der liste deiner installierten ereignisplugins auf, ja?

Genau, das plugin gibt die checkbox aus, unterhalb der eingabebox, sollte es zumindest. :)

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
bla!zilla
Regular
Posts: 10
Joined: Wed Apr 09, 2008 1:16 pm

Post by bla!zilla »

Jap, Plugin taucht auf, ist aktiviert, aber keine Checkbox. Habe schon etwas rumprobiert, aber ich bin halt eher der SAN/NAS/Backup- und nicht PHP Mensch. :D
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Welches template benutzt du? Wie ist deine URL?

Möglicherweise hast Du ja in deiner commentform.tpl den hook deaktiviret den das plugin benötigt ("frontend_comment").


Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
bla!zilla
Regular
Posts: 10
Joined: Wed Apr 09, 2008 1:16 pm

Post by bla!zilla »

Ich benutze mein eigenes Template, ist eine Kopie vom Template "competition". URL ist www.blazilla.de.

Danke.
bla!zilla
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Argl. War ein Bug in dem Plugin-Code. Vor der Abfrage "if $hooks[$event]" fehlt folgende Zeile:

Code: Select all

        $hooks = &$bag->get('event_hooks');
sonst gibts $hooks nämlich nich. :)

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
bla!zilla
Regular
Posts: 10
Joined: Wed Apr 09, 2008 1:16 pm

Post by bla!zilla »

Bingo, das war's. :) Button ist da und Button funktioniert. Vielen, vielen Dank bis dahin. :)

Ich muss jetzt nur noch basteln wie ich das sauber in das commentform.tpl einbaue.
bla!zilla
Regular
Posts: 10
Joined: Wed Apr 09, 2008 1:16 pm

Post by bla!zilla »

Gna! Es will mir nicht gelingen. Kannst du mir netterweise noch einen Ansatz vermitteln wie ich die Checkbox da einbauen muss. Ich habe mir das für die anderen beiden Checkboxen angesehen (Daten speichern und bei Antworten benachrichtigen), steige da aber nicht durch.

Danke und Gruß
bla!zilla
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Einfach den folgenden Absatz ergänzen:

Code: Select all

        <tr>
            <td> </td>
            <td class="serendipity_commentsLabel">
                <input id="checkbox_remember" type="checkbox" name="serendipity[remember]" {$commentform_remember} /><label for="checkbox_remember">{$CONST.REMEMBER_INFO}</label>
    {if $is_allowSubscriptions}
                <br />
                <input id="checkbox_subscribe" type="checkbox" name="serendipity[subscribe]" {$commentform_subscribe} /><label for="checkbox_subscribe">{$CONST.SUBSCRIBE_TO_THIS_ENTRY}</label>
    {/if}

<br />
<input id="checkbox_mycheckbox" name="mycheckbox" type="checkbox" /><label for="checkbox_mycheckbox">Ja, ich will.</label>
            </td>
       </tr>

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
bla!zilla
Regular
Posts: 10
Joined: Wed Apr 09, 2008 1:16 pm

Post by bla!zilla »

Hallo,

ich habe es jetzt etwas anders gelöst. Nicht schön, aber es erfüllt seinen Zweck. Vielen Dank für die klasse Hilfe! :)
Post Reply