Adicionar um botão personalizado a um componente de back-end principal

11

É possível adicionar um botão personalizado (com uma ação personalizada, é claro) à JToolbar de um componente padrão do Joomla 3 (com_contents) sem modificar o código-fonte original?

Antecedentes : preciso adicionar um botão à com_contentstela principal (a lista de todos os artigos) para criar uma função de email em massa. É claro que posso modificar os arquivos padrão do Joomla, mas se eu modificá-lo, quando atualizar o Joomla para uma nova versão, perderei minha personalização. Mas, se de alguma forma eu puder adicionar o botão, não perderei nenhuma alteração ao atualizar ...

E se é possível fazer isso, como isso pode ser feito? Criando um plugin? Existe algum tutorial para me guiar através da criação deste addon?

mHouses
fonte

Respostas:

10

Aqui está uma ideia preliminar usando um plug-in:

Você precisa criar um plug-in do sistema (não estou entrando nisso) e usar o evento onBeforeRender. Dentro, você obtém uma instância da sua barra de ferramentas e acrescenta o botão.

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
fonte
Ótimo! Ele funciona como um encanto! Apenas uma pequena pergunta: como posso passar os itens selecionados para o meu controlador? AFAIK, se eu usar as funções JS padrão do Joomla, elas chamarão o controlador com_content, não é?
MHouses
1
Por favor, faça isso como uma nova pergunta.
Valentin Despa
4

Trabalhando de maneira externa, você pode criar um módulo Administrador , um plug-in editors-xtd ou um plug-in do sistema . Nos dois casos, quando seu código é executado, você pode adicionar algum código Javascript para injetar o botão no local necessário.

  • Administrador , ele será mostrado em uma posição, por exemplo, no menu . Pode adicionar qualquer coisa a todas as páginas.
  • plug-in editors-xtd , ele será mostrado apenas como um botão no editor de texto. Pode abrir uma visão completa do seu componente.
  • plugin do sistema , ele pode fazer qualquer coisa, mas não possui uma interface de usuário por si só, como nos casos anteriores.
Anibal
fonte