Jump to content

Afficher le resultat d'une requete SQL dans le dashboard [SOLVED]


Recommended Posts

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 by YannAu (see edit history)
Link to comment
Share on other sites

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 by Alexandre Carette (see edit history)
Link to comment
Share on other sites

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 by YannAu (see edit history)
Link to comment
Share on other sites

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 

Link to comment
Share on other sites

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 by YannAu (see edit history)
Link to comment
Share on other sites

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 by Alexandre Carette (see edit history)
Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • YannAu changed the title to Afficher le resultat d'une requete SQL dans le dashboard [SOLVED]

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
×
×
  • Create New...