J'ai un composant et une forme dedans. Et je veux rendre le même formulaire dans un module.
Un exemple peut être la forme de base d'un article Joomla composants/com_content/views/form/tmpl/edit.php qui est rendue sur la base de composants/com_content/models/forms/article.xml
Autant que je sache, dans ce cas, il n'est pas possible de charger une vue de composant dans le module. Ai-je raison?
Je vois est d'utiliser un AJAX pour obtenir ma fiche de mon composant chargé comme ? Option = com_mycomponent & view = myform & tmpl = composant et injecter le depuis HTML dans ma page principale DOM. Une manière laide. Donc, je ne voudrais pas utiliser cette façon. Ai-je raison?
Donc, je veux être SEC dans le module.
Je ne veux pas répéter la vue (par exemple, charger un formulaire XML et y lier des données). Comment rester DRY dans le module avec la partie vue?
Ne répétez pas le rendu du modèle HTML (/views/form/tmpl/edit.php ) Ici, les choses sont plus simples. Je peux utiliser JLayouts au lieu de l'approche tmpl/default.php dans mon composant. Je peux donc réutiliser les mises en page n’importe où (dans un module, un plugin).
S'il vous plaît, dites-moi comment se comporter de la manière la plus appropriée dans ce cas. Ou donnez-moi un composant-> module ou un exemple de composant-> template qui implémente une telle approche. Donc, je peux enquêter sur le code.
P.S. Je me demande pourquoi mod_login utilise son propre modèle de formulaire au lieu de réutiliser la même vue de composant. Ce serait un bel exemple pour les gars comme moi.
C’est le code que j’ai écrit il ya quelque temps pour Joomla 1.5, vous devrez l’adapter pour jooma 3.x (JRequest -> JInput, ...), et il existe sûrement un moyen plus élégant de le faire.
C'est la partie basique de module.php
Mon composant est 'com_alojamiento', le contrôleur est 'alojamientoController'
Obtenir l'option actuelle, vue, mise en page, ... pour la restaurer après le rendu.
$optionant = JRequest::getCmd('option',null);
$view = JRequest::getCmd('view',null);
$layout = JRequest::getCmd('layout',null);
$task = JRequest::getCmd('task',null);
Puis définissez vos paramètres, options, vue, mise en page et tout ce dont vous avez besoin, identifiants, ...
$yourcomponent = '';
$yourview = '';
$yourlayout = '';
$yourtask = '';
Réglez-le dans JRequest (JInput dans 3.x)
JRequest::setVar('option', $yourcomponent);
JRequest::setVar('view', $yourview);
JRequest::setVar('layout', $yourlayout);
JRequest::setVar('task', 'yourtask');
Définissez des paramètres supplémentaires tels que id, customer_id, etc.
Fichiers de langue
$lang = JFactory::getLanguage();
$lang->load('com_alojamiento', JPATH_SITE);
Charger le contrôleur
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'
)
)
));
Et rendre
ob_start();
$controller->execute($task);
$salida = ob_get_contents();
ob_end_clean();
Après le rendu, restaurer les valeurs actuelles
JRequest::setVar('option', $optionant);
JRequest::setVar('view', $view);
JRequest::setVar('layout', $layout);
JRequest::setVar('task', $task);
Le contenu de la vue des composants est dans la variable $ salida à utiliser dans votre module tpl
Lorsque je veux utiliser un composant dans un module, j'utilise l'extension Component Anywhere de Regular Labs.
https://www.regularlabs.com/extensions/componentsanywhere
Peut-être que cela pourrait être un exemple à examiner.
HTH