Jump to content

B A ba pour comprendre le code


Recommended Posts

Bonjour à tous,


N'auriez vous pas une bonne adresse pour comprendre les méthodes php de traitements des données comme c'est utilisé sous Prestashop?

Ou si une âme charitable pouvais me décortiquer ceci:


> je veux ouvrir une base et en récuperer les informations.
> si une variable $g existe (donne via un input quelconque) alors verifier si elle existe dans la base
> si oui sauver une information en la sauvegardant dans un champ de la base
> si non afficher un message d'erreur

Ca me semble si facile, je vois les "if" "else", mais je me sens tout bete car je n'arrive pas a comprendre la base.

D'ailleurs c'est ca que je veux pour Noel !! comprendre

Serais ce vous le Père Noël cette année? ;)

Link to comment
Share on other sites

Si tu cherches sur Google et tu trouveras plein de site il existe aussi des centaines de livre abordant tout cela.

Et pour le pédagogique il existe aussi l'éducation nationale.

Apprendre le PHP et la POO c'est comme apprendre une nouvelle langue rien de moins donc cela ne se fera pas en un week-end ce vous prendra un peut plus de temps que cela si vous n'avez aucune notion de développement informatique.

Link to comment
Share on other sites

  • 2 weeks later...

Salut JP,

Je te remercie pour ta proposition, c'est vraiment tres urbain de ta part.

Alors pour cause de "Fetes" je n'ai pas ete tres assidu ces derniers jours, mais comme le suggerer Media 87 je me suis plongé dans la POO qui n'est pas facile a comprendre soit dit en passant.

SI j'essaye de comprendre, c'est que je souhaiterai arriver a un résultat, en l'occurrence je voudrai faire un petit formulaire ou un code pourra etre saisie s'il correspond a celui existant dans la base ( la base groupe) l'utilisateur pourra s'inscrire en appartenant a ce groupe.

Mon soucis c'est que je m'enmele les pinceaux entre les classes qui existe deja celles que je peux utiliser et celle que je doit creer sans parler des moyens d'acces aux bases.


alors si on prend mon soucis a la base:

j'ai crée sur la base de authentification.php

code.php
code.tpl


Mon

code.tpl

<form action="{$base_dir_ssl}code.php" method="post"> 


{l s='Code'}
<input type="text" name="groupe_code"/></span>
<input type="submit"  name="SubmitCode" class="button" value="{l s='ok'}" /></span>

</form>



code.php (quelque part dans authentification.php)

if (Tools::isSubmit('SubmitCode')) // Methode pour soumettre les valeurs du formulaire
{    
xxxxxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxxx
}




Je n'arrive pas a obtenir de résultats probant dans le code que je mets dans xxxxxx :/ c'est a partir de la qu'il serait interressant de m'expliquer comment tu construits les requetes etc.. mais est il utile de crée une class spéciale alors que apparemment c'est un méthode déjà éprouvé avec l'authentification?

Link to comment
Share on other sites

salut
perso j'ai commencé à me pencher sur le code de presta y'a environ 1 mois
j'ai utilisé http://www.siteduzero.com/tutoriel-3-147182-introduction-a-la-poo.html
qui est un excellent site du tuto pour plein de choses
alors ça m'a pas permis de tout comprendre en 2h mais il est vrai que ce tuto dégage quand mm bien les bases
ensuite c'est à grand coup d'essai que j'ai réussi à changer le code pour obtenir ce que je voulais
exemple pour inserer ou modifier dans ta base c'est Db::getInstance()->Execute('ici ton update ou insert') où que tu soit dans le code...
bonne chance
lolo

Link to comment
Share on other sites

Ecoute Merci, je vais de ce pas le lire.

Mais je pense maintenant c'est d'avoir une bonne vision de comment est pensé prestashop parce que le tuto n'empreinte pas forcement la même sémantique ce qui perturbe un peu.

au pire au debut je vous poserai mes bout de code pour validation ... mais c'est chaud quand meme.

Tu t'y es mis quand au php poo pour arriver a faire ce que tu veux?

Link to comment
Share on other sites

Prestashop est facile à comprendre, après, il ne faut pas se faire d'illusions, il a été écrit par des passionnés qui développent depuis des années et des années.
Il faut avoir une certaine expérience en PHP pour pouvoir le modifier facilement, la POO reste secondaire car une fois qu'on a compris le principe d'instanciation d'une classe et des appels à leurs méthodes, on a tout fait.

Tout ce qui va t'intéresser se trouve dans le dossier /classes, et pour les requêtes, il faut voir MySQL.php et Db.php qui gèrent toutes les fonctions de requêtes.

Un truc du genre va permettre de savoir si le code est existant :

$is_ = Db::getInstance()->getValue('SELECT COUNT(*) FROM _PREFIX_.customer_group WHERE code = '.pSQL(Tools:getValue('code')));



Ensuite, on teste le groupe :

 if ($is_ > 0) { 



Après, on insère le customer dans le bon groupe :

        
$row = array('id_customer' => $id_customer, 'id_group' => $id_group);
Db::getInstance()->AutoExecute(_DB_PREFIX_.'customer_group', $row, 'INSERT');



Enfin voila une idée générale parmi tant d'autres ... Ceci tout court ne marchera pas d'ailleurs, il faut récupérer l'id du groupe entre autres.

Link to comment
Share on other sites

salut
vincent a remarquablement bien expliqué .....
la POO va te donner qq bases pour comprendre (les $this par exemple) mais le principal est de se familiariser avec les classes et les instanciations (c'est effectivement un peu une gymnastique d'esprit)
perso j'ai commencé à vouloir crée un module pour affecter un transporteur à des tranches de quantité dans le panier ( et non pas de poids ou de prix) au mois d'octobre
je viens de terminer mais j'ai modifié finalement beaucoup des fichiers coeurs de presta
voilà
bonne chance

Link to comment
Share on other sites

Le tuto du site du zero est assez explicite! merci pour le tuyau. Mais il me reste encore pas mal de chemin avant de respirer le php5 Poo. En attendant j'ecris et teste pleins de truc tout en sachant que forcement je vais oublier des trucs ou ecrire des doublons car je ne saurais pas ou la fct se trouve!

J'en connais un qui va pas s'emmerder en ce debut d'année... Bonne St Sylvestre a tous!

Link to comment
Share on other sites

Oui mais encore une fois, ne te fixe pas sur la POO !
Même si Prestashop est propre, la POO est plus utilisée dans des Frameworks PHP poussés.

Ici, comprends juste que tu as des classes, contenues dans le dossier classes ... (logique ! ^^) Et dans chaque classe, des fonctions associées.

Pour appeler une fonction d'une classe, il faut utiliser : TaClasse::TaFonction(param)
C'est tout ! Les classes de Prestashop sont vraiment complètes, voir un peu trop, du coup utilise juste les classes déjà écrites.

Le mieux est de modifier les requêtes SQL faites dans les classes, ou de rajouter des fonctions en copiant / collant depuis une autre.

Et comme dans mon post précédent, jette un énorme coup d'oeil aux classes MySQL.php et Db.php qui contiennent des fonctions intéressantes pour tes requêtes SQL.

Link to comment
Share on other sites

Pour le moment j'arrive un résultat mais sans passer par les classes (j'ai encore du mal a utiliser les objets)

m'enfin pour faire simple

j'ai fait comme tu m'as dit Vincent a savoir ...



if (Tools::isSubmit('SubmitCode')) //methode de validation du form
{    

$code = trim(Tools::getValue('code'));//methode de recuperation du form
if (empty($code))
   {
        $errors[] = Tools::displayError('entrez un code');
    }

else
   {   
       $result = Db::getInstance()->getValue('
       SELECT COUNT(*) 
       FROM `'._DB_PREFIX_.'group`
       WHERE `code_group` = \''.pSQL($code).'\'');
       //echo $result;
        if ($result > 0) { 

           // Set la valeur de o     
           $o = 1;
               $smarty->assign('o',$o);


           // Recuperation id du group  
           $comit = Db::getInstance()->getRow('
               SELECT * 
               FROM `'._DB_PREFIX_.'group`
               WHERE `code_group` = \''.pSQL($code).'\'');


           // Je stocke le groupe

              $row = array('id' => intval(id), 'custgroup' => intval($comit['id_group']));
             Db::getInstance()->AutoExecute(_DB_PREFIX_.'data', $row, 'INSERT');

           // Recuperation du nom du group 
           $comitname = Db::getInstance()->getRow('
               SELECT * 
               FROM `'._DB_PREFIX_.'group_lang`
               WHERE `id_group` = \''.pSQL($comit['id_group']).'\'');
                      $comitname=$comitname['name'];
                  echo  $comitname;

               // Recuperation id du dernier customer dans la la table groupe    
           $idfinal = Db::getInstance()->getRow('
               SELECT *
               FROM `'._DB_PREFIX_.'customer_group` 
                       ORDER BY `id_customer` DESC');
                      $idfinal= intval($idfinal['id_customer']);


// Update de la valeur id groupe au dernier inscrit
              return Db::getInstance()->ExecuteS('
                      UPDATE `'._DB_PREFIX_.'customer_group`
                      SET `id_group` = `$lastcustom`
                       WHERE `id_customer` = `$idfinal`');        



                }

           else
   {    
            $errors[] = Tools::displayError('Mauvais code'); }


}




Bien entendu C'est tres laid... et ca marche pas. enfin jusqu'a l'update que j'arrive pas a faire fonctionner (mauvaise semantique je pense)

Neanmoins ca colle avec ce que souhaite faire (surtout je le comprends) !! si quelqu'un pouvait me donner la semantique pour l'update voir le meme resultat en utilisant un objet (j'ai essayé mais trop de sources d'erreurs et pas de correction)


Merci de votre patience (une fois de plus) et Bonne Année

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