Ajouter un bouton personnalisé à un composant principal du backend

11

Est-il possible d'ajouter un bouton personnalisé (avec une action personnalisée, bien sûr) à la JToolbar d'un composant Joomla 3 standard (com_contents) sans modifier le code source d'origine?

Contexte : je dois ajouter un bouton à l' com_contentsécran principal (la liste de tous les articles) pour créer une fonction de messagerie massive. Je peux, bien sûr, modifier les fichiers Joomla standard, mais si je le modifie, lorsque je mets à niveau Joomla vers une nouvelle version, je perdrai ma personnalisation. Mais, si je peux ajouter le bouton, je ne perdrai aucune modification lors de la mise à jour ...

Et s'il est possible de le faire, comment le faire? Créer un plugin? Existe-t-il un tutoriel pour me guider à travers la création de cet addon?

mHouses
la source

Réponses:

10

Voici un projet d'idée utilisant un plugin:

Vous devez créer un plugin système (je n'entre pas dans le détail) et utiliser l'événement onBeforeRender. À l'intérieur, vous obtenez une instance de votre barre d'outils et ajoutez le bouton.

class PlgSystemCustomtoolbar extends JPlugin
{
    public function onBeforeRender()
    {
        // Get the application object
        $app = JFactory::getApplication();

        // Run in backend
        if ($app->isAdmin() === true)
        {
            // Get the input object
            $input = $app->input;

            // Append button just on Articles
            if ($input->getCmd('option') === 'com_content' && $input->getCmd('view', 'articles') === 'articles')
            {
                // Get an instance of the Toolbar
                $toolbar = JToolbar::getInstance('toolbar');

                // Add your custom button here
                $url = JRoute::_('index.php?option=com_example&task=massemail&format=raw');
                $toolbar->appendButton('Link', 'export', 'Mass Email', $url);
            }
        }
    }
}
Valentin Despa
la source
Génial! Il fonctionne comme un charme! Juste une petite question: comment puis-je transmettre les éléments sélectionnés à mon contrôleur? AFAIK, si j'utilise les fonctions Joomla JS standard, ils appelleront le contrôleur com_content, n'est-ce pas?
mHouses
1
Veuillez poser cette question comme une nouvelle question.
Valentin Despa
4

En travaillant de manière externe, vous pouvez créer un module Administrateur , un plug-in editors-xtd ou un plug-in système . Dans les deux cas, lorsque votre code est exécuté, vous pouvez ajouter du code Javascript pour injecter le bouton à l'emplacement requis.

  • Module Administrateur , il va s'afficher dans une position, par exemple menu . Il peut ajouter n'importe quoi à toutes les pages.
  • plug-in editors-xtd , il ne sera affiché que sous la forme d'un bouton sous l'éditeur de texte. Il peut ouvrir une vue complète de votre composant.
  • plugin système , il peut tout faire, mais il n'a pas d'interface utilisateur en soi, comme les cas précédents.
Anibal
la source