Download-Buttons mit Checkboxen zur Bestätigung


Zur Bestätigung von AGB, Lizenz- und Nutzungsbedingungen

Bei Downloads ist es oft erwünscht, dass die AGB, Lizenz- oder Nutzungsbedingungen vor einem Download vom Nutzer zur Kenntnis genommen werden und diese Kenntnisnahme bestätigt wird. Ein Input-Element mit einer Checkbox allein würde wenig nutzen, wenn keine Prüfung erfolgt, ob ein User eine Checkbox ankreuzte bzw. ein Häkchen setze, bevor ein Download gestartet wird.


Ein hinweisender Text zum Download …

Ich akzeptiere die Lizenz- und Nutzungsbedingungen

Dieses Beispiel ist nur als Demo gedacht, eine Mitteilung wird ausgegeben, es findet jedoch kein Download statt.


Ermöglich wird eine Prüfung dadurch, dass der auf einer Webseite sichtbar vorhandene Download-Button keinen Verweis zu einer Download-Seite oder zu einer Download-Datei enthält, sondern nur eine ID.

Beispiel für die Einbindung der Elemente und des Short-Tags in einem Beitrag:

<button id="d_button" type="button"> » Download « </button>
<input name="d_lizenz" type="checkbox" value="Lizenz" /> Ich akzeptiere

[dld_bestaetigung downloadurl = "download_01"]

Ein Klick auf einen so gestalteten Button wird trotz fehlenden Verweises richtig ausgewertet, da dass eigentliche Klick-Event vom Button-Element mit der ID “d_button” mit Hilfe eines kleinen JavaScripts und einer DOM-Methode abgefangen wird. Gleichzeitig wird mit der Methode addEventListener eine Funktion aufgerufen. Alternativ für ältere Versionen des Internet Explorers wurde zusätzlich noch die Methode attachEvent notiert.
In der aufgerufenen Funktion “leite_zum_Download” erfolgt im Anschluss zuerst eine Prüfung, ob das Input-Element mit der Checkbox den booleschen Wert true liefert, bevor eine Weiterleitung zur Download-Seite oder zur Download-Datei erfolgt. Liefert die Prüfung hingegen den booleschen Wert false, so wird mit alert ein kleines Dialogfenster mit einer Mitteilung für den User ausgegeben.
Wichtig dabei ist, dass die ID vom Button und der Name des Input-Elementes mit den im Plugin verwendeten Bezeichnern übereinstimmen.

Das Script ist gegenwärtig nur für einen Download-Button pro Seite ausgelegt, lässt sich jedoch bei Bedarf erweitern. In der auf dieser Seite vorgestellten Version kann das Plugin jedoch bereits in einer begrenzten Anzahl von Beitragsseiten mit einem Short-Tag eingebunden werden. Dazu muss lediglich das vorhandene Array entsprechend dem Muster mit Verweisen gefüllt werden. Die Auswahl, welcher Download von welcher Seite gestartet werden soll, erfolgt durch die Übergabe des zugehörigen Wertes innerhalb des Short-Tags, im Beispiel “download_01″.
Bei einer größeren Anzahl würde es sich empfehlen, die URLs von den Download-Seiten oder von den Download-Archichen in einer Datenbank-Tabelle zu speichern.

<?php
/**---------------------------------------------------------------------------------
 * Plugin Name:   HM-Download-Check
 * Description:   Einfuegen mit dem Short-Tag [dld_bestaetigung downloadurl = "download_01"]
 * Einzelheiten:  http://www.coder-welten.com/download-buttons-mit-checkboxen-zur-bestaetigung/
 * Autor:         Horst Müller
 * Version:       Beta 0.2
 * Datum:         15. Mai 2014
 * Lizenz:        GPL v2 - http://www.gnu.org/licenses/gpl-2.0.html
 -----------------------------------------------------------------------------------
 */

add_shortcode( "dld_bestaetigung", "kontrolliere_die_bestaetigung" );

function kontrolliere_die_bestaetigung($argument) {

    /*-- Hinweis bei fehlender Bestaetigung --------------------------------------*/

    $text_fuer_user = "Vor einem Download muessen Sie unsere Lizenz- ".
                      "und Nutzungsbedingungen akzeptieren.";

    /*-- Alle Download-Adressen (URLs) in einem Array aufnehmen ------------------*/

    $download_adressen = array(

        "download_01" => "http://www.example.com/download-datei-oder-seite-eins/",
        "download_02" => "http://www.example.com/download-datei-oder-seite-zwei/",
        "download_03" => "http://www.example.com/download-datei-oder-seite-drei/",
        "download_04" => "http://www.example.com/download-datei-oder-seite-vier/",
        "download_05" => "http://www.example.com/download-datei-oder-seite-fuenf/"
    );

    /*-- Uebermittelte Download-URLs pruefen -------------------------------------*/

    $pruefurl = (string) $argument["downloadurl"];
    $pruefurl = preg_replace("/[^a-zA-Z0-9.:\/_-]/", "", $pruefurl);

    if (array_key_exists($pruefurl, $download_adressen)) {
        $download_url = $download_adressen[$pruefurl];
    }
    ob_start();
    ?>
    <!-- Bestaetigung pruefen -->

    <script type="text/javascript">
    "use strict";
    var ladebutton = document.getElementById("d_button");

    if (window.addEventListener) {
        ladebutton.addEventListener("click", leite_zum_Download, false);
    }
    else if (window.attachEvent) {
        ladebutton.attachEvent("onclick", leite_zum_Download);
    }

    function leite_zum_Download() {
        var lizenz = document.getElementsByName("d_lizenz")[0];

        if (lizenz.checked == true) {
            window.location.href = "<?php echo esc_url($download_url); ?>";
        }
        else {
            alert("<?php echo esc_html($text_fuer_user); ?>");
            return false;
        }
    }
    </script>
<?php
    return ob_get_clean();
}
?>

Abschließende Hinweise: Zur Vermeidung von Fehlern sollte das Code-Listing des Plugins mit einem geeigneten Editor und mit UTF-8 ohne BOM abgespeichert werden.

Weiterhin möchten wir darauf hinweisen, dass dieses Plugin nicht in geschäftlichen Angelegenheiten verwendet werden sollte, die eine Registrierung von Usern erfordern oder bei denen ein eindeutiger Nachweis wünschenswert ist, da keinerlei Daten gespeichert werden.
Es könnte jedoch zur Speicherung verwendet werden, wenn vor window.location.href noch eine PHP-Datei aufgerufen wird, die dann eine Bestätigung, eventuell mit weiteren Daten in eine Datei schreibt oder in einer Datenbank speichert oder als E-Mail versendet.



Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *