Seite 1 von 1

Newsletter-Blöcken fehlerhaftes auslesen von Plugin-Date

Verfasst: Do 28. Feb 2008, 19:08
von OliverL
- CONTENIDO 4.6.23 -

Ich habe ein Empfänger-Plugin (recipients) für einen Kunden geschrieben in dem eine Personalisierteausgabe der Anrede erstellt wird mit den Feldern: Geschlecht und Vorname. (Nach-)Name existiert ja schon.
Als Wandet variable habe ich "geschlecht", "vorname" und zusätzlich "brief_anrede". Und bei den Get-Funktionen Komuliertedaten aus
Geschlecht + Vorname + Name = brief_anrede

Im Testnewsletter an mich ist alles OK.
Im Blockversand bei 1 Mail pro Block ist alles gut.

Mache ich 50 Mails pro Block steht in der ersten mail alles was soll
aber in der zweiten Mail die Daten von der ersten Mail
und in der dritten die Daten auch aus der ersten Mail
...

ich möchte dem Kunden aber nicht zumuten das er 6300 Mails in sekunden-Takt verschicken muss.

Hat jemand ne Lösung oder Post?
Richtig cool wäre ne vollständige Datei :lol:

Ich denke das es in der Datei 'class.newsletter.jobs.php' in Zeile um 404-427 steht aber ich finde es nicht.

Verfasst: Do 13. Mär 2008, 18:34
von emergence
wie sieht das plugin aus ?

Verfasst: Fr 14. Mär 2008, 08:42
von OliverL

Code: Alles auswählen

<?php
/*****************************************
* File      :   $RCSfile: company.php,v $
* Project   :   Contenido
* Descr     :   Navision-Plugin
* Modified  :   $Date: 2008/02/01 00:00:00 $
*
*  teammedia GmbH, www.teammedia.net
*
* $Id: company.php,v 1.  2008/02/01 00:00:00 oliver.lohkemper Exp $
******************************************/

function recipients_company_canonicalVariables() {	
	return array(	"company_ad_code" 			=> str_replace("ä","ae", i18n("company_ad_code", 			"recipients_company") ),
								"company_ad_signatur"		=> str_replace("ä","ae", i18n("company_ad_sig", 			"recipients_company") ),
								"company_anrede" 				=> i18n("company_anrede", 			"recipients_company"),
								"company_vorname" 			=> i18n("company_vorname", 			"recipients_company"),
								"company_anrede_code" 	=> i18n("company_anrede_code", 	"recipients_company"),
								"company_paperhead" 		=> i18n("company_paperhead", 		"recipients_company")
								);
}

function recipients_company_getvalue( $field ) {
	global $recipient;
	$access	= array( 'company_ad_code', 'company_anrede', 'company_vorname', 'company_anrede_code' );
										
	if ( in_array($field, $access) ) {
		return $recipient->getProperty( $field, "recipient" );
	}
	elseif( $field == 'company_paperhead' ) {
		$anrede_code 	= $recipient->getProperty( 'company_anrede_code', 	"recipient" );
		$anrede			 	= $recipient->getProperty( 'company_anrede', 				"recipient" );
		$vorname 			= $recipient->getProperty( 'company_vorname', 			"recipient" );
		$name 				= $recipient->get("name");
		
		switch ($anrede_code) {
		case 1:
				if(strtolower($anrede) == 'frau' and $name ) $output = 'Sehr geehrte Frau '.$name.',';
				elseif(strtolower($anrede) == 'herr' and $name ) $output = 'Sehr geehrter Herr '.$name.',';
				else $output = 'Sehr geehrte Damen und Herren,';
			break;
		case 4:
				if( $vorname ) $output = 'Hallo '.$vorname.',';
				elseif( $anrede and $name ) $output = 'Hallo '.$anrede.' '.$name.',';
				else $output = 'Hallo,';
			break;
		case 7:
				$output = ( $anrede and $name ? 'Hallo '.$anrede.' '.$name.',' : 'Sehr geehrte Damen und Herren,' );
			break;
		}
		return $output;
	}
	elseif( $field == 'company_ad_signatur' ) {
		global $cfgClient, $client;
		if( file_exists($cfgClient[$client]['upl']['path'].'newsletter/verkaeufer.txt') ) {
			
			$ad_daten = file($cfgClient[$client]['upl']['path'].'newsletter/verkaeufer.txt');
			$ad_code = $recipient->getProperty( $field, "recipient" );
			
			foreach( $ad_daten as $value ) {
				$kuerzel = strtok($value, ";");
				if( $ad_code == $kuerzel ) $output = str_replace(";", "\n", substr($value, strlen($kuerzel)+1) );
			}
		}
		else {
			return 'Datei existiert nicht!<br>'.$cfgClient[$client]['upl']['frontendpath'].'newsletter/verkaeufer.txt';
		}
	}
}

function recipients_company_getHTMLValue( $field ) {
	global $recipient;
	$access	= array( 'company_ad_code', 'company_anrede', 'company_vorname', 'company_anrede_code' );
	if ( in_array($field, $access) ) return $recipient->getProperty( $field, "recipient" );
	elseif( $field == 'company_paperhead' ) {
		$anrede_code 	= $recipient->getProperty( 'company_anrede_code', 	"recipient" );
		$anrede			 	= $recipient->getProperty( 'company_anrede', 				"recipient" );
		$vorname 			= $recipient->getProperty( 'company_vorname', 			"recipient" );
		$name 				= $recipient->get("name");
		
		switch ($anrede_code) {
		case 1:
				if(strtolower($anrede) == 'frau' and $name ) $output = 'Sehr geehrte Frau '.htmlentities($name).',';
				elseif(strtolower($anrede) == 'herr' and $name ) $output = 'Sehr geehrter Herr '.htmlentities($name).',';
				else $output = 'Sehr geehrte Damen und Herren,';
			break;
		case 4:
				if( $vorname ) $output = 'Hallo '.htmlentities($vorname).',';
				elseif( $anrede and $name ) $output = 'Hallo '.htmlentities($anrede).' '.htmlentities($name).',';
				else $output = 'Hallo,';
			break;
		case 7:
				if( $anrede and $name ) $output = 'Hallo '.htmlentities($anrede).' '.htmlentities($name).',';
				else $output = 'Sehr geehrte Damen und Herren,';
			break;
		}
		return $output;
	}
	elseif( $field == 'company_ad_signatur' ) {
		global $cfgClient, $client;
		if( file_exists($cfgClient[$client]['upl']['path'].'newsletter/verkaeufer.txt') ) {
			
			$ad_daten = file($cfgClient[$client]['upl']['path'].'newsletter/verkaeufer.txt');
			$ad_code = $recipient->getProperty( 'company_ad_code', "recipient" );
			
			foreach( $ad_daten as $value ) {
				$kuerzel = strtok($value, ";");
				if( $ad_code == $kuerzel ) {
					$output = nl2br(htmlentities(str_replace(";", "\n", substr($value, strlen($kuerzel)+1))));
				}
			}
			if( !$output ) {
				$ad_code = "000";
				foreach( $ad_daten as $value ) {
					$kuerzel = strtok($value, ";");
					if( $ad_code == $kuerzel ) {
						$output = nl2br(htmlentities(str_replace(";", "\n", substr($value, strlen($kuerzel)+1))));
					}
				}
			}
			
			return $output;
		}
		else {
			return 'Datei existiert nicht!<br>'.$cfgClient[$client]['upl']['frontendpath'].'newsletter/verkaeufer.txt';
		}
	}
}


function recipients_company_wantedVariables() {
	return array(	'company_ad_code', 'company_ad_signatur', 'company_anrede', 'company_vorname', 'company_anrede_code', 'company_paperhead' );
}

function recipients_company_store( $variables ) {
	global $recipient;
	global $oRecipient;
	if( is_object( $recipient ) ) { // Edit
		$recipient->setProperty('company_ad_code', 			"recipient", $variables['company_ad_code']);
		$recipient->setProperty('company_anrede', 			"recipient", $variables['company_anrede']);
		$recipient->setProperty('company_vorname', 			"recipient", $variables['company_vorname']);
		$recipient->setProperty('company_anrede_code', 	"recipient", $variables['company_anrede_code']);
	}
	elseif( is_object( $oRecipient ) ) { // Data-Import
	
		$klasse_1 = array('w-offiz','m-offiz');
		$klasse_4 = array('m-du', 'w-du');
		
		
		if(     'w' == strtolower(substr($variables['company_anrede'],0,1 )) )
			$variables['company_anrede'] = 'Frau';
		elseif( 'm' == strtolower(substr($variables['company_anrede'],0,1 )) )
			$variables['company_anrede'] = 'Herr';
		else
			$variables['company_anrede'] = '';
		
		
		
		$oRecipient->setProperty('company_ad_code', 		"recipient", $variables['company_ad_code']);
		$oRecipient->setProperty('company_anrede', 			"recipient", $variables['company_anrede']);
		$oRecipient->setProperty('company_vorname', 		"recipient", $variables['company_vorname']);
		
		if( in_array( $variables['company_anrede_code'], $klasse_1 ) AND !$variables['company_anrede_code'] )
			$oRecipient->setProperty('company_anrede_code', "recipient", "1");
		elseif( in_array( $variables['company_anrede_code'], $klasse_4 ) AND !$variables['company_anrede_code'] )
			$oRecipient->setProperty('company_anrede_code', "recipient", "4");
		elseif(  !$variables['company_anrede_code'] )
			$oRecipient->setProperty('company_anrede_code', "recipient", "7");
		else
			$oRecipient->setProperty('company_anrede_code', "recipient", $variables['company_anrede_code'] );
	}
	
	return true;
}
function recipients_company_getTitle() {
	return i18n("Companydata", "frontendusers_company");	
}

function recipients_company_display() {
	global $recipient;
	
	$data['company_ad_code'] 			= $recipient->getProperty("company_ad_code", "recipient");
	$data['company_anrede'] 			= $recipient->getProperty("company_anrede", "recipient");
	$data['company_vorname'] 			= $recipient->getProperty("company_vorname", "recipient");
	$data['company_anrede_code'] 	= $recipient->getProperty("company_anrede_code", "recipient");
	if( !$data['company_anrede_code'] ) $data['company_anrede_code'] = 7;
	
	$company_ad_code 				= new cHTMLTextbox("company_ad_code", $data['company_ad_code'],13);
	$company_vorname 				= new cHTMLTextbox("company_vorname", $data['company_vorname'], 40);
	
	$output = '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
    $output.= '<tr>';
    $output.= '<td>'.(i18n("company_anrede", "recipients_company")).'<br>';
				$output.= '<select name="company_anrede" style="width: 100%;">';
				$output.= '	<option value="Herr"'.($data['company_anrede'] == 'Herr' ? ' selected="selected"' : '').'>Herr</option>';
				$output.= '	<option value="Frau"'.($data['company_anrede'] == 'Frau' ? ' selected="selected"' : '').'>Frau</option>';
				$output.= '	<option value="" '.($data['company_anrede'] == '' ? ' selected="selected"' : '').'>- keine -</option>';
				$output.= '</select>';
		$output.= '</td>';
    $output.= '<td>'.(i18n("company_anrede_code", "recipients_company")).'<br>';
				$output.= '<select name="company_anrede_code" style="width: 100%; text-align: center;">';
				$output.= '	<option value="1"'.($data['company_anrede_code'] == 1 ? ' selected="selected"' : '').'>1</option>';
				$output.= '	<option value="4"'.($data['company_anrede_code'] == 4 ? ' selected="selected"' : '').'>4</option>';
				$output.= '	<option value="7"'.($data['company_anrede_code'] == 7 ? ' selected="selected"' : '').'>7</option>';
				$output.= '</select>';
		$output.= '</td>';
    $output.= '<td>'.(i18n("company_ad_code", "recipients_company")).'<br>'.($company_ad_code->render()).'</td>';
    $output.= '</tr>';
		
    $output.= '<tr><td colspan="3">'.(i18n("company_vorname", "recipients_company")).'<br>'.($company_vorname->render()).'</td></tr>';

    $output.= '<tr><td colspan="3"><hr></td></tr>';
    $output.= '<tr><td colspan="3"><b>'.(i18n("company_paperhead", "recipients_company")).'</b></td></tr>';
		$output.= '<tr><td colspan="3">'.(recipients_company_getHTMLValue( 'company_paperhead' )).'</td></tr>';
    $output.= '<tr><td colspan="3"><b>'.(htmlentities(i18n("company_ad_sig", "recipients_company") )).'</b></td></tr>';
		$output.= '<tr><td colspan="3">'.(recipients_company_getHTMLValue( 'company_ad_signatur' )).'</td></tr>';
	$output.= '</table>';
	
	return $output;
}

?>

Verfasst: Fr 14. Mär 2008, 08:51
von OliverL
Die Variablen "company_paperhead" & "company_ad_signatur" werden für den Newsletter verwendet und werden generiert und nicht eingegeben.

Im _store() ist
$recipient für User-Input
$oRecipient für User-Import
(Leider sind diese Objekte/Variablen nicht identisch)

Ist nen bischen dreckig der Code, aber ich muss
- Daten von einem CRM übernehmen
- will nur: exportieren -> hochladen -> fertig!
- Daten prüfen und eintragen soll der User-Importer
- befütterung des Importers mit ca. 8.000 Datensätzen übernimmt ein Script


mfg Oli

Verfasst: Sa 15. Mär 2008, 19:31
von HerrB
Also das:
Im _store() ist
$recipient für User-Input
$oRecipient für User-Import
(Leider sind diese Objekte/Variablen nicht identisch)
ist ein Bug. Es muss $recipient heißen (bzw. sollte man das Objekt als Parameter übergeben... -> Contenido-Weiterentwicklung). Kommt.

Du kannst auch in include.recipients_import.php auch nach

Code: Alles auswählen

// Store all base data
						$oRecipient->store();
einfach ein $recipient = $oRecipient setzen (sofern nicht PHP5, sonst $recipient = $oRecipient.clone() oder so).

Das andere werde ich mal austesten.

In recipients_company_getvalue ist ein Bug: Dort wird zweimal company_ad_signatur abgefragt, der zweite Code wird wohl nie aufgerufen werden...

Gruß
HerrB

Verfasst: Mo 17. Mär 2008, 08:32
von OliverL
Moin HerrB,

1. Bug in recipients_company_getvalue ist gefixt. (ist gott sei dank niemandem aufgefallen :) )
2. Beim $recipient und $oRecipient hatte ich mir das schon gedacht.
3. Meiner einer wird auch noch nen bischen testen.

schon mal vorab danke für die Hilfe.

mfg Oli