web-dev-qa-db-fra.com

Partage de vues Joomla à travers des extensions

J'ai créé ma propre bibliothèque Joomla, qui contient quelques fonctions utilitaires et des vues à partager avec d'autres extensions nécessitant les mêmes vues.

Dans une extension ("Redextension"), tout ce que je fais est d'appeler:

JLoader::import('mylib.views.objects');

La vue des objets est juste une vue régulière:

defined('_JEXEC') or die;
class RedextensionViewObjects extends JViewLegacy
{
    function display($tpl=null) {
...

La question est de savoir comment puis-je résumer le préfixe "Redextension", car cela ne fonctionnera évidemment pas si j'utilise cette vue dans une autre extension appelée "Blueextension". Il en va de même pour les modèles. Les extensions ont la même structure de base de données et des parties de la fonctionnalité. Ce serait donc bien si je pouvais partager cela au sein d'une bibliothèque.

1
Mike

Une vue est un atout d'extension. Dans la bibliothèque Joomla simple, il n’ya aucun moyen de partager une vue complète entre les extensions.

  • Par exemple, chaque installation d'extension ne peut avoir qu'un seul script SQL. Pour combiner plusieurs scripts SQL d'installation, vous devez écrire votre propre script d'installation.
  • De plus, pour charger un ensemble de modèles ou de vues depuis un emplacement différent, vous devez les ajouter à votre extension avec un appel à l’initialisation de la bibliothèque, plusieurs JLoader :: import ou JLoader: register .
  • JLayouts peut vous aider à partager le code de présentation. https://docs.joomla.org/J3.x:Sharing_layouts_across_views_or_extensions_with_JLayout

D'autre part, dans le monde FoF ( https://github.com/akeeba/fof ), vous pouvez appeler une vue entre des extensions ou des modules. Par exemple:

$config = array(
                'option' => 'com_todo',
                'view' => 'tasks',
                'layout' => $layout,
                'input' => $input
);

F0FDispatcher::getTmpInstance('com_todo', 'tasks', $config)->dispatch();
1
Anibal