web-dev-qa-db-fra.com

Joomla! Composant dorsal 2.5 adapté à Joomla! 3.3: La barre d'outils a cessé de fonctionner

Lors de l’adaptation d’un composant d’arrière-plan Joomla! 2.5 à Joomla! 3.3, j’ai rencontré le problème suivant: la barre d’outils de la page d’édition des données ne fonctionnait pas du tout. Seuls deux boutons ont été déclarés: Enregistrer et Annuler; ne rien faire. À première vue, le problème ne se trouve ni dans le fichier view.html.php , ni tmpl/edit.php . Ce composant est déjà utilisé sur notre site Web actuel Joomla! 2.5 et fonctionne parfaitement.

Toutes les pages de contrôle, de modèle et de vue ont déjà été mises à jour vers JControllerLegacy , JModelLegacy et JViewLegacy respectivement, le cas échéant. Le rapport d'erreur des paramètres du serveur a déjà été défini sur Maximum, mais aucune erreur ni aucun avertissement ne s'affiche.

view.html.php

defined('_JEXEC') or die('Restricted access');
jimport('joomla.application.component.viewlegacy');

class MrCarrosselNoticiasViewMrCarrosselNoticias extends JViewLegacy {
    function display($tpl = null){
        $form = $this->get('Form');
        $item = $this->get('Item');
        if (count($errors = $this->get('Errors'))){
            JError::raiseError(500, implode('<br />', $errors));
            return false;
        }
        $this->form = $form;
        $this->item = $item;
        $this->addToolBar();
        parent::display($tpl);
    }

    protected function addToolBar(){
        $input = JFactory::getApplication()->input;
        $input->set('hidemainmenu', true);
        $isNew = ($this->item->cod_destaque == 0);
        JToolBarHelper::title($isNew ? "Novo Destaque" : "Editando Destaque");
        JToolBarHelper::save('mrcarrosselnoticias.save');
        JToolBarHelper::cancel('mrcarrosselnoticias.cancel', 'JTOOLBAR_CANCEL');
    }
}

tmpl/edit.php

<?php
defined('_JEXEC') or die('Restricted Access');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.modal');
?>

<form action="<?php echo JRoute::_('index.php?option=com_mrcarrosselnoticias&layout=edit&cod_destaque='.(int) $this->item->cod_destaque); ?>" method="post" name="adminForm" id="mrcarrosselnoticias-form">
    <div class="form-horizontal">
        <?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'details')); ?>
        <?php echo JHtml::_('bootstrap.addTab', 'myTab', 'details', 'Detalhes do Destaque'); ?>
        <div class="row-fluid">
            <div class="span9">
                <?php echo $this->form->getControlGroup('imagem'); ?>
                <?php echo $this->form->getControlGroup('titulo'); ?>
                <?php echo $this->form->getControlGroup('desc'); ?>
                <?php echo $this->form->getControlGroup('link'); ?>
            </div>
        </div>
        <?php echo JHtml::_('bootstrap.endTab'); ?>
        <?php echo JHtml::_('bootstrap.endTabSet'); ?>
    </div>

<div>
    <input type="hidden" name="task" value="mrcarrosselnoticias.edit" />
    <?php echo JHtml::_('form.token'); ?>
</div>
</form>
2
TheGardnerEffect

J'ai rencontré ce scénario lors du dépannage de la fonctionnalité des composants principaux. 9 fois sur 10, c'est parce que je n'ai pas inclus la logique JavaScript pour gérer les tâches de la barre d'outils. Essayez d'ajouter le script ci-dessous au-dessus du formulaire. Une fois ajoutés, les boutons d’appel aux boutons d’action de la barre d’outils devraient commencer à fonctionner.

<script type="text/javascript">
    Joomla.submitbutton = function(task)
    {
        if (task == 'mrcarrosselnoticias.cancel' || document.formvalidator.isValid(document.id('mrcarrosselnoticias-form'))) {
            Joomla.submitform(task, document.getElementById('mrcarrosselnoticias-form'));
        }
    }
</script>

J'espère que cela t'aides!

1
Brian Bolli