web-dev-qa-db-fra.com

Problème de vue des composants. Méthode modèle non appelée

Aujourd'hui, j'ai créé mon premier composant Joomla après leur tutoriel . Tout dans mon composant fonctionnait comme prévu jusqu'à ce que je décide d'ajouter une deuxième vue à mon composant. J'ai ajouté un nouveau dossier dans le répertoire /views/ De mon composant et ajouté tous les fichiers nécessaires: view.html.php, index.html, tmpl/default.xml, tmpl/default.php, tmpl/index.html.

Voici mon view.html.php

class VacanciesViewSingle extends JViewLegacy
{
    var $vacancy = null;

    function display($tpl = null)
    {
        $this->vacancy = $this->get('Vacancy');

        // // Check for errors.
        if (count($errors = $this->get('Errors')))
        {
            JLog::add(implode('<br />', $errors), JLog::WARNING, 'jerror');

            return false;
        }

        parent::display($tpl);
    }
}

Tant que j'ai compris le fonctionnement des composants dans Joomla, ceci devrait appeler la méthode getVacancy() de ma classe de modèle.

Dans ma classe de modèles, je n'ai que 2 fonctions: getVacancies() qui fonctionne parfaitement avec mon autre vue et getVacancy() qui, à des fins de débogage, ne renvoie qu'un nombre:

public function getVacancy()
{
    return "10";
}

Je m'attends donc à ce que ma vue produise "10". Voici mon fichier `tmpl/default.php ':

defined('_JEXEC') or die('Restricted access');
?>
<?php echo $this->vacancy;?>

PS Ouvrir /index.php?option=com_vacancies&view=single Ne renvoie aucune erreur, juste ma page avec un espace vide où la sortie du composant devrait être ... PS2. Si je modifie $this->vacancy = $this->get('Vacancy'); en $this->vacancy = "10" Dans ma classe de vue, le résultat attendu est "10". Je suppose donc que getVacancy() n'est pas appelé pour une raison quelconque.

1
VTodorov

Il semble que vous n'ayez qu'un seul modèle, plutôt que le modèle attendu par modèle.

En tant que tel, il recherche la fonction dans un modèle lié à votre vue singles, qui n'existe pas.

Essayez de passer un deuxième paramètre à la fonction get pour confirmer le nom du modèle que vous voulez utiliser, c'est-à-dire

$this->vacancy =$this->get('vacancy','vacancies');

(en remplacement de "postes vacants" si vous avez appelé votre modèle autrement)

De plus amples détails sur le fonctionnement de la fonction get sont ici .

3
Richard B