Jump to content

Configurer un Module Tiers par appel Ajax


Recommended Posts

Bonjour,

 

 

Je développe un module. Lorsque je configure mon module dans le BO (back-office), j'aimerai que les enregistrements se fasse a travers des appel ajax et non depuis un bouton submit traditionnel. Ce-ci pour des raisons d'ergonomie.

 

Le BO utilise un cookie dont le chemin est "admin". De ce fait, mon appel ajax devrai avoir une url de la forme : "/admin/*" pour conserver le fonctionnement d'identification par cookie.

Ainsi, je ne pense pas pouvoir attaquer la configuration de mon module depuis l'url "/modules/"

 

 

D'où ma question : comment exécuter une fonction de mon module(/modules/my_module/class.php) en ajax depuis le back-office?

 

 

Merci a vous,

Share this post


Link to post
Share on other sites

Je n'ai pas réussit a "résoudre" mon problème, néanmoins, je vous fais part de mon avancée.

 

 

J'ai crée un petit script dans le dossier admin de prestaShop :

Ce fichier donne à tous les modules tiers (Administrable) la capacité de travailler en Async tout en conservant le système de sécurité de prestashop.

 

Deux inconvénient :

- création de fichiers dans le repertoir admin.

- déconnection (redirection)

 

<?php
/**
* file : /admin/ajax.module.php
*/
define('PS_ADMIN_DIR', getcwd());
include(PS_ADMIN_DIR.'/../config/config.inc.php');
/* Getting cookie or logout */
require_once(dirname(__FILE__).'/init.php');

$json_data = (object) array('status' => false, 'message' => '', 'data'=>array());
$module = empty($_GET['module']) ? null : $_GET['module'];
$controller = empty($_GET['controller']) ? 'Ajax' : $_GET['controller'];
$action = empty($_GET['action']) ? null : $_GET['action'];
$param = empty($_GET['param'])   ? null : $_GET['param'];
$file = _PS_MODULE_DIR_ . '/' . $module . '/'.$controller.'.php';
if ( !empty($module) && file_exists($file) ) {
require_once($file);
$controller = ucfirst($controller);
$ajax = new $controller();
if ( method_exists($ajax, $action) ) {
 try {
  $data = $ajax->$action($param);
  $json_data->status = true;
  $json_data->data = $data;
 } catch(Exception $e) {
  $json_data->message = $e->getMessage();
 }
} else {
 $json_data->message = "Unknow service action";
}
} else {
$json_data->message = "Unknow service";
}
echo json_encode($json_data);

 

public function getContent()
{

$html = <<<xxx
<script>
function submitForm()
{
var xhr = new XMLHttpRequest();
xhr.onreadystatechange  = function() {
 if(xhr.readyState  == 4)
 {
  if(xhr.status  == 200)
alert("Received:"  + xhr.responseText);
  else
alert("Error code " + xhr.status);
 }
};
xhr.open( "POST", "ajax.module.php?module=my_module&controller=Ajax&action=save",  true); ///prestashop/admin/ajax.module.php
xhr.send(null);
}
</script>
xxx;
 $html .= '<a href="javascript:submitForm();">send and load</a>';
 return $html;
}

 

Ce n'est pas un super code, mais il est la et il pourrai intérésé des gens.

 

 

@+

Share this post


Link to post
Share on other sites

  • 5 months later...

Salut;

 

Pas mal du tout !

 

En fait; je suis en train de chercher une solution simple d'implémentation peut être L'api REST de Prestashop vous intéresse ?

 

Moi non plus; en fait c'est assez basique juste appel ajax à une fonction dans controlleur (afin de respecter le modele OOP ) qui va renvoyer le résultat d'une requette sql simple sous forme de JSON, le tout est manipulé dans $.getJSON (url, function(data){ console.log(data); })

 

Merci pour votre éffort

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More