Hallo,
Ich bin recht neu auf dem Gebiet von OXID.
Mein momentanes Problem ist, dass ich aus meinem Modul heraus in eine eigene Datenbanktabelle speichern möchte und auch aus dieser wieder Daten abrufen.
Gibt es jemanden der mir erklären könnte, wie dies am besten in OXID funktioniert.
MfG Philip
wie sind denn deine Hintergrundkenntnisse im Bereich Programmieren?
OOP PHP, MVC, MySQL
Hab einige Grundkenntnisse sowohl in PHP, MVC und MySQL. Ich hab bloß einige Schwierigkeiten zu verstehen wie das ganze in oxid funktioniert.
in der Regel läuft es nach MVC Prinzip.
Du hast ein Model (kopiere einfach von oxcontent oder oxarticle) das die Funktionen beinhaltet und in der Variable $this->_sCoreTable den Namen der Tabelle hat, wo es rein gehört.
Und dann kannst du mit $object = oxNew(“deinModel”); ein Objekt erstellen
es befüllen und mit $object->save() in die Datenbank tun.
Da könntest du wiederum abgucken, wie neue CMS Seite im Admin erstellt werden (Klasse: content_main), die das mit der oxID funktioniert und woher sie kommt.
okay also bau ich sowas wie:
<?php
class konfigobjects extends oxI18n
{
protected $_sClassName = ‘konfigobjects’;
public function __construct($aParams = null)
{
parent::__construct();
$this->init( 'konfigobject' );
}
......
}
?>
und wo kommt das mit $this->_sCoreTable hin?
und wie verwende ich das Model dann am einfachsten im template?
$this->init( ‘konfigobject’ ); ist schon die Zuweisung von $this->_sCoreTable
du musst dein Objekt in der zuständigen view class mit
$object = oxNew(“konfigobject”); erstellen und mit
$object->load($oxID) einen Datensatz mit einer besteimmten oxID laden, danach per
$this->addTplParam(“object”,$object) an das Smarty weitergeben.
Könntest du mir den Gefallen tun und mir ein kleines Beispiel für das einbinden in den View geben?
Ich steh nach einem langen Tag gerade gedanklich etwas auf dem Schlauch. Wahrscheinlich ist es einfach aber bei mir macht es gerade einfach nicht klick.
Wäre dir sehr dankbar.
den Code von oben müsste in render() rein oder irgendeine Funktion, die in render() aufgerufen wird.
Alternativ und vielleicht etwas verständlicher kannst du auch eine komplett eigene Funktion machen, schau mal hier:
-
entsprechende view Klasse mit der eigenen Funktion erweitern:
https://github.com/vanilla-thunder/vt-rca/blob/master/extend/start_rca.php
hier erweitere ich die Startseite um die Funktionen getRandomArticle() und getRandomCategoryArticles()
-
auf diese Funktionen kannst du nun in den Templates für die Startseite benutzen
z.B: direkt mal start.tpl:
[{if $oView->getRandomArticles()}]
[{assign var="randomArticles" value=$oView->getRandomArticles() }]
hier kannst du mit [{$randomArticles}] auf das zugreifen, was die Funktion getRandomArticles() zusammengeschustert hat. In meinem Fall ist es eine Artikelliste, aber du kannst dort deine eigenen Objekte erstellen/laden
[{/if}]
Okay also ich habe momentan folgendes:
konfigbestellung.php
<?php
class konfigbestellung extends oxI18n
{
protected $_sClassName = 'konfigbestellung';
public function __construct($aParams = null)
{
parent::__construct();
$this->init( 'konfigbestellung' );
}
}
?>
pkaz_konfigurator_links.php
<?php
class pkaz_konfigurator_links extends pkaz_konfigurator_links_parent {
protected $_sThisTemplate = 'pkaz_konfigurator_links.tpl';
public function render(){
parent::render();
return $this->_sThisTemplate;
}
public function getDatabaseValue(){
// TODO
$oObject = oxNew("konfigbestellung");
}
}
?>
pkaz_konfigurator_links.tpl
…
[{$oView->getDatabaseValue()}]
…
und hab auch in der metadata.php den folgenden Eintrag:
‘extend’ => array(
‘oxI18n’ => ‘pkaz_konfigurator/controllers/konfigbestellung.php’
…
irgendwas ist aber immernoch falsch und ich weiß einfach nicht was, da es mich immernoch jedes mal auf die Startseite zurück leitet…
Ich hoffe du kannst mir noch einmal helfen. Ich bedanke mich hier schonmal für deine große Hilfe bisher. Verstehe das ganze mittlerweile weit aus besser als vorher. 
[QUOTE=PhilipKaz;152434]
und hab auch in der metadata.php den folgenden Eintrag:
‘extend’ => array(
‘oxI18n’ => ‘pkaz_konfigurator/controllers/konfigbestellung.php’
[/QUOTE]
'oxI18n' => 'pkaz_konfigurator/controllers/konfigbestellung'
… und die Klasse muss parent erweitern:
class konfigbestellung extends konfigbestellung_parent
nein Jungs, das ist ja seine eigene Klasse.
er extended oxl18n ja nicht, er erbt davon.
Deine eigene Klasse muss in Metadata “files” und nicht “extend”
Na gut, ja dann kann das “.php” bleiben. Hatte nur den Formfehler bei extend gesehen.
okay hab jetzt so und hab es aus extend herausgenommen:
'files' => array(
'konfigbestellung' => 'pkaz_konfigurator/controllers/konfigbestellung.php'
),
Problem besteht leider trotzdem noch. 
Tabelle ‘konfigbestellung’ existiert? Dann sollte es so gehen, sofern sich das ganze im Admin abspielen soll (s. Anhang)…musst halt auf Dein Modulkonzept anpassen.
Okay danke.
Mein Problem ist, dass ich das ganze aus dem Frontend heraus machen möchte.
Mein momentanes Projekt beinhaltet einen Konfigurator dessen Artikel dann in die Datenbank gespeichert werden sollen.
Gibt es da eine besser Möglichkeit das zu tun oder wie soll ich das am besten machen?
Dann enfernst Du einfach die Render-Methode aus pkaz_konfigurator_links, extendest mit pkaz_konfigurator_links z.B. oxwarticledetails (wenn es in den Details erscheinen soll // ich verweise hier auf meinen ersten Beitrag : “.php”), schnappst Dir einen Block und bindest damit Dein Template ein. Must halt schauen, wo es passt.
okay also ändere ich meine metadata.php so um:
'extend' => array(
'oxwarticledetails' => 'pkaz_konfigurator/controllers/pkaz_konfigurator_links'
),
Nun meine Frage wie verwende ich blocks habe dazu schon sehr viel gelesen aber habe nicht wirklich verstanden bzw. habe es nicht zum laufen bekommen…
und wenn ich das ganze als Extramenüpunkt in der Navigation haben möchte wo binde ich diesen Block dann ein und wie.
Danke für eure Hilfe.
[QUOTE=PhilipKaz;152487]
Nun meine Frage wie verwende ich blocks habe dazu schon sehr viel gelesen aber habe nicht wirklich verstanden bzw. habe es nicht zum laufen bekommen…
[/QUOTE]
[QUOTE=PhilipKaz;152487]
Und wenn ich das ganze als Extramenüpunkt in der Navigation haben möchte wo binde ich diesen Block dann ein und wie.
Danke für eure Hilfe.[/QUOTE]
Als eigene Seite brauchst Du wieder die render-Methode und dann gehört das “File wieder in Files”->".php". Dann verlinkst Du auf die Seite z.B. so:
http://www.deineurl.de/index.php?cl=deineseite
Bsp. für Verlinkung: http://forum.oxid-esales.com/showthread.php?t=24819
Hey ist interessanter Beitrag, ähnliche Schwierigkeiten hatte ich letztes Jahr im August 2013 auch als ich mit dem OXID Framework anfing. Aktuell versuche ich ein “Getting Starting” zu erarbeiten. Das schreiben von Modulen ist ein interessanter Punkt. Bisher habe ich mir folgende Struktur überlegt:
[ul]
[li]Eigene Erweiterungen (Module)[/li][LIST]
[li]Admin[/li][LIST]
[li]Eigener Menüpunkt (Sidebar)[/li][li]Eigener Tab[/li][li]Bestehende Tab erweitern (Blocks)[/li][/ul]
[li]Frontend[/li][ul]
liÜberladung Funktionalität[/li][li]Templateanpassung mit eigenen Variablen / Abfragen[/li][/ul]
[li]Datenbankanpassungen[/li][ul]
[li]Tabelle erweitern[/li][li]Eigene Tabelle definieren[/li][/ul]
[/LIST]
[/LIST]
Dieser Thread zeigt auf, dass ich z.B. den Punkt “Frontend” um den Unterpunkt “Eigene Klasse” erweitern könnte. Was meint Ihr? Vielleicht fällt euch noch ein bessere Struktur ein? Oder welche Punkte fehlen evtl. noch?
Viele Grüße
indianer3c