Backend: Werte aus Datenbank via Smarty in die TPL-Datei übertragen

Hallo,

ich habe nun mit folgendem Script meine benötigten Daten aus der Datenbank gelesen:


$oDb = oxDb::getDb();
$products = $oDb->execute("SELECT * FROM oxarticles WHERE ".substr($ids, 0, -4)); // Get products set to the action
		while (!$products->EOF) {
   			for ($i=0, $max=count($products); $i < $max; $i++)
				echo $products->fields[6]." | ".$products->fields[10]." | ".$products->fields[12]."<br>";
   				$products->moveNext();
		}

Nun würde ich diese Gerne in der TPL-Datei via Smarty ausgeben - pratktisch z.B.: [{$products}]

Habe schon einige Lösungsansätze aus dem Forum versucht, jedoch ohne Erfolg. Mir bekannt ist bis jetzt nur

$this->_aViewData['xxx']

für einzelne Smarty-Meldungen.

Könnt Ihr mir da vielleicht weiterhelfen? Würde mich sehr über Feedback freuen.
Besten Dank!

Grüße,

Sorry, falscher Bereich. Das könnte in “Entwicklung” verschoben werden. Danke!

… moved!

Ich habe das in meinem Modul [U]OxProbs[/U] so gelöst:

[B]PHP:[/B]


$rs = oxDb::getDb(true)->Execute($sSql);
while (!$rs->EOF) {
   array_push($aArticles, $rs->fields);
   $rs->MoveNext();
}
$oSmarty->assign("aArticles",$aArticles);

TPL:


[{foreach name=outer item=Article from=$aArticles}]
   [{$Article.oxartnum}]
[{/foreach}]

Danke für deine hilfreiche Antwort! Hab’s jetzt mal so Probiert:

$products = $oDb->execute("SELECT oxtitle FROM oxarticles WHERE ".substr($ids, 0, -4)); // Get products set to the action
$aProducts = array();
while (!$products->EOF) {
  array_push($aProducts, $products->fields);
   $products->MoveNext();
} 
		
$oSmarty->assign("aProducts", $aProducts);  
[{foreach item=Article from=$aProducts}]
   		[{$Article.oxtitle}]
	[{/foreach}]  

Doch irgendwie funktioniert das leider nicht :frowning:

[QUOTE=nowa.and;75338]irgendwie funktioniert das leider nicht[/QUOTE]
gibt’s das auch detaillierter?

Wird das Template überhaupt aufgerufen?
Kommt eine Fehlermeldung?

Versuch’s mal im Smarty mit -> anstatt dem .

und evtl. mal [{$Article|var_dump}] um zu schauen wie die Felder angesprochen werden.

Grüße

Rafael

Ach Leute, nehmt doch bitte das Oxid Framework für sowas - dann tut ihr euch nicht so schwer:


public function render(){
  $sTemplate = parent::render();
  $oList = oxNew("oxarticlelist");
  //Weiß nicht wo oder wie du auf $ids kommst, aber du wirst es ja wissen
  $sQ = "SELECT oxtitle FROM oxarticles WHERE ".substr($ids, 0, -4);
  $oList->selectString($sQ);
  $this->_aViewData['oArticles'] = $oList;
  return $sTemplate;
}

Und dann im Template:


[{foreach from=$oArticles item=oArticle}]
  <p>Title: [{$oArticle->oxarticles__oxtitle->value}]</p>
[{/foreach}]

Wenn das nicht funktioniert dann lass dir mal deinen SQL Query ausgeben und Feuer ihn direkt gegen die DB - eventuell tritt ein Fehler auf.

… danke für die bisherigen Ansätze, so habe ich den Abaulf der sql-query schon nachvollziehen können. ich wollte dieses Snippet jetzt soweit erweitern das alle zeilen aus der oxnewssubscribed als admin-modul (extends oxadmindetails) ausgegeben werden


  $oList = oxNew("oxarticlelist"); // ??? Welcher listtyp muss hier rein?
  //$oList = oxNew("oxuser");
  //$sQ = "SELECT oxtitle FROM oxarticles";
  $sQ = "SELECT oxid FROM oxnewssubscribed";

  $oList->selectString($sQ);
  $this->_aViewData['oArticles'] = $oList; // ??? Welcher typ muss hier rein?
  //$this->_aViewData['oArticles'] = $oList;
  return $sTemplate;

Die Anzahl der Datensätze ist korrekt, aber ich komme nicht an die einzelnen Spalten herran, diese bleiben leer :confused:

Im Template wollte ich die Daten dann so ausgeben:


[{foreach from=$oArticles item=oArticle}]
  [{$oArticle->oxnewssubscribed__oxid->value}]<br>
[{/foreach}]

Ist der Ansatz die oxnewssubscribed auszulesen korrekt oder bin ich da komplett auf dem Holzweg ??? danke für weitere Ansätze … Wenn es produktiv als Modul läuft wird’s gepostet :wink: VG Stefan

Spontan würd ich sagen nein du versuchst eine articlelist mit eine Query zu erstellen der keine article beinhaltet. Wenn es keine list dafür gibt musst du dir eine selber bauen :wink:
ist nicht die welt. Einfach eine neue Klasse von oxList ableiten im core ordner speichern und du kannst diese dann so laden wie die artikel liste.
schau dir dazu mal die oxnewslist an.
http://docu.oxid-esales.com/CE/sourcecodedocumentation/4.5.0.34568/oxnewslist_8php_source.html

Grüße

Rafael

@Rafael: danke für deine schnelle Antwort :slight_smile: … ich habe auch vermutet das es hier die entscheidende list nicht vorhanden ist … ich probier es gleich mal aus

falls noch jemand einen anderen ansatz oder idee hat, bin ich über jeden Vorschlag dankbar … VG stefan

Ihr müsst oxList nicht zwingend erweitern, das hier geht auch:


$oList = oxNew("oxlist");
$oList->init("meinetolletabelle"); //Init stellt alles automatisch ein
$oList->selectString("Select blub from meinetolletabelle");

… der erste Ansatz steht, danke schon mal :slight_smile:

ich habe jetzt mit:


$oListOxemail = oxNew("oxNewsletterlist"); // oxNewsletterlist View aus core/
$QueryOxemail = "SELECT oxemail FROM oxnewssubscribed";
$oListOxemail->selectString($QueryOxemail);
$this->_aViewData['oOxemail'] = $oListOxemail;

eine einzelne Spalten im Admin ausgeben können. Die einzelnen Datensätze soll jetzt aber inkl. aller Spalten in Tabellenform ausgeben werden.


$oListOxFullUser = oxNew("oxNewsletterlist"); // oxNewsletterlist  = View aus core/
$QueryOxFullUser = "SELECT * FROM oxnewssubscribed";
$oListOxFullUser->selectString($QueryOxFullUser);
$this->_aViewData['oOxFullUser'] = $oListOxFullUser;

wenn ich das jetzt richtig durchschaue ist $oListOxFullUser das Array, welches ich per loop ausgeben muss !?
wenn ich jedoch per smarty.section oder eine einzelne array-ID anspreche, bleibt diese leer :confused:
jemand 'ne Idee?

EDIT: Knoten im Hirn :o … jetzt klappt’s

[{foreach from=$oOxFullUser item=oSingleUser}]
[{$oSingleUser->oxnewssubscribed__oxuserid->value}]
[{$oSingleUser->oxnewssubscribed__oxlname->value}]
[{$oSingleUser->oxnewssubscribed__oxemail->value}]
[{/foreach}]


[{foreach from=$oOxFullUser item=oUser}]
[{$oUser->blablafeld->value}]
[{/foreach}]

danke! … hätte ich nur 10 minuten mehr geduld gehabt :wink:

MODUL
oxadmindetails => oligoform/olg_exportoxidnewsletter


class olg_exportoxidnewsletter extends oxadmindetails{
	
protected $_sThisTemplate = "oligoform/olg_export_nl.tpl"; // Admin-Template
    
public function render(){
  $sTemplate = parent::render();

  // oxfullUser
  $oListOxFullUser = oxNew("oxNewsletterlist"); // oxNewsletterlist  = entsprechende View aus core/
  //$QueryOxFullUser = "SELECT * FROM oxnewssubscribed"; // alle Konten(!)
  $QueryOxFullUser = "SELECT * FROM oxnewssubscribed WHERE oxdboptin ='1'";
  $oListOxFullUser->selectString($QueryOxFullUser);
  $this->_aViewData['oOxFullUser'] = $oListOxFullUser; 
  return $sTemplate;
}  
// end
}

CORE-LIST


<?php
class oxNewsletterlist extends oxList
{
    protected $_sObjectsInListName = 'oxnewssubscribed';
}

TEMPLATE


[{foreach from=$oOxFullUser item=oSingleUser}]
<tr>
<td>[{$oSingleUser->oxnewssubscribed__oxemail->value}]</td>
<td>[{$oSingleUser->oxnewssubscribed__oxsal->value}]</td>
<td>[{$oSingleUser->oxnewssubscribed__oxfname->value}]</td>
<td>[{$oSingleUser->oxnewssubscribed__oxlname->value}]</td>
<td>[{$oSingleUser->oxnewssubscribed__oxsubscribed->value}]</td>
[{/foreach}]

In den nächsten Tagen bekommt das Modul noch 'nen sortierbaren Header und 'nen CSV-Export und dann ab ins Exchange :slight_smile:

@rafael&aggrosoft: danke nochmal für die schnelle Hilfe! vg Stefan

kann mir bitte nochmal jemand einen Tipp geben, ich komme an einer Kleinigkeit nicht weiter :frowning: … ich wollte die ausgegebenen Mailabonnenten jetzt um die Benutzergruppen erweitern scheitere aber am Skript


[{php}]
 $sql = "SELECT * FROM oxobject2group WHERE oxobjectid = '0039d8af3b042199f4b55a435ed29516' ";
// oder $sql = "SELECT * FROM oxobject2group WHERE oxnewssubscribed.OXUSERID = oxobject2group.OXOBJECTID

 $rs = oxDb::getDb(true)->Execute($sql);
 $aGroups = array();
 while (!$rs->EOF) {
    $oUser = oxnew('oxuser');
    $oUser->load($rs->fields['oxgroupsid']);
    $aGroups[] = $oUser;
    $rs->moveNext();
 }
 $this->assign("myGrouplist", $aGroups);
[{/php}]


[{foreach from=$myGrouplist item=userGroup name=groupList}]
[{ $userGroup->oxobject2group__oxgroupsid->value }]
[{/foreach}]

Die Anzahl der Benutzergruppen ist bereits korrekt, aber die ID der Gruppe bleibt leer/NULL.


Mein zweiter Ansatz war folgender:

Ich habe ja die OXID von oxnewssubscribed__oxuserid und wollte diese mit der Funktion inGroup(‘xyz’) gegenprüfen … da mir aber $oxcmp_user bzw $oxuser in dem Template nicht zur Verfügung steht krieg ich’s nicht hin die OXID gegen die Funktion zu fahren

[{ if $myGrouplist->inGroup('oxblacklist')}] ...

Hat jemand 'ne Idee? 1000Dank

[{assign var="smarty2phpUserID" value=$oSingleUser->oxnewssubscribed__oxuserid->value}]

[{*<!-- zieht GroupID aus Table oxobject2group -->*}]
[{php}]
 $GLOB_ARR3 =& $this->get_template_vars('smarty2phpUserID');
 $sql = "SELECT oxid FROM oxobject2group WHERE oxobject2group.oxobjectid ='";
 $sql .= $GLOB_ARR3;
 $sql .= "'";
 
 $rs = oxDb::getDb(true)->Execute($sql);
 $aGroups = array();
 while (!$rs->EOF) {
    $oUser = oxnew('oxobject2group');
    $oUser->load($rs->fields['oxid']);
    $aGroups[] = $oUser;
    $rs->moveNext();
 }
 $this->assign("myGrouplist", $aGroups);
[{/php}]

[{ $userGroup->oxobject2group__oxgroupsid->value }]