Jump to content

lancer automatiquement un module sans authentification


Recommended Posts

Bonjour,

 

J'ai écrit un module de copie d'image qui fonctionne.

Je vais dans le module, j'ai un champs qui donne le nombre d'images à copier et je clique enregistrer et il me fait ce que je voulais.

 

Maintenant je cherche à lancer ce module sans authentification pour que je puisse le mettre dans un cron. Bref le lancer avec un url depuis un navigateur.

 

http://www.monsite.com/modules/monmodule.php

 

mais après il doit avoir quelque chose pour lancer la fonction getContent()

 

Il y a juste un truc qui m'échape. Dans l'url il faut ajouter peut être une clé. Bref ou trouver de l'aide à ce sujet.

Edited by krismb (see edit history)
Link to comment
Share on other sites

Bonjour,

 

Voila 4 suggestions : 

 

créer un initCron.php que tu appels en entete des cron pour charger le context prestashop.

 

Avec le codage MVC, il doit y avoir le moyen de créer un controller cron et de créer des actions selon les taches que tu veux faire. 

 

Passer par le webservice et mettre en place un hook ou une api supplémentaire pour ton module.

 

Sinon au pire, tu peux lancer ton cron avec wget http://tonsite/modules/tonmodule.php

 

++

Link to comment
Share on other sites

 

Sinon au pire, tu peux lancer ton cron avec wget http://tonsite/modules/tonmodule.php

 

++

 

Voila justement je n'arrive pas à lancer mon module par un simple lien http. Si je parviendrais à cela, je pourrais après automatiser la chose, mais je sais uniquement le lancer par le bouton save du module. Si je copie le lien de ce bouton et que je le lance, il me demande une authentification.

Link to comment
Share on other sites

En déportant le traitement de ton module dans une classe PHP tu pourrais l'appeler simplement depuis l’extérieur non?

 

Peux tu m'en dire plus

 

J'ai mis tout mon traitement dans la fonction

    public function getContent()

    {

...

}

Link to comment
Share on other sites

Si je me trompe pas getContent est utilisé dans  l'onglet module pour afficher les paramètres de configuration du module.

 

Et donc par conséquent il vérifie avant que tu es bien logué dans l'admin.

 

Dans ton cas, ou tu trouve un hook (parmit les hook du front) qui te permet d'appeler directement. ou tu créer une méthode "cron" par exemple pour ton traitement, que tu appel à partir d'un autre fichier qui va instancier la classe de ton module et appeler cette méthode.

 

Bon ok ça reviens à ce que je te disais de créer un fichier et d'instancier le contexte.

 

Sinon à partir d'une surcharge du frontcontroller tu dois pouvoir aussi arrivé au même résultat de manière plus propre.

 

++

Link to comment
Share on other sites

Peux tu m'en dire plus

 

J'ai mis tout mon traitement dans la fonction

    public function getContent()

    {

...

}

 

perso je sortirais le code de traitement de cette fonction getContent, je le mettrais dans un fichier php à part (http://tonsite/modules/copy_images.php) et depuis le module il serais appelé en ajax et sinon il s’exécuterait automatiquement en allant sur http://tonsite/modules/copy_images.php

  • Like 1
Link to comment
Share on other sites

Dans mon source quand j'ajoute la première ligne

include(dirname(__FILE__).'/../../config/config.inc.php');

 

mon echo 'test'; sur la ligne suivante n'est pas affiché ...

il ne continue pas plus loin il me redirige sur la page d'accueil. J'a pris exemple sur le module followup

 

il y a un fichier cron.php

 

include(dirname(__FILE__).'/../../config/config.inc.php');
include(dirname(__FILE__).'/followup.php');

if (isset($_GET['secure_key']))
{
    $secureKey = Configuration::get('PS_FOLLOWUP_SECURE_KEY');
    if (!empty($secureKey) AND $secureKey === $_GET['secure_key'])
    {
        $followup = new Followup();
        if ($followup->active)
            $followup->cronTask();
    }
}

 

Link to comment
Share on other sites

Voila ce que j'utilise : 

<?php
/********************
 * Configuration
********************/
ini_set('memory_limit','1.1G');

set_include_path(get_include_path().':/my/path/tocrondir/:/my/path/www/:');

//Constantes
define ( 'PATH', '/my/path/www' );
define('_PS_BASE_URL_','http://mydomain.fr');

$cookie = new stdClass();
$cookie->id_lang=2;
$cookie->id_customer=null;

/********************
 * Includes
********************/

include_once (PATH . '/config/config.inc.php');
include_once (PATH . '/config/settings.inc.php');
include_once (PATH . '/classes/db/Db.php');
include_once (PATH . '/images.inc.php');

bonne chance

Link to comment
Share on other sites

Alors ce n'est pas .htaccess car j'ai renommer ce fichier en a.htaccess et il me redirige sur la même adresse mais il plante car il pointe sur le nom de ma boutique 1

www.monsite.com/boutique1/?secure_key=xxx

 

Dés que je mets le ligne

include(dirname(__FILE__).'/../../config/config.inc.php');

il ne va pas plus loin. Ce fichier fait beaucoup plus que je ne l'imaginais !

Link to comment
Share on other sites

Bonjour krismb,

 

Je viens d'avoir un problème similaire pour un appel ajax avec redirection sur la page d'authentification de l'admin.

 

Cela est lié au système de sécurité de prestashop. En fait il faut que tu passe un token valid à  l'url pour éviter cela.

 

++

Link to comment
Share on other sites

Je pense qu'on avance ... peut être ...

 

livindeadfr peux tu m'en dire un peu plus

 

J'ajoute à mon url ?secure_key=xxx et xxx est le token mais peut être je dois vérifier qu'il est bon ? J'ai pris exemple sur

 

le module relancer les client

 

modules/followup/cron.php?secure_key=xxx

 

xxx étant mon une clé et j'ai pris la même chose.

 

Je me suis mis à débuger et

 

dans le config.inc.php

 

les lignes qui me redirigent sont

try
{
    $context->shop = Shop::initialize();
}
catch (PrestaShopException $e)
{
    $e->displayMessage();
}
 

jusqu'à ces lignes tout se passent bien.  Apparement shop::initialize manque quelque chose. Je précise que je suis en multishop si cela met sur la piste. ...

Edited by krismb (see edit history)
Link to comment
Share on other sites

En fait j'ai trouvé, J'avais deux boutique avec des liens virtuels

http://www.site.com/boutique1

http://www.site.com/boutique2

 

Mais quand je lançais mon script, initialisation Shop::initialize(); cherchais l'url et pensais que c'était pas bon

 

mon script avait l'url suivante

http://www.site.com/modules/...

 

Ce que j'ai fait j'ai supprimer l'url virtuelle pour la boutique 1

Et tout roule !!!

 

Merci pour votre soutiens, je souhaite que mes recherches puissent être utile à d'autres.

 

Je clôture le sujet.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...