Joomla! Forum Schweiz wird Teil der D-A-CH Community

Nach vielen Jahren als zentrale Anlaufstelle für Fragen rund um Joomla! in der Schweiz wird das Joomla! Forum Schweiz künftig als Archiv weitergeführt.

Die Joomla!-Communities aus Deutschland, Österreich und der Schweiz arbeiten heute enger denn je zusammen. Deshalb bündeln wir künftig auch den deutschsprachigen Support und Austausch an einem gemeinsamen Ort im Joomla! D-A-CH Forum.

Für neue Fragen, Diskussionen und den Austausch mit der Community nutzt bitte ab sofort:

forum.joomla.de

Das Joomla! Forum Schweiz bleibt weiterhin bestehen und wird als Archiv im Lesemodus erhalten. Die vielen Beiträge, Lösungen und Erfahrungen aus den vergangenen Jahren bleiben damit weiterhin zugänglich und über die Suche auffindbar.

Wir bedanken uns herzlich bei allen Mitgliedern, Moderatoren und Helfern, die das Schweizer Joomla! Forum über viele Jahre mit ihrem Wissen und ihrem Engagement geprägt haben.

Wir sehen uns im Joomla! D-A-CH Forum!

simple DB-Frage. ... extends JModel

  • chrumb
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
25 Feb. 2008 16:55 #12209 von chrumb
simple DB-Frage. ... extends JModel wurde erstellt von chrumb
Hi,
diese ganzen Funktionen und Zusammenhänge in J! sind mir noch - "ein Graus".
Da muß ich mich noch dran "gewöhnen" ...
Bei herkömmlicher Programmiererei kann man sich ja alles Mögliche an, im Raum
stehenden Variablen etc. anzeigen lassen. Das klappt bei J! nicht mehr (gibt zwar
debugg-Modus, aber der reicht mir nicht)

So hier vier Fragen:
Bei folgendem Code wird nichts "durchgegeben". Ich bekomme immer
auf der "Ergebnisseite" Warning: Invalid argument supplied for foreach() in ...

Welche Funktion haben "&$options" und was spez. bedeutet &$

Womit/Wie wird von der ersten zur zweiten Funktion etwas durchgegeben?

Wozu ist $id (ist ja egal ob aktiv oder nicht)
Code:
--------------- Modell-datei --------------- defined('_JEXEC') or die(); jimport('joomla.application.component.model'); class db1Modeldb1 extends JModel { function _getdb1Query( &$options ){ $db = JFactory::getDBO(); // $id = @$options['id']; $select = 'a.*'; $from = '#__veranst AS a'; $wheres[] = "a.datum = '2007-05-06'"; // diverse "Apostrophiervarianten" probiert ... $query = "SELECT " . $select . "\n FROM " . $from . "\n WHERE " . implode( "\n AND ", $wheres ); return $query; } function getdb1List( $options=array() ) { $query = $this->_getdb1Query( $options ); $result = $this->_getList( $query ); return @$result; } } ------------------------------------------- (veränderter code aus der com_auto von Hagen Graf - cocoate.com)

m.E. kein Fehler drin, aber - es funktioniert nicht ...

Vielen Dank für Antworten/Hilfen,
Grüße, c.

Edit:Pete, Formatiereung angepasst]
  • chrumb
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
25 Feb. 2008 17:10 #12210 von chrumb
ein Nachtrag noch:
die default.php des Templates ist natürlich (fast) unverändert.
Nur den Feldnamen der abgefragten Tabelle angepasst:
Code:
... foreach ($this->rows as $row) { ?> <li> <?php echo $row->titel; ?><br> <small><em>(<?php echo $row->datum; ?>) </em></small> </li> <?php } ...
Grüße

[Edit:Pete, Formatiereung angepasst]
Mehr
25 Feb. 2008 21:37 #12213 von Tribal6
Hi Chrumb

Also, ich versuch mal einbisschen Licht ins Dunkel zu bringen:

Bei herkömmlicher Programmiererei kann man sich ja alles Mögliche an, im Raum
stehenden Variablen etc. anzeigen lassen. Das klappt bei J! nicht mehr (gibt zwar
debugg-Modus, aber der reicht mir nicht)

Du kannst auch in jede Funktion ein "echo" oder "var_dump" reinschreiben, es wird dir dann auch
das gewünschte angezeigt....

Welche Funktion haben "&$options" und was spez. bedeutet &$

$options sind vermutlich Variablen eines Formulars oder Suchfilters, da musst du die Stelle
suchen, wo diese Funktion aufgerufen wird....

...und &$ bedeutet, das eine Variable nicht per Wert, sondern per Referenz der Funktion übergeben wird:
Normalerweise übergibt man einer Funktion eine Kopie einer/mehreren Variblen. Was damit innerhalb einer Funktion
geschieht ist irrelevant, da ausser dem "return" nichts davon "nach aussen" dringt (geschlossener Namensraum).
Bei der Uebergabe als Referenz übergiebt man der Funktion aber die Speicheradresse der Original-Variablen: Alles
was an dieser Variablen innerhalb der Funktion verändert wird, betrifft zugleich das Original, da ja auf die gleiche
Speicheradresse verwiesen wird....

Womit/Wie wird von der ersten zur zweiten Funktion etwas durchgegeben?

Code:
function getdb1List( $options=array() ) { $query = $this->_getdb1Query( $options ); //in $query wird der Return-Wert der Funktion _getdb1Query() gespeichert... $result = $this->_getList( $query ); return @$result; }
(siehe Komentar im Code)
Mein Tipp: Mach dich doch mal schlau, was Objekt Orientierte Programmierung mit PHP angeht....

Wozu ist $id (ist ja egal ob aktiv oder nicht)

Das sagt der Funktion store() (eine Methode des JTable-Objekts) ob ein vorhandener DB-Eintrag geändert wird(mit $id), oder ob ein gänzlich neuer DB-Eintrag geschrieben wird ($id = leer)....

Was die DB-Query angeht: Gib die Query mal aus (mit einem echo in der Funkton) und versuch die dann mal direkt im phpMyAdmin auszuführen (Tableprefix einsetzen)....

Und dass in deinem Default Template der View keine Daten ausgegeben werden, rsp. das foreach-Argument ungültig ist, kann mehrere Gründe haben: DB-Query-Fehler, kein DB Resultat, oder die Model-Daten in der View nicht richtig zugewiesen
Code:
$result = $model->getdb1List($options); $this->assignRef('rows', $result);

Gib das $this->rows im tmpl/default.php mal mit var_dump($this->rows) aus, es wird vermutlich leer sein.....

Noch was:
Die com_auto vom Hagen Graf ist ja schon älter, als er die geschrieben hat, war J1.5 glaub ich noch alpha oder beta. Will heissen: ist die eigentlich noch aktuell zur 1.5 stable rsp. 1.5.1? Läuft die Kompo in der aktuellen 1.5.1?

Hoffe geholfen zu haben
Cheers
Roger

Tue das, was du kannst, mit dem was du hast, da wo du bist.
  • chrumb
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
25 Feb. 2008 23:25 #12215 von chrumb
Hi Tribal6,
... Ja - bisschen geholfen, Danke!

> ... die Stelle suchen, wo diese Funktion aufgerufen wird. ...
in der com_auto ist sie nur in einer Datei
(wird nur hier definiert). $options kommt auch nur hier vor.
Sonst aber an vielen Stellen in J! ...

> ... in jede Funktion ein "echo" oder "var_dump" reinschreiben ...
funktioniert nicht immer, da
defined('_JEXEC') or die();
jimport('joomla.application.component.model');
"Ergebnisse" beseitigen - und ohne funktionierts nicht.

var_dump($this->rows)
ergibt hier NULL
also nichts übergeben. Daher die "foreach-Meldung".

In dieser com_auto suche ich "nur" eine anschaulich (aktuelle)
Beispielsfunktion oder -komponente, um bisschen zu lernen.
- bzw. brauche ich DB-Ausgaben ...

> ... Query ... mal direkt im phpMyAdmin ...
funktioniert.

soweit,
Grüße, C.
  • chrumb
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
26 Feb. 2008 13:33 #12226 von chrumb
Hallo,

so - jetzt werden query und Ergebnis-rows durchgegeben:
leider etwas mysteriös, da ich nicht genau weiß, woran
es gelegen hat. Ich arbeite mit phase5 und notepad2.
Hab die gesamte com_auto nochmal "durch-ersetzt"
(auto gegen db1, ...). Dann die alte Model-Datei mit
augenscheinlich identischem Code gegen die frische
getauscht - gab wieder ein NULL-Ergebnis.
Vielleicht klappt was mit copy/past nicht oder ich bin :-X X ...
:)

viele Grüße,
c.
Mehr
26 Feb. 2008 18:51 #12231 von Tribal6
Heya

Mein Tip: Nimm doch eine aktuelle Core-Komponente, und bastel mal da einbisschen rum, am besten eine, die auch nach dem MVC-Pattern gemacht ist (sind eben nicht alle so, oder waren es zumindest). Mit einbisschen "rumspielen" kannst du sogar eine Core-Komponente erweitern....

...oder auf der .org hats auch ein Tuto....
--ALTER LINK WURDE ENTFERNT--

Viel Spass beim probieren
Gruss
Roger

Tue das, was du kannst, mit dem was du hast, da wo du bist.
Moderatoren: Tribal6RePaoDragonlordChris Hoefligerpascaleadiheutschi.ch
Powered by Kunena Forum

Joomla! Verband Schweiz - Mitglied werden