Zu 1:rok°! hat geschrieben:schritt 1:
ich möchte adressen aus einer csv-datei in den newsletter importieren, damit ich die dann als abonnenten führen kann.
schritt2:
das gleiche umgedreht, als export. also bestehende abonnenten in eine csv-datei exportieren.
das sollte nat. möglichst in die navi unter "extras > newsletter" (evtl. unter aktionen...)
Eine erste Lösung gab es hier (nur so zur Info): http://www.contenido.org/forum/viewtopi ... 0294#30294
Die ist aber für eine Festintegration in Contenido nicht geeignet. Was ich benötigen würde, ist ein Formular mit einem Edit-Feld und einem Browse-Button, mit dem man die csv-Datei auswählen, hochladen und einlesen kann und welches die Daten nach Prüfung in die DB schreibt. Es ist zunächst nicht notwendig, das im Contenido-Kontext zu tun (das einfummeln würde ich übernehmen, separate PHP-Datei unter Nutzung der Contenido-Klassen genügt völlig, auch grafische Gestaltung ist unwichtig).
Wie Daten in die DB eingetragen werden, kannst Du der contenido/includes.recipients_edit.php entnehmen.
Dazu werden zunächst die Klassen eingebunden und die Objekte initialisiert:
Code: Alles auswählen
cInclude("classes", "class.newsletter.recipients.php");
cInclude("classes", "class.newsletter.groups.php");
$recipients = new RecipientCollection;
$recipient = new Recipient;
Dazu würde in einer einer Schleife immer folgendes gemacht:
Code: Alles auswählen
$recipient = $recipients->create(<E-Mail-Adresse>,<Name>,1);
$idrecipient = $recipient->get("idnewsrcp");
Hat man einen neuen Empfänger angelegt, sollte man schon mal Plugins berücksichtigen (ist Bestandteil der Schleife, wird bei jedem neuen Empfänger ausgeführt):
Code: Alles auswählen
/* Check out if there are any plugins */
if (is_array($cfg['plugins']['recipients'])) {
foreach ($cfg['plugins']['recipients'] as $plugin) {
if (function_exists("recipients_".$plugin."_wantedVariables") && function_exists("recipients_".$plugin."_store")) {
$wantVariables = call_user_func("recipients_".$plugin."_wantedVariables");
if (is_array($wantVariables)) {
$varArray = array();
foreach ($wantVariables as $value) {
$varArray[$value] = stripslashes($GLOBALS[$value]);
}
}
$store = call_user_func("recipients_".$plugin."_store", $varArray);
}
}
}
$recipient->store();
Das wars auch schon.
Zu 2:
Eigentlich das Gleiche in grün (Code teilweise aus include.recipients_menu.php):
Code: Alles auswählen
cInclude("classes", "class.newsletter.recipients.php");
cInclude("classes", "class.newsletter.groups.php");
$recipients = new RecipientCollection;
$recipient = new Recipient;
$recipients->setWhere("idclient", $client);
$recipients->setWhere("idlang", $lang);
$recipients->query();
Am Anfang muss man zunächst definieren, um welche Felder es sich so handeln könnte (das kann dann später via Plugin ergänzt/überschrieben werden):
Code: Alles auswählen
/* Initialization */
$aFields = array();
$aFields["name"] = array("field" => "name", "caption" => i18n("Name"), "type" => "base,sort,search");
$aFields["email"] = array("field" => "email", "caption" => i18n("E-Mail"), "type" => "base,sort,search");
$aFields["confirmed"] = array("field" => "confirmed", "caption" => i18n("Confirmed"), "type" => "base");
$aFields["deactivated"] = array("field" => "deactivated", "caption" => i18n("Deactivated"), "type" => "base");
$aDataTable = array();
while ($recipient = $recipients->next()) {
$aDataTable[$recipient->get("idnewsrcp")]["id"] = $recipient->get("idnewsrcp");
foreach ($aFields as $sKey => $aData) {
if (strpos($aData["type"], "base") !== false) {
if ($sKey == "name") {
$name = $recipient->get("name");
if (empty($name)) {
$aDataTable[$recipient->get("idnewsrcp")][$sKey] = $recipient->get("email");
} else {
$aDataTable[$recipient->get("idnewsrcp")][$sKey] = $name;
}
} else {
$aDataTable[$recipient->get("idnewsrcp")][$sKey] = $recipient->get($aData["field"]);
}
} else {
$aDataTable[$recipient->get("idnewsrcp")][$sKey] = call_user_func("recipients_".$aData["field"]."_getvalue", $sKey);
}
}
if ($_REQUEST["filter"] != "") {
if ($_REQUEST["searchin"] == "--all--" || $_REQUEST["searchin"] == "") {
$found = false;
foreach ($aDataTable[$recipient->get("idnewsrcp")] as $key => $value) {
if (strpos($value, htmlentities($_REQUEST["filter"])) !== false) {
$found = true;
}
}
if ($found == false) {
unset($aDataTable[$recipient->get("idnewsrcp")]);
}
} else {
if (strpos($aDataTable[$recipient->get("idnewsrcp")][$_REQUEST["searchin"]], htmlentities($_REQUEST["filter"])) === false) {
unset($aDataTable[$recipient->get("idnewsrcp")]);
}
}
}
}
if ($_REQUEST["sortorder"] == "asc") {
$sortorder = SORT_ASC;
} else {
$sortorder = SORT_DESC;
}
$aDataTable = array_csort($aDataTable, $_REQUEST["sortby"], $sortorder);
Viel Spaß. Für Rückfragen stehe ich gerne zur Verfügung, würde mich aber zunächst um ein rumspielen, z.B. mit include.recipients_menu.php, freuen. Wie gesagt, um die Integration in Contenido-Menüs und das (spätere) Plugin-Abrakadabra würde ich mich kümmern, das Bekommen der Datei, das Einlesen, Aufbereiten, Speichern und wieder die Ausgabe in eine cvs-Datei mit dem Senden an den Nutzer would be yours (bitte das Senden nicht vergessen - habe ich noch nicht gemacht, würde mir daher echt Arbeit abnehmen).
Wenn akzeptabel, bitte in etwa die vorgefundene Nomenklatur verwenden, d.h. Variablen mit Typ definieren, e.g. $sValue (für string-value, a steht z.B. für Array). Das ist im Code nicht so brennend konsistent, ich weiss, ich arbeite dran ...
Gruß
HerrB