Shopware Knowledgebase

Dieser Artikel ist noch nicht für Shopware 3.5 geprüft bzw. freigegeben.
Shopware Labs

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

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

Waren diese Informationen hilfreich? Ja Nein


Kommentare:

Artikel kommentieren


Die mit einem * markierten Felder sind Pflichtfelder.

Weitere interessante Artikel:

Bezeichnung:
Rating:
Klicks:
Datum:

Bestell-Nr.: 78432_

Lieferzeit ca. 5 Tage

€ 1,00

Preise inkl. gesetzlicher
MwSt. zzgl. Versandkosten*

€ 1,00

Preise inkl. gesetzlicher
MwSt. + Versandkosten*

Kategorien: