Hallo Leute,
ich bin relativ neu in den OXID eShop eingestiegen und darf mich gleich bei der CE als Entwickler ranwagen. Hier muss ich eine Art “Shop in Shop” Konstruktion erstellen.
Es soll möglich sein, bestimmten Firmen bestimmte Artikel anzubieten, die jedoch kein anderer Anwender kaufen können darf. Ich muss also Firmen als Gruppen etablieren, jedoch müssen die Firmen ein paar Angaben mehr bekommen können als die normalen Gruppen. Zum Beispiel eine allgemeine Versand- und Rechnungsadresse, welche die individuellen Adressen der etablierten Mitarbeiter überschreibt.
Nun. Soweit so gut. Ich habe also die Tabelle in der Datenbank (Name der Datenbank: oxorganisations) mit allen entsprechenden Feldern angelegt und (der Einfachheit halber) sämtliche Dateien der Benutzerverwaltung kopiert. Mit Ausnahme der “oxusers.php” und “oxuserexception.php”. Diese habe ich dann umbenannt, so bekam ich folgende Dateien hinzu:
/core
- oxorganisationslist.php
/admin - organisations.xml
- organisations_address.php
- organisations_extend.php
- organisations_list.php
- organisations_main.php
- organisations_overview.php
- organisations_payment.php
- organisations_remark.php
/out/admin/tpl - organisations.tpl
- organisations_adress.tpl
- organisations_article.tpl
- organisations_extend.tpl
- organisations_list.tpl
- organisations_main.tpl
- organisations_overview.tpl
- organisations_payment.tpl
- organisations_remark.tpl
/out/admin/tpl/popups - organisations_main.tpl
Hinzu kamen dann noch folgende Dateien, welche ich selber erstellte:
/core
- oxorganisations.php
- oxorganisationexeption.php
Ich weiß, dass ich anstatt /core meine Daten auch in das Verzeichnis /modules hätte packen können. Aber das kann ich im Zweifelsfall ja immer noch ändern.
Anschließend habe ich dann, wie in einem Hilfebeitrag, welchen ich nun leider nicht mehr finde, meine neue Seite in der Navigation definiert. Das klappt auch problemlos.
Nun kommt jedoch mein Problem: Wenn ich meinen neuen Menüpunkt anklicke, dann sollte eigentlich ein ähnliches Bild kommen, wie das bei “Benutzer”. Allerdings wird bei mir nur der untere Teil der Seite, also die Eingabefelder, geladen - nicht jedoch die Übersichtsliste. Dies ist ein Problem, welches ich sogar nach mehrstündiger Suche immer noch nicht gelöst bekommen habe.
Ich hänge noch meinen Quellcode der Datei oxorganisations.php an. Weiteren Quellcode kann ich gerne Anhängen, wenn dies gefordert wird, aber der Beitrag wird sonst unnötig in die Länge gezogen.
class oxOrganisations extends oxBase {
/**
* Core database table name. $sCoreTbl could be only original data table name and not view name.
* @var string
*/
protected $_sCoreTbl = 'oxorganisations';
/**
* Name of current class
* @var string
*/
protected $_sClassName = 'oxorganisations';
/**
* Class constructor, initiates parent constructor (parent::oxBase()).
*/
public function __construct()
{
parent::__construct();
$this->init($this->_sCoreTbl);
}
/**
* Inserts new or updates existing organisation
*
* @return: bool
*/
public function createOrganisation() {
$oDB = oxDb::getDb();
$sShopID = $this->getConfig()->getShopId();
// check if there is an organisation with same email adress
$sSelect = "SELECT oxid FROM oxorganisations WHERE oxemail = " . $oDB->quote($this->oxorganisations__oxemail->value) . " AND oxshopid = '{$sShopID}' ";
$sOXID = $oDB->getOne($sSelect);
if(isset($sOXID) && !empty($sOXID)) {
$oEx = oxNew('oxOrganisationException');
$oLang = oxLang::getInstance();
$oEx->setMessage(sprintf($oLang->translateString('EXCEPTION_ORG_ORGEXISTS', $oLang->getTplLanguage()), $this->oxorganisation__oxemail->value));
throw $oEx;
}
$this->oxorganisations__oxshopid = new oxField($sShopID, oxField::T_RAW);
if(!($blOK == $this->save())) {
$oEx = oxNew('oxOrganisationException');
$oEx->setMessage('EXCEPTION_ORG_ORGCREATIONFAILED');
throw $oEx;
}
return $blOK;
}
/**
* Saves (updates) user object data information in DB. Return true on success.
*
* @return bool
*/
public function save() {
$myConfig = oxConfig::getInstance();
$blRet = parent::save();
// add created remark
if($blRet) {
$oRemark = oxNew('oxremark');
$oRemark->oxremark__oxtext = new oxField(oxLang::getInstance()->translateString('organisationAdded'), oxField::T_RAW);
$oRemark->oxremark__oxtype = new oxField('r', oxField::T_RAW);
$oRemark->oxremark__oxparentid = new oxField($this->getId(), oxField::T_RAW);
$oRemark->save();
}
return $blRet;
}
/**
* Loads object (user) details from DB. Returns true on success.
*
* @param string $oxID User ID
*
* @return bool
*/
public function load( $oxID )
{
$blRet = parent::Load( $oxID );
// convert date's to international format
if ( isset( $this->oxorganisations__oxtime->value ) ) {
$this->oxorganisations__oxtime->setValue(oxUtilsDate::getInstance()->formatDBDate( $this->oxorganisations__oxtime->value ));
}
return $blRet;
}
}
(Ich habe den Startkommentar weg gelassen.)
Nun noch einmal abschließend meine Frage: Welche oder Variable der oxusers.php habe ich vergessen zu übernehmen, die dafür verantwortlich ist, dass das Template organisations_list.php geladen wird.
PS. Ich kenne die Sourcecode Dokumentation und habe darin sehr viel nachgeschaut. Besagte Funktion oder Variable habe ich jedoch trotzdem nicht gefunden. Mit einem Link auf die Funktion oder Variable der oxusers.php bin ich entsprechend auch zufrieden.
Ich bitte inständig um Hilfe und Bedanke mich vorab herzlich dafür!
Viele Grüße vom Praktikanten.