it-swarm.com.de

Wie rendere ich eine Komponentenansicht in einem Modul?

Kurz

Ich habe eine Komponente und eine Form darin. Und ich möchte das gleiche Formular in einem Modul rendern.

Ein Beispiel hierfür ist das Joomla-Artikelbearbeitungsformular components/com_content/views/form/tmpl/edit.php , das basierend auf components/com_content/gerendert wird. models/forms/article.xml

In diesem Fall ist es meines Erachtens nicht möglich, eine Komponentensicht in das Modul zu laden. Habe ich recht?

Eine Möglichkeit

Ich sehe es ist, ein AJAX zu verwenden, um mein Formular von meiner Komponente zu laden, wie ? Option = com_mycomponent & view = myform & tmpl = component und das von zu injizieren HTML in meine Hauptseite DOM. Ein hässlicher Weg. Also würde ich diesen Weg nicht gerne benutzen. Habe ich recht?

Ein anderer Weg

Also möchte ich TROCKEN im Modul sein.

  1. Ich möchte den Ansichtsteil nicht wiederholen (z. B. XML-Formular laden und Daten daran binden). How to stay DRY im Modul mit dem Ansichtsteil?

  2. Wiederholen Sie nicht das Rendern von HTML-Vorlagen (/views/form/tmpl/edit.php ). Hier sind die Dinge einfacher. Ich kann JLayouts anstelle des tmpl/default.php Ansatzes in meiner Komponente verwenden. So kann ich die Layouts überall wiederverwenden (in einem Modul, einem Plugin).

Um was ich bitte

Sagen Sie mir bitte, wie ich mich in diesem Fall am besten verhalten soll. Oder geben Sie mir ein Komponenten-> Modul- oder ein Komponenten-> Template-Beispiel, das einen solchen Ansatz implementiert. Also kann ich den Code untersuchen.

S. Ich frage mich, warum mod_login eine eigene Formularvorlage verwendet, anstatt dieselbe Komponentenansicht wiederzuverwenden. Das wäre ein schönes Beispiel für Leute wie mich.

1
Gruz

Dies ist Code, den ich vor einiger Zeit für Joomla 1.5 geschrieben habe. Sie müssen ihn für Jooma 3.x anpassen (JRequest -> JInput, ...), und es gibt sicherlich eine elegantere Möglichkeit, dies zu tun.

Dies ist der grundlegende Teil von module.php

Meine Komponente ist 'com_alojamiento', der Controller ist 'alojamientoController'

Holen Sie sich die aktuelle Option, Ansicht, Layout, ... um es nach dem Rendern wiederherzustellen.

$optionant = JRequest::getCmd('option',null);
$view = JRequest::getCmd('view',null);
$layout = JRequest::getCmd('layout',null);
$task = JRequest::getCmd('task',null);

Dann stellen Sie Ihre Parameter, Option, Ansicht, Layout und was Sie brauchen, IDs, ...

$yourcomponent = '';
$yourview = '';
$yourlayout = '';
$yourtask = '';

Setze es in JRequest (JInput in 3.x)

JRequest::setVar('option', $yourcomponent); 
JRequest::setVar('view', $yourview);
JRequest::setVar('layout', $yourlayout);
JRequest::setVar('task', 'yourtask');

Setze zusätzliche Parameter wie id, customer_id, etc.

Sprachdateien

$lang = JFactory::getLanguage();
$lang->load('com_alojamiento', JPATH_SITE);

Laden Sie den Controller

if (!class_exists('alojamientoController')) {
    require_once (JPATH_SITE .DS. 'components' .DS. 'com_alojamiento' .DS. 'controller.php');
}
$controller = new alojamientoController();
$controller->addModelPath(JPATH_SITE .DS. 'components' .DS. 'com_alojamiento' .DS. 'models' .DS);

$controller->setProperties(array(
    '_basePath' => JPATH_SITE .DS. 'components' .DS. 'com_alojamiento',
    '_path' => array(
        'view' => array(
            JPATH_SITE .DS. 'components' .DS. 'com_alojamiento' .DS. 'views'
            ),
        'model' => array(
            JPATH_SITE .DS. 'components' .DS. 'com_alojamiento' .DS. 'models'
            )
        )
    ));

Und rendern

ob_start();
$controller->execute($task);
$salida = ob_get_contents();
ob_end_clean();

Stellen Sie nach dem Rendern die aktuellen Werte wieder her

JRequest::setVar('option', $optionant);
JRequest::setVar('view', $view);
JRequest::setVar('layout', $layout);
JRequest::setVar('task', $task);

Der Inhalt der Komponentenansicht befindet sich in der Variablen $ salida, die in Ihrem Modul tpl verwendet werden soll

Wenn ich eine Komponente in einem Modul verwenden möchte, verwende ich die Component Anywhere-Erweiterung von Regular Labs.

https://www.regularlabs.com/extensions/componentsanywhere

Vielleicht könnte das ein Beispiel für Sie sein, das Sie überprüfen sollten.

HTH

0
NJA