Der Bereich Shopware Labs ist die Plattform für alle Entwickler. Hier findet man technische Dokumentationen und zahlreiche Tipps und Tricks rund um das Thema Programmieren. In dieser Rubrik stellen außerdem die Entwickler der shopware AG neue und experimentelle Lösungsansätze vor. Neue Funktionen, die in dieser Rubrik bereitgestellt werden, sind teilweise auch für zukünftige Releases geplant. Die Funktionen können dann ohne Programmierkenntnisse zukünftig direkt im Shopware Backend konfiguriert werden oder werden über Plugins bereitgestellt. Informationen über neue, geplante Funktionen finden Sie in unserer Roadmap.
Bitte beachten Sie, dass die hier bereitgestellten Lösungsansätze nicht offiziell supportet werden und nur eingebaut werden sollten, sofern Sie über das entsprechende, technische Wissen verfügen.
Tutorial:Einrichtung Double Opt-In Funktion
0 Kommentare| ab Version: | 3.0.3 | bis Version: | 3.0.4 |
Inhaltsverzeichnis
- 1 Informationen zum Tutorial
- 2 Datenbankanpassungen
- 2.1 Grundeinstellungen
- 2.2 eMail-Vorlagen für Double-Opt-In
- 3 Neue Datenbank-Tabelle
- 4 Erweiterung der Tabelle s_articles_vote
- 5 Einfügen neuer Textbausteine
- 6 Dateianpassungen
- 6.1 Template-Anpassungen
- 6.2 Viewportanpassungen
- 6.2.1 s_detail.php
- 6.2.2 s_newsletter.php
- 6.3 s_registerFC.php
Informationen zum Tutorial
Hinweis: Bitte beachten Sie, dass diese Funktion seit der Version 3.04 standardmäßig
Mit Hilfe der folgenden Anpassungen, haben Sie die Möglichkeit Newsletter-Anmeldungen und Artikel-Bewertungen durch den Benutzer zusätzlich per eMail bestätigen zu lassen.
Datenbankanpassungen
Grundeinstellungen
Hinzufügen der neuen Einstellungsfelder für das aktivieren / deaktivieren des Double-Opt-Ins für Newsletter-Anmeldungen und Bewertungen.
Die Einstellungsfelder stehen unter Grundeinstellungen > eMail-Einstellungen bereit.
SET @parent = (SELECT `group` FROM `s_core_config` WHERE `name` = "sSEND_CONFIRM_MAIL"); INSERT INTO `s_core_config` ( `id` , `group` , `name` , `value` , `description` , `required` , `warning` , `detailtext` , `multilanguage` ) VALUES ( NULL , @parent, 'sOPTINNEWSLETTER', '1', 'Double-Opt-In für Newsletter-Anmeldungen', '', '', '', '' ); INSERT INTO `s_core_config` ( `id` , `group` , `name` , `value` , `description` , `required` , `warning` , `detailtext` , `multilanguage` ) VALUES ( NULL , @parent, 'sOPTINVOTE', '1', 'Double-Opt-In für Artikel-Bewertungen', '', '', '', '' );
eMail-Vorlagen für Double-Opt-In
Die Benachrichtigung basiert auf eMail-Vorlagen. Hierzu werden die Vorlagen sOPTINNEWSLETTER für Newsletter-Anmeldungen, sowie sOPTINVOTE für Artikelbewertungen verwendet.
INSERT INTO `s_core_config_mails` ( `id` , `name` , `frommail` , `fromname` , `subject` , `content` , `contentHTML` , `ishtml` , `attachment` ) VALUES ( NULL , 'sOPTINNEWSLETTER', 'demo@shopware2.de', 'demo@shopware2.de', 'Bitte bestätigen Sie Ihre Newsletter-Anmeldung', 'Hallo, vielen Dank für Ihre Anmeldung zu unserem regelmäßig erscheinenden Newsletter. Bitte bestätigen Sie die Anmeldung über den nachfolgenden Link: {$sConfirmLink} Viele Grüße', '', '0', '' ); INSERT INTO `s_core_config_mails` ( `id` , `name` , `frommail` , `fromname` , `subject` , `content` , `contentHTML` , `ishtml` , `attachment` ) VALUES ( NULL , 'sOPTINVOTE', 'demo@shopware2.de', 'demo@shopware2.de', 'Bitte bestätigen Sie Ihre Artikel-Bewertung', 'Hallo, vielen Dank für die Bewertung des Artikels {$sArticle.articleName}. Bitte bestätigen Sie die Bewertung über nach den nachfolgenden Link: {$sConfirmLink} Viele Grüße', '', '0', '' );
Neue Datenbank-Tabelle
CREATE TABLE `s_core_optin` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `datum` DATETIME NOT NULL , `hash` VARCHAR( 255 ) NOT NULL , `data` TEXT NOT NULL , INDEX ( `datum` ) , UNIQUE ( `hash` ) ) ENGINE = MYISAM ;
Erweiterung der Tabelle s_articles_vote
ALTER TABLE `s_articles_vote` ADD `email` VARCHAR( 255 ) NOT NULL;
Einfügen neuer Textbausteine
INSERT INTO `s_core_config_text` ( `id` , `group` , `name` , `value` , `description` ) VALUES ( NULL , '9', 'sArticleyourmail', 'Ihre eMail-Adresse', 'Ihre eMail-Adresse'); INSERT INTO `s_core_config_text` ( `id` , `group` , `name` , `value` , `description` ) VALUES ( NULL , '9', 'sArticleCommitSavedOptIn', 'Vielen Dank für die Abgabe Ihrer Bewertung! Sie erhalten in wenigen Minuten eine Bestätigungsmail. Bestätigen Sie den Link in dieser eMail um die Bewertung freizugeben.', 'Bewertung erfolgreich gespeichert (Opt-In)' ); INSERT INTO `s_core_config_text` ( `id` , `group` , `name` , `value` , `description` ) VALUES ( NULL , '12', 'sMailConfirmation', 'Vielen Dank. Wir haben Ihnen eine Bestätigungsemail gesendet. Klicken Sie auf den enthaltenen Link um Ihre Anmeldung zu bestätigen.', '' );
Dateianpassungen
Template-Anpassungen
Damit die Bewertungen per eMail bestätigt werden können, muss die eMail-Adresse des Kunden abgefragt werden. Öffnen Sie hierzu die Datei /templates/0/de/html/articles/article_details_middle.tpl
Ersetzen Sie die Zeile (~ 500)
<div class="accept_box" style="margin:10px 0;">{* sSnippet: the commit save was successful *}{$sConfig.sSnippets.sArticleCommitSaved}</div>
mit
{if $sConfig.sOPTINVOTE && !$_GET.sConfirmation} <div class="accept_box" style="margin:10px 0;">{* sSnippet: the commit save was successful *}{$sConfig.sSnippets.sArticleCommitSavedOptIn}</div> {else} <div class="accept_box" style="margin:10px 0;">{* sSnippet: the commit save was successful *}{$sConfig.sSnippets.sArticleCommitSaved}</div> {/if}
Fügen Sie unter (~ Zeile 555)
<p><label for="sVoteName">{* sSnippet: your name *}{$sConfig.sSnippets.sArticleyourname}*: </label> <input name="sVoteName" type="text" id="sVoteName" value="{$_POST.sVoteName}" class="normal {if $sErrorFlag.sVoteName}instyle_error{/if}" /></p>
ein:
{if $sConfig.sOPTINVOTE} <p><label for="sVoteMail">{* sSnippet: your email *}{$sConfig.sSnippets.sArticleyourmail}*: </label> <input name="sVoteMail" type="text" id="sVoteMail" value="{$_POST.sVoteMail}" class="normal {if $sErrorFlag.sVoteMail}instyle_error{/if}" /></p> {/if}
Viewportanpassungen
Für die Benachrichtigungsfunktion müssen folgende Viewportanpassungen vorgenommen werden. Die Viewports finden Sie in dem Ordner engine/core/class/viewports.
s_detail.php
Ersetzen Sie den folgenden Codeblock
if ($this->sSYSTEM->_POST["sAction"]=="saveComment"){ if (!$this->sSYSTEM->_POST["sVoteName"]) $sErrorFlag["sVoteName"] = true; if (!$this->sSYSTEM->_POST["sVoteSummary"]) $sErrorFlag["sVoteSummary"] = true; $captcha = $this->sSYSTEM->sCONFIG["sTEMPLATEPATH"]."/".$this->sSYSTEM->sLanguageData[$this->sSYSTEM->sLanguage]["isocode"]."/media/img/default/captcha.jpg"; if (is_file($captcha)){ if ($this->sSYSTEM->_POST["sCaptcha"] != str_replace(" ","",$this->sSYSTEM->_SESSION["sCaptcha"]) && isset($this->sSYSTEM->_SESSION["sCaptcha"])){ $sErrorFlag["sCaptcha"] = true; } } //if (!$this->sSYSTEM->_POST["sVoteComment"]) $sErrorFlag["sVoteComment"] = true; if (!count($sErrorFlag)){ $this->sSYSTEM->sMODULES['sArticles']->sSaveComment($this->sSYSTEM->_GET['sArticle']); $this->sSYSTEM->_POST['sAction'] = "saveComment"; } } $sArticle = ($this->sSYSTEM->sMODULES['sArticles']->sGetArticleById());
durch:
$sArticle = ($this->sSYSTEM->sMODULES['sArticles']->sGetArticleById()); if ($this->sSYSTEM->_GET["sConfirmation"]){ $hash = $this->sSYSTEM->sDB_CONNECTION->qstr($this->sSYSTEM->_GET["sConfirmation"]); $getVote = $this->sSYSTEM->sDB_CONNECTION->GetRow(" SELECT * FROM s_core_optin WHERE hash = $hash "); if (!empty($getVote["data"])){ $this->sSYSTEM->_POST = unserialize($getVote["data"]); $voteConfirmed = true; $this->sSYSTEM->sDB_CONNECTION->Execute(" DELETE FROM s_core_optin WHERE hash = $hash "); }else { $voteConfirmed = false; } }else { $voteConfirmed = false; } if ($this->sSYSTEM->_POST["sAction"]=="saveComment"){ if (!$this->sSYSTEM->_POST["sVoteName"]) $sErrorFlag["sVoteName"] = true; if (!$this->sSYSTEM->_POST["sVoteSummary"]) $sErrorFlag["sVoteSummary"] = true; $captcha = $this->sSYSTEM->sCONFIG["sTEMPLATEPATH"]."/".$this->sSYSTEM->sLanguageData[$this->sSYSTEM->sLanguage]["isocode"]."/media/img/default/captcha.jpg"; if (is_file($captcha) && empty($voteConfirmed)){ if ($this->sSYSTEM->_POST["sCaptcha"] != str_replace(" ","",$this->sSYSTEM->_SESSION["sCaptcha"]) && isset($this->sSYSTEM->_SESSION["sCaptcha"])){ $sErrorFlag["sCaptcha"] = true; } } if (!empty($this->sSYSTEM->sCONFIG["sOPTINVOTE"]) && (empty($this->sSYSTEM->_POST["sVoteMail"]) || !preg_match("/^(([^<>()[\]\\\\.,;:\s@\"]+(\.[^<>()[\]\\\\.,;:\s@\"]+)*)|(\"([^\"\\\\\r]|(\\\\[\w\W]))*\"))@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([a-z\-0-9áàäçéèêñóòôöüæøå]+\.)+[a-z]{2,}))$/i", $this->sSYSTEM->_POST["sVoteMail"]))){ $sErrorFlag["sVoteMail"] = true; } if (!count($sErrorFlag)){ // Opt-In for Voting if (!empty($this->sSYSTEM->sCONFIG["sOPTINVOTE"]) && empty($voteConfirmed)){ // Send eMail-confirmation first $mail = new PHPMailer; $mail->IsHTML($this->sSYSTEM->sCONFIG['sTemplates']['sOPTINVOTE']['ishtml']); $mail->From = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINVOTE']['frommail']; $mail->FromName = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINVOTE']['fromname']; $mail->Subject = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINVOTE']['subject']; if ($this->sSYSTEM->sCONFIG['sTemplates']['sOPTINVOTE']['ishtml']){ $mail->IsHTML(1); $mail->Body = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINVOTE']['contentHTML']; $mail->AltBody = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINVOTE']['content']; }else { $mail->IsHTML(0); $mail->Body = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINVOTE']['content']; } // Generate confirmation link $hash = md5(uniqid(rand())); $data = $this->sSYSTEM->sDB_CONNECTION->qstr(serialize($_POST)); $link = $this->sSYSTEM->rewriteLink(array( 2=>$sArticle["linkDetails"],3=>$sArticle["articleName"],4=>"Test" ),true); $link .= "?sConfirmation=$hash"; $mail->Body = str_replace("{\$sConfirmLink}",$link,$mail->Body); $mail->Body = str_replace("{\$sArticle.articleName}",$sArticle["articleName"],$mail->Body); $mail->AltBody = str_replace("","",$mail->AltBody); $this->sSYSTEM->sDB_CONNECTION->Execute(" INSERT INTO s_core_optin (datum,hash,data) VALUES ( now(),'$hash',$data ) "); $mail->ClearAddresses(); $mail->AddAddress($this->sSYSTEM->_POST["sVoteMail"], ""); $mail->Send(); }else { $this->sSYSTEM->sMODULES['sArticles']->sSaveComment($this->sSYSTEM->_GET['sArticle']); } $this->sSYSTEM->_POST['sAction'] = "saveComment"; // Opt-In for Voting } }
s_newsletter.php
Ersetzen Sie den Inhalt der kompletten Datei durch
<? class sViewportNewsletter{ var $sSYSTEM; function sRender() { $variables = array(); if ($this->sSYSTEM->_GET["sConfirmation"]){ $hash = $this->sSYSTEM->sDB_CONNECTION->qstr($this->sSYSTEM->_GET["sConfirmation"]); $getVote = $this->sSYSTEM->sDB_CONNECTION->GetRow(" SELECT * FROM s_core_optin WHERE hash = $hash "); if (!empty($getVote["data"])){ $this->sSYSTEM->_POST = unserialize($getVote["data"]); $voteConfirmed = true; $this->sSYSTEM->sDB_CONNECTION->Execute(" DELETE FROM s_core_optin WHERE hash = $hash "); }else { $voteConfirmed = false; } }else { $voteConfirmed = false; } if(isset($this->sSYSTEM->_POST["newsletter"])) { if($this->sSYSTEM->_POST["chkmail"]==1){ $unsubscribe = false; if (empty($this->sSYSTEM->sCONFIG["sOPTINNEWSLETTER"]) || $voteConfirmed){ // Send mail to subscriber $mail = new PHPMailer; $mail->IsHTML($this->sSYSTEM->sCONFIG['sTemplates']['sNEWSLETTERCONFIRMATION']['ishtml']); $mail->From = $this->sSYSTEM->sCONFIG['sTemplates']['sNEWSLETTERCONFIRMATION']['frommail']; $mail->FromName = $this->sSYSTEM->sCONFIG['sTemplates']['sNEWSLETTERCONFIRMATION']['fromname']; $mail->Subject = $this->sSYSTEM->sCONFIG['sTemplates']['sNEWSLETTERCONFIRMATION']['subject']; if ($this->sSYSTEM->sCONFIG['sTemplates']['sNEWSLETTERCONFIRMATION']['ishtml']){ $mail->IsHTML(1); $mail->Body = $this->sSYSTEM->sCONFIG['sTemplates']['sNEWSLETTERCONFIRMATION']['contentHTML']; $mail->AltBody = $this->sSYSTEM->sCONFIG['sTemplates']['sNEWSLETTERCONFIRMATION']['content']; }else { $mail->IsHTML(0); $mail->Body = $this->sSYSTEM->sCONFIG['sTemplates']['sNEWSLETTERCONFIRMATION']['content']; } $mail->Body = str_replace("{sMAIL}",$email,$mail->Body); $mail->ClearAddresses(); $mail->AddAddress($this->sSYSTEM->_POST["newsletter"], ""); $mail->Send(); if (empty($this->sSYSTEM->_POST["sCustomer"])){ $variables["sStatus"] = $this->sSYSTEM->sMODULES['sAdmin']->sNewsletterSubscription($this->sSYSTEM->_POST["newsletter"],$unsubscribe); }else { $this->sSYSTEM->sMODULES['sAdmin']->sSaveRegisterNewsletter(array("auth"=>array("email"=>$this->sSYSTEM->_POST["newsletter"]))); $variables["sStatus"] = array("code"=>3,"message"=>$this->sSYSTEM->sCONFIG['sSnippets']["sInfoEmailRegiested"]); } }else { // Send eMail-confirmation first $mail = new PHPMailer; $mail->IsHTML($this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['ishtml']); $mail->From = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['frommail']; $mail->FromName = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['fromname']; $mail->Subject = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['subject']; if ($this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['ishtml']){ $mail->IsHTML(1); $mail->Body = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['contentHTML']; $mail->AltBody = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['content']; }else { $mail->IsHTML(0); $mail->Body = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['content']; } // Generate confirmation link $hash = md5(uniqid(rand())); $data = $this->sSYSTEM->sDB_CONNECTION->qstr(serialize($this->sSYSTEM->_POST)); $link = "http://".$this->sSYSTEM->sCONFIG["sBASEPATH"]."/".$this->sSYSTEM->sCONFIG["sBASEFILE"]."?sViewport=newsletter"; $link .= "&sConfirmation=$hash"; // Setting status-code $variables["sStatus"]["code"] = 3; $variables["sStatus"]["message"] = $this->sSYSTEM->sCONFIG['sSnippets']["sMailConfirmation"]; $mail->Body = str_replace("{\$sConfirmLink}",$link,$mail->Body); $mail->AltBody = str_replace("","",$mail->AltBody); $this->sSYSTEM->sDB_CONNECTION->Execute(" INSERT INTO s_core_optin (datum,hash,data) VALUES ( now(),'$hash',$data ) "); $mail->ClearAddresses(); $mail->AddAddress($this->sSYSTEM->_POST["newsletter"], ""); $mail->Send(); } } else{ $unsubscribe = true; $variables["sStatus"] = $this->sSYSTEM->sMODULES['sAdmin']->sNewsletterSubscription($this->sSYSTEM->_POST["newsletter"],$unsubscribe); } } $variables["sBreadcrumb"] = array(0=>array("name"=>$this->sSYSTEM->sCONFIG['sViewports'][$this->sSYSTEM->_GET["sViewport"]]["name"])); $templates = array("sContainer"=>"/newsletter/newsletter.tpl"); return array("templates"=>$templates,"variables"=>$variables); } } ?>
s_registerFC.php
Fügen Sie unter
if (!count($checkData["sErrorMessages"]) && !$accountError){
ein:
// Send eMail notification if (!empty($this->sSYSTEM->_POST["receiveNewsletter"])){ unset($this->sSYSTEM->_SESSION["sRegister"]["auth"]["receiveNewsletter"]); $mail = new PHPMailer; $mail->IsHTML($this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['ishtml']); $mail->From = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['frommail']; $mail->FromName = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['fromname']; $mail->Subject = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['subject']; if ($this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['ishtml']){ $mail->IsHTML(1); $mail->Body = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['contentHTML']; $mail->AltBody = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['content']; }else { $mail->IsHTML(0); $mail->Body = $this->sSYSTEM->sCONFIG['sTemplates']['sOPTINNEWSLETTER']['content']; } // Generate confirmation link $hash = md5(uniqid(rand())); $data = $this->sSYSTEM->sDB_CONNECTION->qstr(serialize(array("newsletter"=>$this->sSYSTEM->_POST["email"],"chkmail"=>1,"sCustomer"=>1))); $link = "http://".$this->sSYSTEM->sCONFIG["sBASEPATH"]."/".$this->sSYSTEM->sCONFIG["sBASEFILE"]."?sViewport=newsletter"; $link .= "&sConfirmation=$hash"; $mail->Body = str_replace("{\$sConfirmLink}",$link,$mail->Body); $mail->AltBody = str_replace("","",$mail->AltBody); $this->sSYSTEM->sDB_CONNECTION->Execute(" INSERT INTO s_core_optin (datum,hash,data) VALUES ( now(),'$hash',$data ) "); $mail->ClearAddresses(); $mail->AddAddress($this->sSYSTEM->_POST["email"], ""); $mail->Send(); }
Artikel-PDF erstellen
Artikel bewerten
Kommentare:
Artikel kommentieren
Weitere interessante Artikel:
Bestell-Nr.: 78432_
Lieferzeit ca. 5 Tage
Preise inkl. gesetzlicher
MwSt. zzgl. Versandkosten*
Preise inkl. gesetzlicher
MwSt. + Versandkosten*
Kategorien: