Hallo zusammen,
zurzeit versuche ich ein Modul umzusetzen, welches Datenbankeinträge aus einer Newsletter-Engine (“Sendy”) in die Shop-Datenbank kopiert (also in eine Richtung “synchronisiert”). Den Ansatz habe ich zwar, jedoch scheitert es im Umgang mit der Oxid-Struktur.
Beim Eintragen in den Newsletter (form submit event) wird das Skript, welches als PHP-Datei in meinem Modul vorliegt, ausgeführt. Soweit sogut.
Nun möchte ich in diesem Skript mit der dafür vorgesehenen Oxid-Funktion “oxRegistry::getConfig()” die Werte der Moduleinstellungen abrufen. Leider findet der Parser Registry.php nicht, egal wie ich es versuche (über Namespace, Aufrufendes Skript in Klasse gepackt, …). Laut Error-Log sucht er im Verzeichnis meiner Modulklasse, welche die Funktion aufruft. Irgendwie logisch. Trotzdem scheint es in den Standard-Modulen, an denen ich mich orientiert habe, so problemlos zu funktionieren.
footer.tpl
<form action="modules/kcs/kcs_sendysync/classes/kcs_sendysync__subscribe_noname.php" class="d-flex" method="POST" accept-charset="utf-8">
<div class="col d-flex p-0">
<input type="email" name="newsletter_email" maxlength="200" placeholder="Ihre E-Mail-Adresse" required class="bg_dg b_1 bc_lg br_0 w-100 px-3 py-2"/>
</div>
<div class="col-auto px-0">
<button class="bg_red b_0 fw-bold ff_headline py-3 px-4"
type="submit"
name="newsletter_submit">
ABONNIEREN
</button>
</div>
</form>
→ aufgerufene kcs_sendysync__subscribe_noname.php des Moduls:
<?php
namespace kcs\kcs_sendysync\classes;
use \OxidEsales\Eshop\Core\Registry;
use oxRegistry;
// Konfigs auslesen
//$myConfig = \OxidEsales\Eshop\Core\Registry::getConfig(); // fails
//$myConfig = Registry::getConfig(); // fails
//$myConfig = oxRegistry::getConfig(); // fails
//$sendyRoot = \OxidEsales\Eshop\Core\Registry::get("sSendyRoot"); // fails
// Sendy initiieren
//$sendyRoot = $myConfig->getConfigParam('sSendyRoot');
$list = 'abc';
$api_key = 'abc123';
$boolean = 'false';
$success_url = 'success.php';
$fail_url = 'failed.php';
// Informationen aus POST holen
$email = $_POST['newsletter_email'];
// Query für Eintrag in SendyDB konstruieren
$postdata = http_build_query(
array(
'email' => $email,
'list' => $list,
'api_key' => $api_key,
'boolean' => $boolean
)
);
// Neuen Subscriber in SendyDB per Sendy-API eintragen
$opts = array('http' => array('method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata));
$context = stream_context_create($opts);
$result = file_get_contents($sendyRoot.'/subscribe', false, $context);
// Verbindung zu SendyDB herstellen
//require_once $sendyRoot.'/api/_connect.php';
// Download des neuen Eintrags aus der SendyDB
// ...
// Verbindung zu SendyDB schließen
// ...
// Query für Eintrag in OxidDB konstruieren
// ...
// Neuen Subscriber in OxidDB per Oxid-API eintragen
// ...
// TESTING AREA - wrapped as class besser?
echo $sendyRoot;
echo 'Ich bin durchgelaufen!';
/*
public class kcs_sendysync__subscribe_noname {
public function sendyTest() {
$sendyRoot = \OxidEsales\Eshop\Core\Registry::get("sSendyRoot");
echo 'sendyTest() wurde aufgerufen!';
}
}
*/
Der Vollständigkeit halber hier auch die metadata.php des Moduls:
<?php
$sMetadataVersion = '2.1';
$aModule = array(
'id' => 'kcs_sendysync',
'title' => 'SendySync',
'version' => '1.0.1',
'author' => 'Mustermann',
'url' => 'http://www.musterdomain.de',
'email' => '[email protected]',
'thumbnail' => 'logo.png',
'settings' => array(
array('group' => 'kcs_sendysync_general', 'name' => 'sSendyRoot', 'type' => 'str', 'value' => 'http://localhost/firma/sendy')
)
);
Hier der aktuelle Output:
Fatal error: Uncaught Error: Class 'oxRegistry' not found in C:\XAMPP\htdocs\firma\oxid\source\modules\kcs\kcs_sendysync\classes\kcs_sendysync__subscribe_noname.php:8
Was mache ich falsch, das ich in meiner Klasse keinen Zugriff auf die Klasse habe? Selbst wenn ich den Namespace als use angebe (was selbst widerrum funktioniert!), sucht er offensichtlich am falschen Ort.