web-dev-qa-db-fra.com

Composant dans le module. addModelPath ne semble pas fonctionner

J'essaie d'afficher un composant dans un module qui semble fonctionner avec cet exemple http://www.escope.cz/en/blog/94-how-to-load-component-in-a-module

Je suis maintenant confronté à un problème où mon modèle n'est pas chargé et je suis sûr que cela a à voir avec cette ligne

$controller->addModelPath(JPATH_SITE . DS . 'components' . DS . 'com_helloworld' . DS . 'models' . DS . 'user.php');

J'ai fait un var_dump($controller) et ne trouve aucune référence à user.php. Je ne suis pas sûr de ce qu'il faut rechercher dans la sortie, mais je sais que user.php ne figure dans aucune recherche.

Le composant fonctionne bien pas dans le module, donc ce n'est pas le composant

[~ # ~] met à jour [~ # ~]

J'ai ajouté cette ligne qui inclut maintenant le modèle et je peux maintenant utiliser le modèle pour appeler $this->msg = $this->get('Msg');

require_once (JPATH_SITE . DS . 'components' . DS . 'com_helloworld' . DS . 'models' . DS . 'user.php');

Mais maintenant, je reçois cette alerte

JForm :: getInstance n'a pas pu charger le fichier

Si j'essaie de faire var_dump() dans le view.html.php du modèle, la valeur null

Voici le code complet du module

<?php

/*
 * @package   Joomla 2.5
 * @author    Jan Linhart
 * @authorurl http://www.escope.cz
 * @license   GNU/GPL
 * 
 * YourModule module - main script
 */ 
defined('_JEXEC') or die('Restricted access');

if(!defined('DS')) define('DS', DIRECTORY_SEPARATOR);

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

JRequest::setVar('option', 'com_helloworld');
JRequest::setVar('view', 'user');
JRequest::setVar('layout', 'default');
JRequest::setVar('task', 'display');

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

if (!class_exists('HelloWorldController')) {
    require_once (JPATH_SITE . DS . 'components' . DS . 'com_helloworld' . DS . 'controller.php');
}

// THIS HAS BEEN ADDED TO INCLUDE THE MODEL
require_once (JPATH_SITE . DS . 'components' . DS . 'com_helloworld' . DS . 'models' . DS . 'user.php');

$controller = new HelloWorldController();
$controller->addModelPath(JPATH_SITE . DS . 'components' . DS . 'com_helloworld' . DS . 'models' . DS . 'user.php');
$controller->setProperties(
    array(
        'basePath' => JPATH_SITE . DS . 'components' . DS . 'com_helloworld',
        'paths' => array(
            'view' => array(
                JPATH_SITE . DS . 'components' . DS . 'com_helloworld' . DS . 'views'
                ),
            'model' => array(
                JPATH_SITE . DS . 'components' . DS . 'com_helloworld' . DS . 'models'
            )
        )
    )
);

$controller->execute('display');

echo '<pre>';var_dump($controller);echo '</pre>';
// revert system vars to previous state
// if($option != null){
//     JRequest::setVar('option', $option);
// }
if($view != null){
    JRequest::setVar('view', $view);
}
if($layout != null){
    JRequest::setVar('layout', $layout);
}
if($task != null){
    JRequest::setVar('task', $task);
}
2
AdRock

Chargement d'un modèle:

JLoader::import('joomla.application.component.model');
JLoader::import( 'user', JPATH_SITE . DS . 'components' . DS . 'com_helloworld' . DS . 'models' );
$user_model = JModelLegacy::getInstance('user','HelloWorldModel');
$items = $user_model->getItems();

Chargement d'une vue de composant:

if(!defined('DS')) define('DS', DIRECTORY_SEPARATOR);

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

JRequest::setVar('option', 'com_helloworld'); 
JRequest::setVar('view', 'events');
JRequest::setVar('layout', 'default');
JRequest::setVar('task', 'display');

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

if (!class_exists('HelloWorldController')) {
    require_once (JPATH_SITE . DS . 'components' . DS . 'com_helloworld' . DS . 'controller.php');
}
$controller = new HelloWorldController();

$controller->addModelPath(JPATH_SITE .DS. 'components' .DS. 'com_helloworld' .DS. 'models' .DS);

$controller->setProperties(array(
    'basePath' => JPATH_SITE .DS. 'components' .DS. 'com_helloworld',
    'paths' => array(
        'view' => array(
            JPATH_SITE .DS. 'components' .DS. 'com_helloworld' .DS. 'views'
            ),
        'model' => array(
            JPATH_SITE .DS. 'components' .DS. 'com_helloworld' .DS. 'models'
            )
        )
    ));

// buffer the view output to a var
ob_start();
$controller->execute('display');
$content = ob_get_contents();
ob_end_clean();


// revert system vars to previous state
JRequest::setVar('option', $option);
JRequest::setVar('view', $view);
JRequest::setVar('layout', $layout);
JRequest::setVar('task', $task);

echo $content; // echo the buffered content
1
Dennis Heiden