Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

Appel d'un module avec ajax
#1

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
Répondre
#2

A tout hasard, essaie de mettre un / devant "modules" dans ton url.

Quelle est l'erreur en fait ? Pas d'output ? Une erreur 404 ?

www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
Répondre
#3

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
Répondre
#4

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 ?

www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
Répondre
#5

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.
Répondre
#6

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 ?

www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
Répondre
#7

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)
Répondre
#8

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.

www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
Répondre
#9

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
Répondre
#10

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
Répondre
#11

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
Répondre
#12

erf j'avais mal lu désolé ...


http://apidoc.cmsmadesimple.org/CMS/CMSM...ontendLink

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)
Répondre
#13

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.

www.web-ep.be - Développeur Web Freelance - Développeur/Intégrateur CMS Made Simple (création de sites, développement de modules/plugins/templates sur mesure), spécialisé dans les sites pour l'immobilier.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 3 visiteur(s)