2016-05-31 11 views
1

Ich verwendete Komponentenersteller, um eine benutzerdefinierte Komponente für Joomla 3 zu generieren. Ich habe eine Ansicht im Administratorfenster, die eine Funktion von einem Modell im Frontend erfordern würde.Joomla 3 - Benutzerdefinierte Komponente - Zugriff auf das Site-Modell über die Admin-Ansicht?

Ich habe mehrere Tage Google-Suchanfragen getan versuchen, eine passende Antwort zu finden, das ist die nächste, die ich auf eine Arbeits Antwort gekommen sind:

How can I include multiple models in one view for in a Joomla 3.x component built with Component Creator

jedoch in dieser Antwort, die er scheint zu sein, Verwenden eines Site View-Modells aus einer anderen Site-Ansicht. Hier

ist ein wenig über meine Komponentenstruktur:

Name: com_stargazer

Admin View: E-Mail

index.php option = com_stargazer & view = E-Mail & layout = Test /administrator/komponenten/com_stargazer/ansichten/email/tmpl/test.php

Site View und Modell: returnpage

/components/com_stargazer/models/returnpage.php /components/com_stargazer/views/returnpage/tmpl/default.php

Ich habe versucht, meine Admin-Ansicht ist das Geländemodell, indem Sie den Pfad zu ändern:

$this->setModel(getModel(JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_stargazer/models', 'returnpageModel'))); 
    $this->setModel(JModelLegacy::getInstance('returnpage', 'stargazerModel')); 
    // assigns array from the second model to 'ItemsOtherModel.' there is no '$' sign used. 
    $this->ItemsOtherModel = $this->get('tags','returnpage'); 

GetModel scheint jedoch nicht wie es aus der Sicht zugänglich ist. (? Wahrscheinlich der Controller nur)

Andere, sagen Referenzen der Controller (Zusätzliche Hinweise auf Kommentare geschrieben) zu ändern:

https://docs.joomla.org/Using_multiple_models_in_an_MVC_component

In den letzten Tagen habe ich verschiedene Iterationen der oben versucht referenzierte Codebeispiele. . . Letztendlich bin ich verwirrt über welchen Controller zu modifizieren? Muss ich den Admin-Controller ändern, damit dies funktioniert oder der Site-Controller? Wäre es einfacher, die Funktion dem Admin-Modell hinzuzufügen und auf die Site-Ansicht zuzugreifen?

Es war auch schwierig zu debuggen, da ich nicht weiß, welches Modell den Fehler wirft. Meine beste Vermutung ist jedoch, dass ich KEIN Glück gehabt habe, das Site-Modell aus der Admin-Ansicht heraus anzuhängen. Jede Hilfe wäre hilfreich, um dies zu klären.

Das ist meine erste Frage, also hoffe ich, dass es klar genug ist.
Ich kann klären, wenn nötig. Vielen Dank im Voraus.

+0

Andere referrences verwenden: https://www.component-creator.com/en/forum/community-support/153-multiple-models-in-einem-ansicht-fuer-j3-3 *** https://api.joomla.org/cms-3/classes/JModelLegacy.html *** https://www.corephp.com/blog/joomla-mvc-load-a-model-from-anywhere/ *** https://lvtechnologies.wordpress.com/2013/07/17/joomla-mvc-load-a-model-from-anywhere/ *** –

Antwort

2

Um ein Frontend- oder Backend-Modell aufzurufen, können Sie JLoader oder sogar require_once verwenden, um die Modelldatei einzubinden. Mit JLoader Sie das Modell innerhalb Admin Ansicht wie diese

JLoader::import('joomla.application.component.model'); //Load the Joomla Application Framework 

JLoader::import('returnpage', JPATH_SITE . '/components/com_stargazer/models'); //Call the frontend model directory 


$tags_model = JModelLegacy::getInstance('returnpage', 'StargazerModel');//Instantiate the model 


$tags = $tags_model->gettags(); 

nennen Und Sie können auch require_once

require_once JPATH_COMPONENT_SITE.'/models/returnpage.php'; 

$tags_model = JModelLegacy::getInstance('returnpage', 'StargazerModel');//Instantiate the model 


$tags = $tags_model->gettags(); 
+0

Vielen Dank. Deine Antwort hat das sehr einfach gemacht. Ich habe beide Methoden ausprobiert, und beide funktionieren gleich gut. Weißt du, ob es einen Weg gibt, der dem anderen vorzuziehen ist? Ich schätze Ihre Zeit und Ihr Fachwissen. –

+0

Sie sind herzlich willkommen. Der zweite benötigt weniger Ausführungszeit, aber ich bevorzuge den ersten, da er Joomla API folgt. –