web-dev-qa-db-fra.com

Comment utiliser des tables de recherche dans un composant personnalisé?

J'essaie de développer mon premier composant dans Joomla 3.x. Je suis nouveau dans le paradigme de MVC et apprends les bases du développement de Joomla.

Pour commencer, j'essaie de développer un composant simple pour ajouter et afficher des adresses. J'ai un modèle d'adresse qui étend JModelItem et un modèle qui étend JModelList. J'utilise des tables de recherche pour l'état et la ville (en fonction du code postal). Comment dois-je consulter cette information pour y avoir accès partout où elle sera nécessaire? Dois-je avoir des modèles d'état, de ville, de code postal et demander au contrôleur d'ajouter ces modèles pour les utiliser dans la vue? Devrais-je utiliser des classes d'assistance? Devrais-je utiliser JTable et accéder à l'information d'une manière différente? Je ne sais pas comment cela se ferait dans Joomla et le paradigme de MVC.

J'apprécierais tous les conseils et l'aide qui pourraient être donnés.

2
nimble

Les 3 manières (modèles, JTable, helper class) sont des manières légitimes dans Joomla de résoudre votre problème.

Je créerais probablement une classe JTable pour votre table de correspondance (pour les opérations CRUD) et ajouterais des modèles (liste et élément), ainsi que les vues et les contrôleurs correspondants. Vous pouvez donc modifier les données de recherche dans votre back-end et, si vous ajoutez des champs spéciaux à votre table, vous pourrez utiliser davantage les fonctionnalités intégrées de Joomla (par exemple, la publication, la commande, etc.).

Vous pouvez écrire une méthode dans votre modèle à élément unique pour obtenir les données de recherche basées sur un paramètre Zip ou (probablement à ma façon) vous pouvez écrire une classe d'assistance supplémentaire qui appellera la méthode getItem du modèle et définira un filtre Zip:

<?php
defined('_JEXEC') or die;

// Include your single item model
require_once JPATH_ROOT . '/administrator/components/com_mycomponent/models/lookup.php';

class MycomponentHelperLookup
{
    public static function getDataByZip($Zip)
    {
        $model = JModelLegacy::getInstance('Lookup', 'MycomponentModel', array('ignore_request' => true));
        $model->setState('filter.Zip', $Zip);
        return $model->getItem();
    }
}

De cette façon, vous avez un haut niveau de réutilisabilité et vous pouvez utiliser beaucoup de fonctionnalités de Joomla.

1
fruppel