Willkommen Gast. Bitte anmelden oder registrieren.

Autor Thema: Controller nicht vorhanden?  (Gelesen 2516 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

david_losse

  • Bestätigter Nutzer
  • Beiträge: 10
Controller nicht vorhanden?
« am: 16. Juli 2015, 12:43:45 »
Hallo,

ich versuche mich an die Joomla-Norm etwas mehr anzulehnen und verwende jetzt mal den Parameter "task". Ihr werdet vielleicht feststellen, dass ich in beiden Controllerdateien die function edit() habe, aber ein Duplikatfehler wäre mir ehr lieber als die Meldung "Ungültiger Controller: name='fotoalbum', format='' "

Es ist im Backend und ist eine Aktion von dem Formular meines letzten Beitrags bezüglich Formulars. in der fotoalbum.xml welche ich im admin und im Hauptordner habe, dort habe ich in der Sektion <files folder="site"> und <files folder="admin"> jeweils weitere Dateien aber auch diese hier
<filename>controller.php</filename>
<filename>fotoalbum.php</filename>

Wenn ich normal im Backend auf meine Komponente gehe, wähle dort meinen Ausgegebenen Datensatz mit Bearbeiten an, lädt er das Formular, wenn ich es übermittle macht er bei der Zeile

<input type="hidden" name="task" value="fotoalbum.edit"/>
Ich habe diese zwei Dateien, wie gesagt, was und welche Funktionen wo hingehört, weiß ich nicht.

controller.php
<?php

// Den direkten Aufruf verbieten
defined('_JEXEC') or die;
 
/**
 * Allgemeiner Controller der Fotoalbum Komponente
 */
class fotoalbumController extends JControllerLegacy
{
    
/**
     * display task
     *
     * @param bool $cachable
     *
     * @return void
     */
    
function display($cachable false$urlparams = Array())
    {


// Der Standardview wird gesetzt
JRequest::setVar('view'JRequest::getCmd('view''fotoalbum'));

        
 
        
// Die displaymethode der Elternklasse aufrufen
        
parent::display($cachable$urlparams);
    }

function edit() {

}
}

fotoalbum.php
<?php
 
// Den direkten Aufruf verbieten
defined('_JEXEC') or die;
 
// Eine Instanz des Controllers mit dem Präfix 'HalloWelt' beziehen
$controller JControllerLegacy::getInstance('fotoalbum');
 
$task JFactory::getApplication()->input->getCmd('task');

// Den 'task' der im Request übergeben wurde ausführen
echo "TASK: >".$task."<"//DEBGUG
$controller->execute($task);
 
// Einen Redirect durchführen wenn er im Controller gesetzt ist
$controller->redirect();

function 
edit() {


}

zero24

  • Bestätigter Nutzer
  • Beiträge: 90
    • Meine Webseite
Antw: Controller nicht vorhanden?
« Antwort #1 am: 16. Juli 2015, 13:11:15 »
Hallo,

Ich denke da fehlt eine Datei ;)

Die Haupt controller.php soll keine edit funktion besitzen ;)

Dafür gib es den Ordner controllers und die "view".php; Dort sollen dann "view spezifische" Controller Sachen drin liegen. Das Model ist für die Daten zuständig und der View zum anzeigen der Werte. (so grob)

Hauptcontroller (Beispiel):
https://github.com/joomla-extensions/weblinks/blob/master/src/com_weblinks/admin/controller.php

Viewcontroller (Beispiele):
https://github.com/joomla-extensions/weblinks/blob/master/src/com_weblinks/admin/controllers/weblink.php
https://github.com/joomla-extensions/weblinks/blob/master/src/com_weblinks/admin/controllers/weblinks.php

Aber da kann vielleicht auch hier jemand von den Programmierern was zu sagen ;)
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, daß er genug davon habe. (Rene Descartes, fr. Mathematiker u. Philosoph, 1596 - 1650)

Firstlady

  • Pink Berserk (Mod)
  • Beiträge: 190
    • www.chmst.de
Antw: Controller nicht vorhanden?
« Antwort #2 am: 16. Juli 2015, 20:07:35 »
Hallo David,
ich glaub du hast die Funktion des controllers nicht verstanden. Oder des ganzen MVC-Patterns?
Es führt auch zu weit, das hier zu beschreiben.

Deshalb  Mach mal
<input type="hidden" name="task" value="" />
Im Verzeichnis /controllers  machst du einen Controller /fotoalbum.php

class FotoalbumControllerFotoalbum extends JControllerForm
Dort kannst du dann auf den task "edit" reagieren.
« Letzte Änderung: 17. Juli 2015, 08:26:12 von Firstlady »
Grüße, Christiane

david_losse

  • Bestätigter Nutzer
  • Beiträge: 10
Antw: Controller nicht vorhanden?
« Antwort #3 am: 20. Juli 2015, 13:28:44 »
Hallo David,
ich glaub du hast die Funktion des controllers nicht verstanden. Oder des ganzen MVC-Patterns?
Es führt auch zu weit, das hier zu beschreiben.

Deshalb  Mach mal
<input type="hidden" name="task" value="" />
Im Verzeichnis /controllers  machst du einen Controller /fotoalbum.php

class FotoalbumControllerFotoalbum extends JControllerForm
Dort kannst du dann auf den task "edit" reagieren.

Herzlichen lieben Dank für die tolle "Noob"-Anleitung, bei gutefrage.net würde ich auf hilfreichste Antwort klicken, ich denke auch, dass ich das Prinzip mit dem MVC noch nicht ganz so raus habe. MVC = Models, View, Controller; Models enthält allgemeine Funktionen, meiner Meinung nach. Views sind die Ausgaben für den DesignerPart. Controler sind Ereignisse welche durchlaufen werden sollen und je nach wollen die Models nutzt.. Laut einem eBook für Joomla 2.5 ist es auch nicht einfach erklärt dieses MVC-Prinzip und bedarf größerer Zeit. Nun die Funktion ist dann auch mit zwei Parametern zu übergeben. warum $key und $urlVar beide auf 1 stehen kann ich auch nicht sagen, bzw. wo ich diesen Wert beeinflussen kann.
Da hier mein erstes dynamisches Formular ist finde ich es klasse, jetzt muss ich nur noch vom input jForm laden, da es dort mit Array bearbeitet wird.

Ich überlege auch schon, ob ich aus Spaß einfach bei github mein Fotoalbum-Script einstelle um Verbesserungsvorschläge erhalten zu können.

Firstlady

  • Pink Berserk (Mod)
  • Beiträge: 190
    • www.chmst.de
Antw: Controller nicht vorhanden?
« Antwort #4 am: 22. Juli 2015, 11:15:40 »
Zitat
Ich überlege auch schon, ob ich aus Spaß einfach bei github mein Fotoalbum-Script einstelle um Verbesserungsvorschläge erhalten zu können
.
Ja, mach das doch!
Man kann oft in den Foren keine echten Tipps geben, wenn man nur einzelne Code Zeilen sieht und nicht weiss wo man den Fragesteller sozusagen "abholen" kann.

Zitat
warum $key und $urlVar beide auf 1 stehen kann ich auch nicht sagen, bzw. wo ich diesen Wert beeinflussen kann.

Wahrscheinich sollte das gar nicht auf 1 stehen
Hier findest du die Dokumentation von JControllerForm, und die Erklärung der Variablen (method save)
https://api.joomla.org/cms-3/classes/JControllerForm.html#method___construct

Der Standardfall einer Komponente  ist - einfach JControllerForm machen lassen:

public function save($key = null, $urlVar = null)
Grüße, Christiane

david_losse

  • Bestätigter Nutzer
  • Beiträge: 10
Antw: Controller nicht vorhanden?
« Antwort #5 am: 24. Juli 2015, 10:12:36 »
Bezüglich GetHub habe ich mich noch nicht zurecht gefunden und um es zu lösen keine Zeit gefunden.

nachdem ich mein Bild/Album bearbeitet habe, ruft er ja die Funktion auf.

function edit($key = NULL, $urlVar = NULL) {
$input = JFactory::getApplication()->input;
$jform = $input->getVal('jform');
....
$db = JFactory::getDBO();
$db->setUTF();
$query = $db->getQuery(true);
$query->update('#__fotoalbum');

$set_params = Array();
$set_params[] = 'bezeichnung = "'.$jform["bezeichnung"].'"';
//und weitere

$query->set($set_params);
$query->where('id = "'.$jform["id"].'"');

$db->setQuery($query);

try {
$db->execute();
} catch (RuntimeException $e) {
JError::raiseError(500, $e->getMessage());
}

  }

Nun funktioniert auch soweit aber ich habe nun kein Template (Ausgabe) mehr bzw. keine Anzeige. JRoute wende ich nun wie an auf sich selbst?

Ich hoffe das ich am Sonntag Zeit finde, um auf GitHub es hochzuladen, bzw. rausfinde wie. (Add, Create, Clone)

Grüße erstmal.
David

Firstlady

  • Pink Berserk (Mod)
  • Beiträge: 190
    • www.chmst.de
Antw: Controller nicht vorhanden?
« Antwort #6 am: 24. Juli 2015, 20:13:26 »
Der Controller sollte keine Datenbankzugriffe machen - das gehört ins Model.

Der Controller prüft evtl. Berechtigungen fürs Edit, sorgt dann dafür, dass im model fotoalbum das Speichern gemacht wird (was die Basisklasse JModelForm erledigt) und dass dann im Normalfall auf fotoalbums die Erfolgsmeldung kommt.
Oder wie deine Listview heißt - albums ist ja ein ein unschönes Wort ;)

Wenn du es den Controller selber machen läßt dann muss es ein redirect auf irgendeine view geben.
Grüße, Christiane