Hallo,
irgendwie fehlt mir hier im Forum ein Unterforum "Komponentenentwicklung", daher stelle ich mein Problem hier ein und hoffe, dass es nicht komplett untergeht bei den Fragen zu anderen Komponenten.
Ich entwickele gerade meine erste Joomla!1.5-Komponente und stecke bei einem Problem des Controller im Admin-Bereich fest.
Ich will im Adminbereich zwei DB-Tabellen bearbeiten: "tags" und "objects".
Als Vorlage habe ich das Galileo Openbook (http://openbook.galileocomputing.de/joomla15/joomla_42_eine_komponente_programmieren_mg_001.htm ) verwendet, wobei das Beispiel leider viel zu kurz gefasst ist.
Beginnen wir mit der Einstiegsdatei admin.<meine_komponente>.php, das ich um einige Debugausgaben erweitert habe.
In meiner XML-Manifest Datei wird als Submenu Attribut act="objects" bzw. act="tags" definiert:Code:<?php defined('_JEXEC') or die('Restricted access'); require_once (JPATH_COMPONENT.DS.'controller.php'); if($controller = JRequest::getVar('act')) { $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php'; if (file_exists($path)) { require_once $path; } else { $controller = ''; } } $use_view = 0; $classname = '<meineKomponente>Controller'.$controller; $controller = new $classname( ); $view = $controller->getView(JRequest::getVar('act'),'html'); $model= $controller->getModel(JRequest::getVar('act')); echo " controller classname=" . get_class($controller) . "<br>"; echo " view classname=" . get_class($view) . "<br>"; echo " model classname=" . get_class($model) . "<br>"; echo " task=" . JRequest::getVar('task')."<br>"; echo " option=" . JRequest::getVar('option')."<br>"; echo " act=" .JRequest::getVar('act')."<br>"; if ($use_view) { $view->display(); } //$controller->execute( "","html" ); if (!$use_view) $controller->execute(JRequest::getVar('task')); $controller->redirect(); ?>
Daher wird beim Anklicken von "Tags" oder "Objekte" die URICode:<menu>meine Komponente</menu> <submenu> <menu act="tags">Tags</menu> <menu act="objects">Objekte</menu> </submenu>
aufgerufen.Code:/administrator/index.php?option=com_<meineKomponente>&act=tags
Setze ich im ersten Script $use_view auf 0, so wird der Standardweg bestritten (so wie ich es auch vorhabe) und der entsprechende Controller mit execute aufgerufen, wobei der task übergeben wird. Da der task leer ist, sollte das Defaultverhalten "display" aufgerufen werden. Stattdessen kann der Controller wohl intern den View nicht richtig zusammensetzen, es kommt zur Fehlermeldung:
Setze ich $use_view auf 1, so wird der View mit den Parametern JRequest::getVar('act') und 'html' auf dem Controller geholt und dann direkt mit display() aufgerufen. Das funktioniert zwar, aber der View kann dann nicht auf das Modell zugreifen. Hier erscheint zwar keine Fehlermeldung, aber leider auch keine Daten. Der SQL-Befehl im Modell wird nicht ausgeführt, ich habe dort mal künstlich einen Fehler eingebaut.Code:500 - Es ist ein Fehler aufgetreten View not found [name, type, prefix]: <meineKomponente>s,html,<meineKomponente>sView
Mit $use_view=1 verlasse ich den Standardweg, was dann dazu führt, dass das Modell leider ohne Fehlermeldung gar nicht gefunden wird.
An was kann das liegen? Ich würde gerne wirklich den Standardweg einhalten.
Bin für jede Hilfe dankbar.
Gruß joomlix


LinkBack URL
About LinkBacks
Zitieren

Lesezeichen