web-dev-qa-db-fra.com

Appelez la fonction de publication de "l'extérieur" du contrôleur

J'ai modifié la fonction de publication de mon sous-contrôleur comme suit

    /**
     * publish function.
     * 
     * @access public
     * @return void
     */
    public function publish()
    {
        $app                                    =   JFactory::getApplication();
        $jinput                                 =   JFactory::getApplication()->input;
        $ids                                    =   $jinput->get('cid', '', 'array');
        $task                                   =   $this->getTask();

        foreach($ids as $id)
        {
            // do fancy stuff
        }

    }

Maintenant, j'aimerais vraiment changer le statut de certains éléments (-> $ ids) via un script CLI.

Est-il possible d'appeler ce contrôleur, d'obtenir la méthode "publier" et de soumettre un ensemble d'identifiants et, à cette tâche, une tâche (publier, annuler la publication, supprimer, ...)?

3
MyFault

Récemment, j'ai créé un composant lorsque je change le statut de publication via une requête Ajax.

J'ai créé une méthode setPublish($id, $status) sur un modèle et deux méthodes sur mon contrôleur:

public function setPublishTrue(){
   $data = JRequest::get('post'); //get the item id via post
   $model = $this->getModel('Promocaos');
   $model->setPublish($data['id'], 1);

} 

La demande ajax:

        var formdata = $("#form-" + this.id).serialize();

        if(state){
            jQuery.ajax({
            type: "POST",
            dataType: "json",
            timeout: 6000,
            url: "index.php?option=com_mycomponent&task=setPublishTrue&controller=mycontroller",
            data: formdata,
            processData: false
        });

Ensuite, je peux changer le statut via les requêtes Ajax

1
Guilherme

Oui, c'est possible, mais vous devez créer votre propre script CLI pour traduire la ligne de commande en commande de l'API Joomla. Par exemple:

  • Pour recevoir une liste d'ID (séparés par des virgules) d'un argument
  • Initialiser JInput,
  • et l'envoyer à votre contrôleur.

Vous pouvez vérifier n'importe quel cli/script pour créer votre propre script.

1
Anibal