YannAu Posted December 21, 2022 Posted December 21, 2022 (edited) Bonjour, j'utilise prestashop 1.7.7.4 et j'aimerais créer un module qui me permet d'afficher le resultat d'une simple requete SQL dans le dashboard cependant je suis novice dans le domaine j'ai créer le module a l'aide du générateur prestashop, verifier la requete dans mysql tout est Ok maintenant j'ai beau regarder 150 'tuto' rien n'est probant ou dois-je mettre ma requete dans le fichier module.tpl, dans le module.php ou dans le dossier SQL la requete sql c'est un bête select de trois colone sur deux tables cordialement Yann Edited December 23, 2022 by YannAu (see edit history) Share this post Link to post Share on other sites More sharing options...
Alexandre Carette Posted December 21, 2022 Posted December 21, 2022 (edited) bonjour, quand vous parlez du dashboard vous voulez dire un encart dans le tableau de bord ? <?php if (!defined('_PS_VERSION_')) { exit; } class cafe_dashboardcustom extends Module { public function __construct() { $this->name = 'cafe_dashboardcustom'; $this->tab = 'administration'; $this->version = '1.0.0'; $this->author = 'presta.cafe'; $this->need_instance = 0; $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('cafe_dashboardcustom'); $this->description = $this->l('Module Sample'); $this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_); } public function install() { if (!parent::install() || !$this->registerHook([ 'dashboardZoneTwo', ]) ) { return false; } return true; } public function uninstall() { if ( !parent::uninstall() ) { return false; } return true; } public function hookDashboardZoneTwo($params) { if (Module::isInstalled('cafe_dashboardcustom')) { $this->_html = ' <div class="panel widget"> <header class="panel-heading">'.$this->displayName.'</header> <div class="row row-margin-bottom"> <div class="col-lg-12"> '.$this->sqlRequest().' </div> </div> </div>'; } else { $this->_html = '<p>'.$this->trans('The %s module must be installed.', array($this->newsletter_module_human_readable_name), 'Modules.Statsnewsletter.Admin').'</p>'; } return $this->_html; } private function sqlRequest() { $query = 'result query'; return $query; } } Edited December 21, 2022 by Alexandre Carette (see edit history) Share this post Link to post Share on other sites More sharing options...
YannAu Posted December 22, 2022 Posted December 22, 2022 (edited) Bonjour Alexandre merci pour votre réponse en effet c'est bien un petit encart que je voudrais mettre dans le tableau de bord je vais essayer la solution que vous m'avez proposer Edited December 22, 2022 by YannAu (see edit history) Share this post Link to post Share on other sites More sharing options...
YannAu Posted December 22, 2022 Posted December 22, 2022 (edited) Cela semble fonctionner cependant je n'arrives pas a afficher le resultat de la requete soit c'est la requette SQL qui apparais soit ça me met un message d'erreur : [8] Array to string conversion meme avec les fonction implode et serialize je n'arrives pas a mettre tout ça en forme [EDIT] J'ai réussi a l'afficher correctement plus qu'a nettoyer le code car affichier la requete et les informations dans la page directement c'est pas propre (et c'est moins sécure il me semble)mais la ça coince je vois pas comment faire et en regardant le code des autres module je ne comprends pas comment ils font voila ce que j'ai fais (oui c'est pas beau ) mais je suis novice et j'aimerais des conseil pour amélioré mon code < ?php $con= mysqli_connect('mes identifiant sql'); $sql = 'Ma requette SQL'; if ($result=mysqli_query($con,$sql)) { // Fetch one and one row $string=''; $stringfinal='<table><tr><td style="padding:20px;">id_produit </td><td style="padding:20px;">reference</td><td style="padding:20px;">quantité</td><td style="padding:20px;">Email du client</td></tr>'; while ($row=mysqli_fetch_row($result)) { //printf ("%s (%s)\n",$row[0],$row[1]); $string='<tr><td style="padding:20px;">'.$row[0].'</td><td style="padding:20px;"> '.$row[1].' </td><td style="padding:20px;">'.$row[2].'</td><td style="padding:20px;">'.$row[3].'</td></tr>'; $stringfinal=$stringfinal.$string; } $query = $stringfinal.'</table>'; return $query; Edited December 22, 2022 by YannAu (see edit history) Share this post Link to post Share on other sites More sharing options...
Alexandre Carette Posted December 22, 2022 Posted December 22, 2022 peut être ce sera plus simple en nous expliquant ce que doit retourner ta requête, cdt Share this post Link to post Share on other sites More sharing options...
YannAu Posted December 22, 2022 Posted December 22, 2022 Voici la requete SQL : Select ma.id_product,pr.reference,name,count(*) FROM ps_mailalert_customer_oos ma NATURAL JOIN ps_product_lang pl NATURAL JOIN ps_product pr GROUP BY ma.id_product; je viens de la modifier ainsi que le tableau d'affichage Share this post Link to post Share on other sites More sharing options...
Alexandre Carette Posted December 22, 2022 Posted December 22, 2022 tu veux afficher quoi exactement dans le tableaux de bord ? car la ta requete j'ai un peu de mal... Share this post Link to post Share on other sites More sharing options...
YannAu Posted December 22, 2022 Posted December 22, 2022 (edited) Dans le tableau je voudrais afficher l'id du produit, sa référence, son nom, et le nombre de fois qu'il apparait d'où le count c'est pour voir le nombre de fois que des clients clique sur le bouton "me prévenir quand le produit est de nouveau disponible " Edited December 22, 2022 by YannAu (see edit history) Share this post Link to post Share on other sites More sharing options...
Alexandre Carette Posted December 22, 2022 Posted December 22, 2022 as tu une capture d'ecran de ps_mailalert_customer_oos stp que je regarde Share this post Link to post Share on other sites More sharing options...
YannAu Posted December 22, 2022 Posted December 22, 2022 Bien-sûr voilà une capture d'écran Share this post Link to post Share on other sites More sharing options...
Alexandre Carette Posted December 22, 2022 Posted December 22, 2022 (edited) donc tu veux afficher: 1771 // ref_1771 // nom_1771 // 2 2073 // ref_2073 // nom_2073 // 1 c bien ca ? si c ca il faut que tu décomposes ta requete, 1er requete ca te sort un tableau avec tout les id_product de ps_mailalert_customer_oos sans les doublons ensuite tu boucles le résultat et pour chaque id trouvé une autre requete qui va compter les id_product similaires Edited December 22, 2022 by Alexandre Carette (see edit history) Share this post Link to post Share on other sites More sharing options...
YannAu Posted December 22, 2022 Posted December 22, 2022 Oui En gros oui je récupère le nom dans la table ps_product_lang et la reference dans la table ps_product j'arrives bien a avoir les data dans la requête et j'arrives a les afficher cependant mon code n'est pas propre puisque je fais une connexion avec mysqli en clair et la requête l'est aussi pas trouvé le moyen de faire cela sans que ce soit en clair dans le code Share this post Link to post Share on other sites More sharing options...
Mediacom87 Posted December 22, 2022 Posted December 22, 2022 Bonjour, dans un premier temps il serait bon d’utiliser les bases inclusent dans PrestaShop pour récupérer les données dans la base sans risquer de créer de faille potentielle. https://www.mediacom87.fr/les-bonnes-pratiques-de-la-classe-db-sur-prestashop/ Share this post Link to post Share on other sites More sharing options...
YannAu Posted December 23, 2022 Posted December 23, 2022 Merci pour la ressources c'est ce que je cherchais je vais tenter tout ça et je retournerais vers vous en espérant de bonnes nouvelles Share this post Link to post 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