massi4 Posted May 11, 2015 Share Posted May 11, 2015 bonjour je veux afficher une liste d'elements en fonction d'une autre list, j'ai utiliser ajax mais au lieu d'afficher les elements j'ai cette erreur Fatal error: Class 'ModuleFrontController' not found in D:\xampp\htdocs\prestashop\modules\vitrine\controllers\front\display.php on line 4 le message ne s'affiche que lorsque une requette http est declenché class VitrineDisplayModuleFrontController extends ModuleFrontController { public function initContent() { parent::initContent(); //$product = new ProductCore(); $products_partials = Product::getProducts(1, 0, 0, 'id_product', 'DESC' ); $products = Product::getProductsProperties(1, $products_partials); foreach ($products as $key => $product) { $cover = Product::getCover($product['id_product']); $products[$key]["id_image"] = $cover["id_image"]; } $adhesif = AdhesifModel::findAll(); //$Images = ImageModel::findAll(); $subcategory = SubCategoryModel::findAll(); $this->context->smarty->assign('subcategories',$subcategory); $this->context->smarty->assign('img','http://localhost/prestashop/img/vitrine/'); $this->context->smarty->assign('products',$products); $this->context->smarty->assign('adhesifs',$adhesif); $this->context->smarty->assign('products',$products); if(Tools::getValue('subcategory')){ $subcategoryImages = SubCategoryImagesModel::find(Tools::getValue('subcategory')); $this->context->smarty->assign('subcategoryImages',$subcategoryImages); } $this->setTemplate('vitrine.tpl'); } } merci Link to comment Share on other sites More sharing options...
J. Danse Posted May 11, 2015 Share Posted May 11, 2015 Bonjour, Votre contrôleur me semble bien formé. (Par contre, si possible, pensez à utiliser la balise code pour mentionner du code afin que ce soit plus lisible ;-)) et il n'y a donc pas à chercher dans celui-ci, je pense. C'est plutôt dans votre appel AJAX, qu'il va falloir voir. Il semble que vous appelez le fichier php directement ; ce qui l'empêche de faire ses inclusions de fichiers de base. Link to comment Share on other sites More sharing options...
massi4 Posted May 11, 2015 Author Share Posted May 11, 2015 (edited) bonjour, pour l'appel Ajax j'utilisé 2 scripts différents et toujours le même résultat le script se trouve dans un fichier tpl function getXhr(){ var xhr = null; if(window.XMLHttpRequest) // Firefox et autres xhr = new XMLHttpRequest(); else if(window.ActiveXObject){ // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); 1 } } else { // XMLHttpRequest non supporté par le navigateur alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); xhr = false; } return xhr; } /** * Méthode qui sera appelée sur le click du bouton */ function go(){ var xhr = getXhr(); sel = document.getElementById('subcategory'); subcategory = sel.options[sel.selectedIndex].value; xhr.open("GET","http://localhost/prestashop/modules/vitrine/controllers/front/display.php?subcategory="+subcategory,true); xhr.send("null"); } et voici le 2 script var sel = document.getElementById('subcategory'); var im = document.getElementById('image'); id = sel.options[sel.selectedIndex].value; $.ajax({ type: 'POST', url: 'http://localhost/prestashop/modules/vitrine/controllers/front/Display.php', dataType: 'json', data: { controller : 'VitrineDisplayModuleFrontController', action : 'ajaxProcessGetId', ajax : true, id_sub : id }, success: function(jsonData) { //alert(jsonData); $.each(jsonData, function(index, value) { $im.append('<option value="'+ index +'">'+ value +'</option>'); }); } }); j'ai ajouté une fonction pour ce 2 script public function ajaxProcessGetId() { $id = Tools::getValue('id_sub'); $subcategoryImages = SubCategoryImagesModel::find($id); echo json_encode($subcategoryImages); if($subcategoryImages) die(Tools::jsonEncode(array( 'id' => htmlspecialchars($subcategoryImages['id'])) )); } merci d'avoir pris le temps de repondre Edited May 11, 2015 by massi4 (see edit history) Link to comment Share on other sites More sharing options...
J. Danse Posted May 11, 2015 Share Posted May 11, 2015 Voilà donc le problème, vous faites un appel direct à votre fichier PHP. Si vous utilisez un TPL (je passe le fonctionnement de votre module et de votre script, ce n'est pas le sujet et c'est votre méthode, par contre), vous pouvez modifier l'URL par ceci, par exemple: {$link->getModuleLink('nomdumodule', 'nomducontrolleur')|escape:'html':'UTF-8'} Sinon, vous devez définir votre URL dans le contrôleur et, en JS, faire ainsi par exemple: $.ajax({ url : ajax_link, data : { ajax:true, fc: 'module', controller: 'ajax', module: 'nomdumodule', processUnTruc: 1 } }); Pour la manière et la méthode, elle est libre. Disons juste que l'appel direct au fichier PHP du module ne peut pas se faire, quoiqu'il arrive. Link to comment Share on other sites More sharing options...
massi4 Posted May 11, 2015 Author Share Posted May 11, 2015 j'ai ajouté cette ligne dans le controller $ajax_link = 'http://localhost/prestashop/modules/vitrine/controllers/front/Display.php'; mais ajax ne s'execute pas Link to comment Share on other sites More sharing options...
rem64 Posted May 12, 2015 Share Posted May 12, 2015 (edited) var ajax_link = 'http://localhost/prestashop/modules/vitrine/controllers/front/Display.php'; dans ton script Oups j'ai lu le post trop vite et j'ai posté une grosse anerie. Sorry... Edited May 12, 2015 by rem64 (see edit history) Link to comment Share on other sites More sharing options...
rem64 Posted May 12, 2015 Share Posted May 12, 2015 Enfin si vous faites ça pour toute les variables, vous allez vous amuser lors du passage en ligne Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now