web-dev-qa-db-fra.com

Composant-Créateur: Aide au développement de composants

J'ai créé un composant à l'aide de http://component-creator.com/

J'ai deux tables #__competition_data & #__competition_entries.

J'ai aussi une vue vide

La table #__competition_data est l'endroit où les compétitions sont ajoutées (dans le backend) et la #__competition_entries est l'endroit où les entrées sont stockées, à partir d'un formulaire frontal.

Dans ma vue vide, je souhaite pouvoir afficher les _data (indiquant le titre du concours, etc.) et afficher le formulaire (à partir des entrées) en dessous.

J'ai un compte premium avec Component-Creator, mais ils disent qu'ils ne peuvent plus m'aider avec ma demande d'assistance (ce qui, à mon avis, est une rupture de contrat - mais c'est une autre histoire).

Je sais que j'ai besoin d'éditer:

models/frontendv1ewform.php
view/frontendv1ewform/view.html.php
view/frontendv1ewform/tmpl/default.php

Mais je n'arrive pas à comprendre où je vais mal. J'ai lu la documentation sur Joomla.org mais je n'arrive toujours pas à comprendre! Des idées où je vais mal?

3
RustyJoomla

Si j'ai bien compris, vous voulez avoir une liste de données d'une table avec un formulaire pour l'autre table dans la même vue. Ce type de vue n’est pas la tâche la plus facile, car il utilise plusieurs modèles. C'est très probablement hors de la portée de ce composant-créateur est conçu pour et donc ils ne vous soutiennent plus. C'est compréhensible.

Si ceci est votre premier composant, alors je vous conseillerais de chercher une approche différente. C'est comme charger le formulaire en cliquant sur un bouton (peut-être dans un modal). Ensuite, rien de plus simple, car le formulaire sera une vue de formulaire normale et vous aurez une liste de données de vue régulière.

Si vous connaissez mieux Joomla MVC, vous pouvez affecter deux modèles dans votre contrôleur et charger les données nécessaires à partir de celles de votre vue.

Dans mon composant, je l'ai fait dans mon contrôleur principal (controller.php) dans la méthode d'affichage basée sur la vue active. Quelque chose comme ça:

// Add additional models
$viewName       = $this->input->get('view', 'default_view');
$format         = $this->input->get('format', 'html');

switch ($viewName)
{
    case 'foo':
        $viewLayout = $this->input->get('layout', 'default');
        $view = $this->getView($viewName, $format, '', array('base_path' => $this->basePath, 'layout' => $viewLayout));
        $view->setModel($this->getModel('foo'));
        $view->setModel($this->getModel('bar'));
        break;
    case '...':
        ...
        break;
}
3
Bakual