Agregue un botón personalizado a un componente central del backend

11

¿Es posible agregar un botón personalizado (con una acción personalizada, por supuesto) al JToolbar de un componente estándar de Joomla 3 (com_contents) sin modificar el código fuente original?

Antecedentes : necesito agregar un botón a la com_contentspantalla principal (la lista de todos los artículos) para crear una función de correo masivo. Por supuesto, puedo modificar los archivos estándar de Joomla, pero si lo modifico, cuando actualice Joomla a una nueva versión, perderé mi personalización. Pero, si de alguna manera puedo agregar el botón, no perderé ningún cambio al actualizar ...

Y si es posible hacer esto, ¿cómo se puede hacer? ¿Crear un complemento? ¿Hay algún tutorial que me guíe a través de la creación de este complemento?

mHouses
fuente

Respuestas:

10

Aquí hay una idea preliminar con un complemento:

Necesita crear un complemento del sistema (no me estoy metiendo en eso) y usar el evento onBeforeRender. Dentro obtienes una instancia de tu barra de herramientas y anexas el botón.

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
fuente
¡Excelente! ¡Funciona a las mil maravillas! Solo una pequeña pregunta: ¿Cómo puedo pasar los elementos seleccionados a mi controlador? AFAIK, si uso las funciones estándar de Joomla JS, llamarán al controlador com_content, ¿no?
mHouses
1
Por favor haga esto como una nueva pregunta.
Valentin Despa
4

Al trabajar de forma externa, puede crear un módulo Administrador , un complemento editors-xtd o un complemento del sistema . En ambos casos, cuando se ejecuta su código, puede agregar algún código Javascript para inyectar el botón en la ubicación requerida.

  • Módulo administrador , se mostrará en una posición, por ejemplo, menú . Puede agregar cualquier cosa a todas las páginas.
  • editors-xtd plug-in , se mostrará solo como un botón debajo del editor de texto. Puede abrir una vista completa desde su componente.
  • plugin del sistema , puede hacer cualquier cosa, pero no tiene una interfaz de usuario por sí misma, como en los casos anteriores.
Anibal
fuente