Dans un plugin, j'ai besoin d'ajouter et de peupler (les données sont disponibles dans mon plugin) une colonne pour com_menus & view = menus dans l'administration.
mon_plugin.php
...
public function onAfterInitialise()
{
$input = JFactory::getApplication()->input;
if (JFactory::getApplication()->isAdmin()
&& $input->getCmd('option') == 'com_menus'
&& $input->getCmd('view') == 'menus')
{
JRequest::setVar('view', 'menusextra');
JLoader::register('MenusViewMenusextra', __DIR__ . '/views/menus/view.html.php');
}
}
...
view.html.php
...
JLoader::register('MenusViewMenus', JPATH_ADMINISTRATOR . '/components/com_menus/views/menus/view.html.php');
JLoader::register('MenusModelMenus', JPATH_ADMINISTRATOR . '/components/com_menus/models/menus.php');
class MenusViewMenusextra extends MenusViewMenus
{
public function display($tpl = null)
{
$this->items = $this->get('Items');
$this->pagination = $this->get('Pagination');
$this->state = $this->get('State');
$this->filterForm = $this->get('FilterForm');
$this->activeFilters = $this->get('ActiveFilters');
$this->canDo = JHelperContent::getActions('com_menus');
$this->db = JFactory::getDbo();
$this->addTemplatePath(__DIR__ . '/tmpl/');
parent::display($tpl);
}
}
class MenusModelMenusextra extends MenusModelMenus {}
...
Maintenant, je reçois le message d'erreur "JForm :: getInstance n'a pas pu charger le fichier" . Je pense que cela est dû au fait qu’il est impossible de charger le filter_menusextra.xml, l’original (noyau) filter_menus.xml qui se trouve \administrateur\composants\com_menus\modèles\formulaires. Est-ce parce qu'il utilise les outils de recherche de JLayout et doit charger le fichier xml?
Faites le test suivant: renommé filter_menus.xml en filter_menusextra.xml in \administrateur\composants\com_menus\modèles\formulaires = et cela a fonctionné. Mais comme je l’annule, je devrais pouvoir le faire dans mon plugin, pas dans celui-ci?! Qu'est-ce que je fais mal?
Quelqu'un pourrait-il m'aider s'il vous plait? Merci.
Tu ne peux pas. Vous pouvez uniquement essayer de traiter la sortie système (via le tampon de sortie de l'application ou Java)) ou de modifier les fichiers système.
Le composant de menu devrait prendre en charge les événements de plug-in personnalisés, mais ce n'est pas le cas. La modification des fichiers système est une très mauvaise idée et je vous conseille de l’éviter. Vous pouvez essayer de créer un plug-in système qui modifiera le tampon de sortie de l'application, mais il serait vulnérable en cas de modification du code. Plus efficace serait de le faire avec JavaScript/jQuery. De cette façon, de petites modifications de code n'affecteront pas les fonctionnalités de votre plugin. Bien sûr, il a ses inconvénients. Vous ne pouvez pas rendre cette colonne triable et vous ne pouvez pas rechercher son contenu.
Pour charger un formulaire de filtre différent, remplacez $filterFormName
propriété dans le modèle:
class MenusModelMenusextra extends MenusModelMenus
{
public function __construct($config = array())
{
$this->filterFormName = 'filter_menus';
parent::__construct($config);
}
}