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!

Joomla Entwickler Kurse / Informationen

  • smhaller
  • Autor
  • Offline
  • Junior Mitglied
  • Junior Mitglied
Mehr
15 Mai 2009 19:51 #21862 von smhaller
Joomla Entwickler Kurse / Informationen wurde erstellt von smhaller
Hallo Leute,

ich bin ja nun wirklich nicht mehr neu in der Joomla Welt. Doch bei der neuen API im Hinblick auf Komponenten Entwicklung habe ich irgendwo noch ein Fehler im Denkmuster.

Es gibt ja Kurse von verschiedenen Anbietern, aber soweit ich sehe gibt es nirgends wirklich etwas für Leute die sich mit der Programmierung beschäftigen.

Im Buch "Joomla 1.5 - Das Umfasende Buch" aus dem Galileo Computing Verlag hat's zwar Anhaltspunkte, aber wenn es um komplexere Angelegenheiten geht hilft's einem nicht weiter.

Ausgangslage:
Eine Adresskomponente gibt die Liste aller Einträge in Tabellenform aus. Bei Click auf den Eintrag Soll der Eintrag mit allen Daten dargestellt werden. Die View und das HTML Element werden korrekt angezogen. Die benötigten Daten werden sollen im entsprechenden Modell über eine Funktion geliefert werden welche sich in einem include-file befindet. Das Auslesen der Daten funktioniert, aber die Übergabe an die View schlägt fehl.

Genau für solche Sachen fände ich es toll, wenn es einen Kurs gäbe in welchem man diese "Kleinigkeiten" auch einbringen und daran arbeiten kann.

Liebe Grüsse
Stefan Haller
Mehr
15 Mai 2009 20:43 #21863 von Tribal6
Hi Stefan

Auch hier gilt das Prinzip
Angebot und Nachfrage, oder umgekehrt.

Ich denke nicht, das die Nachfrage so gross ist, das es sich lohnt, ein Angebot zu konzipieren....
(siehe Aktivitäten im Entwicklerforum hier)

Aber wenn du dir einbisschen mehr in deinen Code schauen lässt, kann man deiner Komponente sicher auf die Sprünge helfen ;)

Cheers
Roger

Tue das, was du kannst, mit dem was du hast, da wo du bist.
  • smhaller
  • Autor
  • Offline
  • Junior Mitglied
  • Junior Mitglied
Mehr
15 Mai 2009 21:05 #21866 von smhaller
Hi Roger,

danke für Deine Antwort. Ja sowas ähnliches habe ich mir schon gedacht. :)

showEntry.php - Modell
Code:
$contact = new Contact($id); if ($contact->picture_url) { $tableColumnAmt = 3; $tableColumnWidth = (540 - $options->picWidth) / 2; } else { if ($options->picAlwaysDisplay == 1) { $tableColumnAmt = 3; $tableColumnWidth = (540 - $options->picWidth) / 2; } else { $tableColumnAmt = 2; $tableColumnWidth = (540 / 2); } } $r_contact = $contact; // RETURN RESULTS OF QUERY return $r_contact;

view.html.php
Code:
class TabViewShowentry extends JView { function display($tpl = null) { $model =& $this->getModel(); $r_contact = $model->retrieve(); $options = new Options(); if (mysql_num_rows($r_contact)<1) { $check = 1; } $this->assignRef( 'r_contact', $r_contact ); $this->assignRef( 'options', $options ); print_r($r_contact); parent::display($tpl); } }

classes.php - Auschnitt des include-file
Code:
function Contact($id) { $db =& JFactory::getDBO(); $this->id = $id; // Assume the ID given is legit. No checks are performed. $this->sql = "SELECT * FROM " . TABLE_CONTACT . " AS contact WHERE contact.id=$this->id"; // Fill in variables from database $this->firstname = stripslashes( $this->contact&#91;'firstname'&#93; ); $this->lastname = stripslashes( $this->contact&#91;'lastname'&#93; ); $this->middlename = stripslashes( $this->contact&#91;'middlename'&#93; ); $this->primary_address = stripslashes( $this->contact&#91;'primaryAddress'&#93; ); $this->birthday = $this->birthday('%e. %M %Y'); $this->nickname = stripslashes( $this->contact&#91;'nickname'&#93; ); $this->picture_url = stripslashes( $this->contact&#91;'pictureURL'&#93; ); $this->notes = stripslashes( nl2br( $this->contact&#91;'notes'&#93; )); $this->last_update = $this->last_update('%W %e. %M %Y (%H:%i)'); $this->hidden = $this->contact&#91;'hidden'&#93;; $this->who_added = stripslashes( $this->contact&#91;'whoAdded'&#93; ); // Create other variables $this->fullname = $this->lastname . ", " . $this->firstname; print $this->sql."<br />"; // Put data into variable holders -- taken from arrays that are created from query results. $contact = mysql_fetch_array(mysql_query($this->sql)) or die(reportSQLError($this->sql)); print_r($contact); // RETURN RESULTS OF QUERY return $contact; }

die print, print_r statements dienen nur den Debug zwecken. Hier wird das Array korrekt zurückgegeben.

Liebe Grüsse
Stefan
Mehr
16 Mai 2009 21:54 #21870 von Tribal6
Hi Stefan

Hmmmm... ich versuchs mal:

aber die Übergabe an die View schlägt fehl.

Wie weit "kommen" denn deine Daten? Ein gutes Tool für diesen Zweck ist "JDump", da kannst du vom Controller bis zum Model Variblen-Inhalte in einem Popup anzeigen lassen. JDump findest du unter extensions.joomla.org

Ich hab gesehen, dass du in deinem Model Prozeduralen Code drinn hast. Das Model ist normalerweise eine Klasse, die die JModel Klasse erbt und erweitert, und eigentlich solche Funktionen wie in deinem Include-Files enthalten sollte.

Apropos: Im Include-File "holst" du dir eine Referenz auf das Datenbank-Objekt, benutzt aber die nativen PHP-MySQL Funktionen.

Mach mal folgendes in dein Model-File:
Code:
defined('_JEXEC') or die('No direct Acces!'); jimport( 'joomla.application.component.model' ); class TabModelShowentry extends JModel { //Namenskonvention für die Model-Klasse: &#91;Komponentenname&#93;Model&#91;ViewName&#93; function __construct(){ parent::__construct(); } function contact($id) { if ((int)$id >0) { $this->id = $id; // Assume the ID given is legit. No checks are performed. }else { return false; } // Referenz auf das Joomla Datenbank-Object instanzieren und Kontakt holen: $db =& JFactory::getDBO(); $query = "SELECT * FROM #__deineKontaktTabelle AS contact WHERE contact.id=$this->id"; $db->setQuery($query); $contact = $db->loadObject(); // da ist nun der Kontakt als Object drinn if ($contact) { // Fill in variables from database $contact->firstname = stripslashes( $contact->firstname ); $this->lastname = stripslashes( $contact->lastname ); // plus die anderen Routinen.... //////////////////// // Create other variables $contact->fullname = $contact->lastname . ", " . $contact->firstname; return $contact; else { return false; } } }

Und in der View in die Funktion display() machst du dann:
Code:
defined( '_JEXEC' ) or die( 'Restricted access' ); jimport( 'joomla.application.component.view'); class TabViewShowentry extends JView { function display($tpl = null) { $model =& $this->getModel(); $contact = $model->contact(JRequest::getInt('id', 0); if ($contact) { $this->assignRef('contact', $contact); }else { $this->assignRef('check', '1'); } parent::display($tpl); } }
(im default.php der View müsstest du nun was in $this->contact oder aber in $this->check haben)

Ich hoffe das ist einigermassen brauchbar und hat nicht allzuviele Schreipfähler drinn. Feedback erwünscht ;)
(Tabellenname musst du noch in der DB-Query anpassen)

Vielleicht hilft dir das Tutorial dazu auf --ALTER LINK WURDE ENTFERNT-- falls du es nicht schon durch hast, mich hat's jedenfalls weitergebracht.

Cheers
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