Jump to content

creation de module sous prestaShop


Recommended Posts

j'ai suivi l'etape de creation de module qui existe dans ce pdf http___www.prestashop.pdf.
j'ai cree un fichie php unmodule.php contient le code suivant:
<?php
class UnModule extends Module
{
public function __construct()
{
$this->name ='unmodule';
$this->tab ='Divers';
$this->version ='1.0';

parent::__construct();

$this->page =basename(__FILE__,'.php');
$this->displayName =$this->l('Module block');
$this->description =$this->l('Adds a block featuring nothing');
}
public function install()
{
if (parent::install() == false )
return false;
return true;
}

}

<?
puis un fichie unmodule.tpl vide

ensuite j'ai employée avec http://localhost/prestashop/admin123/ ma donne cette resultat:

Erreur(s) de parsing dans le(s) module(s)
unmodule
svp aide moi

http___www.prestashop.pdf

http___www.prestashop.pdf

Link to comment
Share on other sites

  • 2 weeks later...

j'ai cree un module qui presenté dans le pdf creation de module de prestashop:

D.3 Etude de Cas

Il nous faut donc le nom du client ; récupérer son id client (id_customer dans
prestashop) ; le nombre de commandes (order) associé à ce client ; si nombre de
commandes est strictement supérieur à 1 alors il gagne une voiture sinon (2 –
nombre de commande) avant de gagner une voiture.
Voilà les « fonctions » à programmer :
si le client est logué on récupère son identifiant sinon on ne fait rien.
On prépare la requête SQL
On récupère la connexion à la base avec Db :getInstance et on exécute
la requête.
On traite la réponse (tri et traitement).
On prépare les données à passer à Smarty
On affiche la réponse
Nous avons déjà nos 2 fichiers : unmodulefunction.php et unmodulefunction.tpl.
L’utilisateur arrive sur la page de traitement via le lien de notre bloc module ; on
peut préparer notre script selon son état (pas du client) : connecté ou non.
jai copier le code suivant dans le fichier unmodule.function.php :

<?php
global $smarty;
include('../../../config/config.inc.php');
include(_PS_ROOT_DIR_.'/header.php');
//le client est connecté ou non
//si pas connecté
if (!$cookie->isLogged()) {
$message="pour profiter de tout nos avantages et connaitre les derniers infos, merci de vous identifiez";
$smarty->assign('message',$message);
}
else {
// $message="bonjour";
// $customer=new Customer(intval($cookie->id_customer));
// //$exclusion= array('secure_key','old_passwd','active','date_add','date_upd');
// $fields= $customer->getFields();
// foreach ($fields AS $key => $value)
// if (!in_array($key, $exclusion))
// $customer->{$key};
// $smarty->assign('customer',$customer);

$sql="SELECT count( `id_order` )
FROM `ps_orders`
JOIN `ps_customer` ON `ps_customer`.`id_customer` = `ps_orders`.`id_customer`
WHERE `customer`.`id_customer= $cookie->id_customer";
$reponce=Db::getInstance()->ExecuteS($sql);
$smarty->assign('commande',$nombre_commande[0]);
}


$smarty->display(dirname(__FILE__).'/unmodulefunction.tpl');
include(_PS_ROOT_DIR_.'/footer.php');


?>
mais aucune chagement reçu ni le message
svp qlq me explique pourqoi
aide moi

http___www.prestashop.pdf

Link to comment
Share on other sites

Attention à plusieurs choses :

- Si tu veux de l'aide, il est préférable de soigner son orthographe et la façon de présenter ton problème

- Indente ton code, on n'y comprend rien



Pour ton problème, je ne vois pas la solution mais il est préférable pour toi de commencer par un module facile à faire (Genre afficher un message) et de modifier celui-ci pour faire ce que tu veux qu'il fasse.

Link to comment
Share on other sites

merci pour ton consiel.
svp
je te demander s'il y a qlq TP pour moi
j'ai trouver seulement se tp de creation de module.
concernant le probleme :
j'ai essaie ce code qui je le trouve dans le pdf precedent

<?php
    global $smarty;
    include('../../../config/config.inc.php');
    include(_PS_ROOT_DIR_.'/header.php');
    //le client est connecté ou non
    //si pas connecté
    if (!$cookie->isLogged()) {
        $message="pour  profiter  de  tout  nos  avantages  et  connaitre  les derniers infos, merci de vous identifiez";
        $smarty->assign('message',$message);
    }
    else {
//         $message="bonjour";
//         $customer=new Customer(intval($cookie->id_customer));
//         //$exclusion= array('secure_key','old_passwd','active','date_add','date_upd');
//         $fields= $customer->getFields();
//         foreach ($fields AS $key => $value)
//             if (!in_array($key, $exclusion))
//                 $customer->{$key};
//         $smarty->assign('customer',$customer);
     $sql="SELECT count( `id_order` )
           FROM `ps_orders`
           JOIN `ps_customer` ON `ps_customer`.`id_customer` = `ps_orders`.`id_customer`  
           WHERE `customer`.`id_customer= $cookie->id_customer";
     $reponce=Db::getInstance()->ExecuteS($sql);
     $smarty->assign('commande',$nombre_commande[0]);
    }


    $smarty->display(dirname(__FILE__).'/unmodulefunction.tpl');
    include(_PS_ROOT_DIR_.'/footer.php');


    ?>



mais je ne trouve aucune changement sur la page

Link to comment
Share on other sites

Si je comprend bien ton code :

Quand le client n'est pas connecté, la variable {$MESSAGE} dans ton fichier TPL sera remplacé par "pour profiter de tout nos avantages et connaitre les derniers infos, merci de vous identifiez"

Quand le client est connecté, tu effectue une requete SQL qui assigne a la variable {$COMMANDE} le contenu de $nombre_commande[0];

Déjà, as-tu un {$COMMANDE} sur ton TPL pour voir ce que celui-ci te donne ?

Link to comment
Share on other sites

Si ton fichier TPL contient :

{$message}
{$commande}



Seulement, essaye de mettre du "vrai" texte comme :

Message : {$message}
Commande : {$commande}



J'ai besoin de savoir si ton TPL est bel et bien affiché car avec le premier code, tu devrait déjà avoir quelque chose quoi qu'il arrive.

Link to comment
Share on other sites

Il me semble qu'il faut 3 fichiers, non ?

1/ Un .php contenant une classe qui permet de créer le module dans le backoffice qui va appeler le ème fichier :
2/ Fichier .php (que tu m'a envoyé) qui contient ce que le bloc doit "calculer"
3/ Un fichier tpl affichant le résultat

Il serait intéressant d'avoir les 3 que je t'explique où se trouve le problème.

Link to comment
Share on other sites

le premier fichier c'est blockunmodule.php
le deuxieme c'est blockunmodule.tpl

<!-- Block unmodule -->

{l s='Block' mod='blockunmodule'}



{l s='Nouvelles fonctions' mod='blockunmodule'}




<!-- /Block unmodule -->


le troisieme c'es le fichier unmodule.function.php qui je t'envoie la dernier fois puis pour presenté les resultat de fichier unmodule.function.php,on a le fichie unmodulefunction.tpl:

Message : {$message}
Commande : {$commande}



merci bcp

blockunmodule.php

Link to comment
Share on other sites

Je connais le problème mais je n'ai pas la solution.

Quand tu fait un module, je te conseille de passer temporairement tes premières variables dans /config/config.inc.php à ça :

@ini_set('display_errors', 'on');
define('_PS_DEBUG_SQL_', true);



Ca te permet de voir des erreur s'il y en a. Là tu avais une erreur SQL qui annule tout affichage dans ton fichier TPL.

Malheureusement, je suis pas très à l'aise avec l'outil de gestion SQL de prestashop, donc je peux pas trop t'aider.

Bonne continuation...

Link to comment
Share on other sites

  • 2 months later...

C'est juste qu'il y a une erreur dans le pdf.


Plus d'infos ici http://www.prestashop.com/forums/viewreply/189055/

$sql = "SELECT count(`id_order`) FROM `ps_orders` JOIN `ps_customer` ON `ps_customer`.`id_customer` = `ps_orders`.`id_customer` WHERE `ps_customer`.`id_customer` = $cookie->id_customer";
   $nombre_commande = Db::getInstance()->ExecuteS($sql);
   $nbCommandes =  (int)$nombre_commande[0];
   $smarty -> assign('nb_commande',$nbCommandes);

Link to comment
Share on other sites

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...