web-dev-qa-db-fra.com

Erreur du bouton personnalisé JToolBar

Je travaille sur mon propre composant et j'essaie d'ajouter un bouton personnalisé à ma vue administrateur qui appelle une tâche.

In view.html.php 

protected function addToolBar() {
JToolBarHelper::custom('addApplicationToDB', 'generic.png', 'generic.png', 'Add Test Application'); 
JToolBarHelper::custom('jobApplications.addApplicationToDB', 'generic.png', 'generic.png', 'Add Test Application'); 
}

Au bas de mon default.php j'ai ajouté

<input type="hidden" name="task" value="" /> 
<input type="hidden" name="boxchecked" value="0" />     
<input type="hidden" name="controller" value="jobApplications" /> 
<?php echo JHtml::_('form.token'); ?>

Bien que je ne comprenne pas vraiment ce que ça fait.

Mon contrôleur est dans admin/controllers/jobApplications.php

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');

jimport('joomla.application.component.controller');

class jobapplicationsControllerjobapplications extends JControllerAdmin {
public function addApplicationToDB() {
    echo "Add Application pressed!!!";
    $mainframe = JFactory::getApplication();
            echo "Add Application pressed!!!";
    $db = JFactory::getDBo();
...

Les erreurs que je continue à obtenir sont les suivantes: "Uncaught TypeError: impossible de lire la propriété 'boxchecked' of undefined"

Je suis stupéfait ... Je n'ai aucune idée de ce qui ne va pas ou de la solution.

Vous pouvez trouver le code complet: https://github.com/gicadin/com_jobApplications

3
Gicadin

D'accord, un bouton personnalisé n'a besoin que de cette chaîne dans le formulaire.

<input type="hidden" name="task" value="" /> 

Le bouton est envoyé au contrôleur et vous devez y configurer la méthode que ce bouton cible.

Donc, votre code de code pour la méthode addToolbBar devrait ressembler à ceci

JToolBarHelper::custom('controllername.taskname', 'generic.png', 'generic.png', 'Add Test Application'); 

Disons donc que votre nom de contrôleur est "jobApplications" et que votre tâche dans le contrôleur est "addApplicationToDB", elle devrait alors ressembler à ceci

JToolBarHelper::custom('jobApplications.addApplicationToDB', 'generic.png', 'generic.png', 'Add Test Application');

Dans le fichier du contrôleur qui se trouve dans le dossier des contrôleurs, vous devez ajouter la méthode suivante.

    public function addApplicationToDB()
    {
        // Check for request forgeries
        JSession::checkToken() or die(JText::_('JINVALID_TOKEN'));

        // make sure it is a user
        $user = JFactory::getUser();
        if ($user->id)
        {
            // do your thing
        }
        return;
    }

Ici, j'ai un composant de démonstration sur github qui a un implémentation de bouton personnalisé regardez également le contrôleur et les autres scripts associés.

Vérifiez ce qui suit rl pour plus d’informations, espérons que cela vous aidera

1
Llewellyn

Je crois qu'ici vous devez enregistrer la tâche. Dans votre classe de contrôleur de composants, celle située dans la racine du dossier principal ou principal, ajoutez la ligne suivante dans votre méthode d'affichage:

$this->registerTask('jobApplications', 'jobapplications.addApplicationToDB');

Cela devrait enregistrer la méthode avec Joomla core. Je voudrais également supprimer le champ de saisie masqué avec l'attribut name "controller" et la valeur "jobApplications".

J'espère que cela t'aides!

1
Brian Bolli

Avec les boutons de la barre d’outils personnalisés dans Joomla 3, essayez d’ajouter: ou dans votre formulaire adminForm (vue d’édition) pour éviter les erreurs javascript. Comme toujours, appuyez sur Ctrl + u pour afficher le balisage et activer votre console Firebug pour détecter les erreurs.

0
chris