Hallo,
nachdem ich mich nun fast zwei Tage in und durch die MVC-Architektur und das oxid esales Framework ein- und durchgearbeitet habe, komme ich jetzt nicht mehr so richtig weiter.
Ich habe ein neues Template angelegt, das mir Daten in/aus einer selbst angelegten Tabelle anlegt/anzeigt und Änderungen speichert. Im Prinzip soll das so ähnlich funktionieren wie bei den Lieferadressen oder ähnlich wie in diesem Beispiel http://www.urbans-blog.de/2010/05/07/oxid4all-es-muss-ja-nicht-immer-ein-shop-sein-teil-1/ (Das ist die bislang einzigste Dokumentation, die ich finden konnte, die den MVC-Ansatz mit eigenen Tabellen relativ gut erklärt).
Leider hatte ich an mehreren Stellen Verständnisschwierigkeiten und bin nicht weiter gekommen. Deshalb versuchte ich selber klein anzufangen und immer mehr Funktionalität dazuzufügen, leider ist wohl an mindestens einer Stelle ein Fehler drin und ich weiß nicht mehr weiter
[B]Wie kann ich einen einzelnen Datensatz aus einer selbst erstellen Tabelle in in selbst erstelltes Objekt umwandeln? Mein gescheiterter Versuch ist in der Funktion getOneTableTestRow() zu sehen :o[/B]
Ich beschreibe mal, was ich getan habe:
Tabelle “iatabletest” in der oxid-Datenbank angelegt und ein paar Testdatensätze über phpmyadmin eingefügt.:
CREATE TABLE IF NOT EXISTS `iatabletest` (
`OXID` varchar(32) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`IADATE` date NOT NULL,
`OXIDUSERID` varchar(32) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`IATESTID` varchar(32) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`IATITLE` varchar(32) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`OXID`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Eine View-Klasse angelegt: iaTableTestView (Datei: iatabletestview.php).
<?php
class iaTableTestView extends oxUbase
{
/**
* name of template file
* @var str
*/
protected $_sThisTemplate = "iatabletest.tpl";
public $asimpleTextVariable = "einfacher Text in einer Variable gespeichert!";
protected $_aViewData = array();
public function getTestStringfrom_iatabletest(){
return 'HELLO FROM getTestStringfrom_iatabletest()!!';
}
/**
* calls parent (oxUbase) render and returns name of tpl file
* @return str $this->_sThisTemplate
*
*/
public function render() {
parent::render();
$this->getOneTableTestRow();
return $this->_sThisTemplate;
}
/**
*
* Eine Liste aller Werte IATABLETEST.IATITLE zurückgeben, die in dem Template als Dropdown angezeigt wird.
*/
public function getTableTestEntrys()
{
$oTableTestList= oxNew("iaTableTestList");
// oxList.selectString ($sSql )
// Selects and SQL, creates objects and assign them
// Parameters: string $sSql SQL select statement
$oTableTestList->selectString("select oxid, iatitle from iatabletest");
return $oTableTestList->getArray();
}
/**
*
* Einen bestimmten Datensatz aus der Tabelle abfragen und im Template anzeigen.
*/
public function getOneTableTestRow()
{
// so geht's nicht:
// $oTableTestRow= oxNew("iaTableTestClass");
// $oTableTestRow = oxDb::getDb()->Execute("select oxid, iatitle from iatabletest where oxid = 'pid317f9242fe935fa92752108c96dec'");
// $this->_aViewData['invadr'] = $oTableTestRow;
//
// $this->_aViewData = $oTableTestRow;
$oTableTestRow= oxNew("iaTableTestClass");
// $oTableTestRow = oxDb::getDb()->Execute("select oxid, iatitle from iatabletest where oxid = 'pid317f9242fe935fa92752108c96dec'");
// $this->_aViewData['invadr'] = $oTableTestRow;
//
}
/**
*
* Neuen Datensatz in Tabelle IATABLETEST anlegen. IATABLETEST.IATITLE wird auf den
* Wert gesetzt, der in diese Textbox eingegeben wurde:
* <input type="text" size="37" maxlength="255" name="newtabletestentry" value="">
*/
public function saveData(){
// Zugriff auf ein input-Feld ??
$newTitle = $this->getConfig()->getParameter('newtabletestentry');
$oiatabletest = oxNew('iaTableTestClass');
$oiatabletest->iatabletest__iatitle->value = $newTitle;
$oiatabletest->save();
}
}
Eine core Objekt-Klasse angelegt: iaTableTestClass (Datei: iatabletestclass.php)
<?php
class iaTableTestClass extends oxBase // oxI18n
{
// Name der Tabelle
protected $_sCoreTbl = 'iatabletest';
// Name der Klasse
protected $_sClassName = 'iaTableTestClass';
// es werden Zugriffe dieser Art ermöglicht:
// [Objektname]->[Tabellenname]__[Feldname]->value
// Bsp. aus iatabletest.php:
// $aData = $this->getConfig()->getParameter('iadata');
// $newTitle = $aData['iatabletest__iatitle'];
// $oiatabletest = oxNew('iaTableTestClass');
// $oiatabletest->iatabletest__iatitle->value = $newTitle;
// $oiatabletest->save();
public function __construct()
{
parent::__construct();
$this->init( 'iatabletest', true );
}
}
Eine core Klasse angelegt um diese Objekte in einer Liste zu speichern: iaTableTestList (Datei: iatabletestlist.php)
<?php
class iaTableTestList extends oxList
{
public function __construct( $sObjectsInListName = 'iatabletest')
{
return parent::__construct( 'iaTableTestClass');
}
}
Ein Template angelegt um was zu sehen: iatabletest.tpl:
<!-- Komponten Variablen abrufen: funktioniert! -->
[{$oxcmp_shop->oxshops__oxname->value}]
<br>
<!-- Einfache Methode aus View aufrufen: funktioniert -->
[{ $oView->getTestStringfrom_iatabletest() }]
<br>(1) Variable ausgeben:
<!-- auf Variable aus View-Klasse zugreifen: funktioniert nicht! -->
[{$asimpleTextVariable}]
<br>(2) Variable ausgeben:
<!-- auf Variable aus View-Klasse zugreifen: funktioniert nicht!?? -->
[{$oView->asimpleTextVariable}]
<br><br>
<!-- Anzeige aller Werte IATABLETEST.IATITLE als Dropdown -->
<form action="[{ $oViewConf->getSelfActionLink() }]" method="post">
[{ $oViewConf->getHiddenSid() }]
<input type="hidden" name="cl" value="[{ $oViewConf->getActiveClassName() }]">
<input type="hidden" name="fnc" value="saveData">
<label>
<select name="azdata[azjobs__azprojectid]">
<option value=""> -- TableTest Eintrag auswählen -- </option>
[{foreach from=$oView->getTableTestEntrys() item=oProject}]
<option value="[{$oProject->iatabletest__oxid->value}]" [{if $actProject == $oProject->iatabletest__oxid->value}]selected[{/if}]>[{$oProject->iatabletest__iatitle->value}]</option>
[{/foreach}]
</select>
</label>
</form>
<!-- TODO: wenn ein Wert ausgewählt -->
<!-- wird, sollen die anderen Textboxes auch ihren Wert entsprechend des ausgewählten -->
<!-- Datensatzes ändern. -->
<!-- ### Datensätze anlegen ### -->
<br><br>
<form action="[{ $oViewConf->getSelfActionLink() }]" method="post">
[{ $oViewConf->getHiddenSid() }]
<input type="hidden" name="cl" value="[{ $oViewConf->getActiveClassName() }]">
<input type="hidden" name="fnc" value="saveData">
Neuer Eintrag in Tabelle iatabletest (Feld iatitle): <input type="text" size="37" maxlength="255" name="newtabletestentry" value="">
<input id="tabletestButton" type="submit" class="btn" name="save" value="Speichern">
</form>
<!-- einen Datensatz anzeigen -->
<form action="[{ $oViewConf->getSelfActionLink() }]" method="post">
[{ $oViewConf->getHiddenSid() }]
<input type="hidden" name="cl" value="[{ $oViewConf->getActiveClassName() }]">
<input type="text" name="iadata[iatabletest__iatitle]" value="[{if isset( $iadata[iatabletest__iatitle] ) }][{ $iadata[iatabletest__iatitle]}][{else }][{ $oView->iatabletest__iatitle->value }][{/if }]" size="37">
</form>
<br> TEST
<input type="text" size="37" maxlength="255" name="invadr[oxuser__oxfname]"
value="[{if isset( $invadr.oxuser__oxfname ) }]
[{ $invadr.oxuser__oxfname }]
[{else }]
[{ "nicht gesetzt" }]
[{/if }]">
[{if $oView->isFieldRequired(oxuser__oxfname) }]<span class="req">*</span>[{/if }]
<input type="text" size="37" maxlength="255" name="invadr[oxuser__oxfname]"
value="[{if isset( $invadr.oxuser__oxfname ) }]
[{ $invadr.oxuser__oxfname }]
[{else }]
[{ $oxcmp_user->oxuser__oxfname->value }]
[{/if }]">
[{if $oView->isFieldRequired(oxuser__oxfname) }]<span class="req">*</span>[{/if }]
<br>
[{ $oTableTestRow }]
<!-- Beispiel -->
<input type="text" size="37" maxlength="255" name="invadr[oxuser__oxlname]" value="[{if isset( $invadr.oxuser__oxlname ) }][{ $invadr.oxuser__oxlname }][{else }][{ $oxcmp_user->oxuser__oxlname->value }][{/if }]">
[{if $oView->isFieldRequired(oxuser__oxlname) }]<span class="req">*</span>[{/if }]
Aufruf mit http://localhost/meinShopVerzeichnis/index.php?cl=iatabletestview.