Appel d'un module avec ajax -
isoclem - 18/12/2012
Bonjour à tous,
Cela fait plusieurs fois que je me retrouve face au même problème.
Je développe un module de catalogue produit par exemple.
Afin de faciliter la navigation je souhaite afficher les sous catégories en utilisant jquery/ajax.
J'utilise ce genre de fonction :
Code :
[== JavaScript ==]
function getGammes(categid){
return $.ajax({
type: "POST",
url: "modules/catalogue/action.categajax.php",
data:categid,
dataType: 'json',
success: function(data)
{
$('#gammes').html(data);
}
});
}
le fichier action.categajax ressemble a ça :
Code :
[== PHP ==]
<?php
require '../../include.php';
$gCms = cmsms();
if (!isset($gCms)) exit;
$cata =& $gCms->GetModuleInstance('catalogue');
/.../
$item->link = $cata->CreateFrontendLink($id, $returnid,'default', '', array('categid'=>$categid,'gamid'=>$row['id']),'',true);
Et la c'est le drame, impossible de générer un lien comme il faut je me retrouve avec un lien qui pointe vers
monsite/modules/catalogue/admin/moduleinterface.php?mact=catalogue,m5,default,1&_sx_=02260533&m5categid=3&m5gamid=2
au lieu de :
monsite/index.php?mact=catalogue,m5,default,1&_sx_=02260533&m5categid=3&m5gamid=2
Si vous avez une ampoule ... merci de m'éclairer
Appel d'un module avec ajax -
heriquet - 19/12/2012
A tout hasard, essaie de mettre un / devant "modules" dans ton url.
Quelle est l'erreur en fait ? Pas d'output ? Une erreur 404 ?
Appel d'un module avec ajax -
isoclem - 19/12/2012
L'url du fichier est ok pour le traitement
L'unique erreur est le lien généré par createlink qui part du module au lieu de partir de la racine
Appel d'un module avec ajax -
heriquet - 19/12/2012
Ok. C'est un module écrit par toi ? Fait dans les règles de création de module ? Ou c'est un simple fichier php de ton cru que tu as placé à cet endroit de l'arborescence ?
Appel d'un module avec ajax -
isoclem - 19/12/2012
non c'est un module fait par moi en utilisant ctlmodulemaker
C'est la troisième fois que je me retrouve confronté a ce pépin.
Dans l'idée il faudrait peut être créer une page de contenu avec un template vide et juste l'appel du module avec l'action qui va bien. Mais je trouve ça super lourd comme solution.
Appel d'un module avec ajax -
heriquet - 19/12/2012
Ok... je ne connais pas ce module...
Quel est sensé etre l'output du module ? Du JSON ?
Il me semble qu'il y a un paramètre qu'on peut ajouter dans la requete pour ne pas qu'il y ait de redirection après l'appel du module mais j'ai oublié lequel... Comment avais-tu résolu le problème les 2 premières fois ?
Appel d'un module avec ajax -
isoclem - 19/12/2012
CTLmodulemaker donne juste la base a la création d'un module, après il ne sert plus a rien.
En retour il envoie ca : {$smarty.capture.data|@json_encode}
ou data est du html pour lister les liens
Pour les autres projets j'avais mis les liens en dur et ajouté les variables en GET a l'url (pas très classe)
Appel d'un module avec ajax -
heriquet - 19/12/2012
Ok ok. Bon je pense qu'il faut ajouter un paramètre à la requete...
Ca doit etre showtemplate=false.
Si ce n'est pas ca, il y a sans doutes quelque chose à faire dans ton action.php mais je ne peux pas te dire quoi.
Appel d'un module avec ajax -
isoclem - 08/01/2013
J'ai trouvé une solution qui n'est pas vraiment acceptable en terme de qualité de code mais qui fonctionne :
Placer le fichier action.categajax.php a la racine du site.
bizarrement l'appel du ProcessTemplate retrouve le bon template dans le repertoire du module et cela fonctionne
Appel d'un module avec ajax -
bess - 08/01/2013
préfère si possible l'option de heriquet qui est la bonne pratique : ajouter aux urls que tu requêtes : showtemplate=false
exemple
http://www.cmsmadesimple.fr/?showtemplate=false
Appel d'un module avec ajax -
isoclem - 08/01/2013
Bonjour,
Comme c'est censé me renvoyer du json, je n'appel pas de page a proprement parlé.
Pour showtemplate=false il faut appeler une page et cela ne me sert a rien d'en créer une
Appel d'un module avec ajax -
bess - 08/01/2013
erf j'avais mal lu désolé ...
http://apidoc.cmsmadesimple.org/CMS/CMSModule.html#CreateFrontendLink
je tenterais de remplacer :
Citation : $cata->CreateFrontendLink($id, $returnid,'default', '', array('categid'=>$categid,'gamid'=>$row['id']),'',true);
par
Citation : $cata->CreateFrontendLink($id, $returnid,'default', '', array('categid'=>$categid,'gamid'=>$row['id']),'',true, true);
pour répondre au paramètre
boolean $inline: A flag to determine if actions should be handled inline (no moduleinterface.php -- only works for frontend)
Appel d'un module avec ajax -
heriquet - 14/01/2013
isoclem a écrit :Bonjour,
Comme c'est censé me renvoyer du json, je n'appel pas de page a proprement parlé.
Pour showtemplate=false il faut appeler une page et cela ne me sert a rien d'en créer une
euuuh... non !
Tu peux créer une url qui appelle une action d'un module (qui écrit du json).
Il te reste à appeler cette url depuis une requete Ajax et à récupérer ton résultat.
Par défaut le module écrit dans sa page container mais pas si tu précises qu'il ne faut pas de template pour l'affichage.