Le carnet de bord du webmaster
Passez votre chemin c'est mes notes ici...
07 | 31 | 01 | 19 | 20 | 04 | 32 | 10 | 11 | 21 | 34 | 16 | 36 | 17 | 30 | 18 | 28 | 14 | 29 | 08 | 06 | 03 | 27 | 25 | 22 | 05 | 09 | 02 | 13 | 15 | 12 | 23 | 26 | 24 | 33
**** 21-05-2010
07h41 : start 09h21 : Tours annonces; oups : j'ai oublié de faire le système de modération pour les photos. Pas grave, on fera plus tard. Pour l'instant vu qu'il y a quand même plusieurs formulaires à faire, je pense que ça pourrait être intéressant de remettre sur pied mon générateur automatique, bon gain de temps ici. Let' try that… Non en fait non, il y a eu des petites complications, et netbeans me fait gagner pas mal de temps en semiautomatisé, et bref. Commençons par créer le plus naturel, un formulaire pour ajouter soit des catégories, soit des produits, ça dépend des gens, pour ma part, on va dire catégorie. Créons le formulaire d'ajout de catégorie. Tout d'abord, il ne doit y avoir qu'une seule catégorie root par utilisateur (commerçant), caractérisée par parent_id = 0 et commerce_id 09h53 ajout des champs texte, photo et layout pour les catégories : le texte permettra à un utilisateur de mettre en page la page d'accueil de cette catégorie, photos permises dans le texte, je vais le renommer textehtml pour que ça soit plus clair. Photo : une photo supplémentaire toujours dans un souci de raffinement. layout, un template permettant à l'utilisateur de changer de disposition de page rapidement pour l'accueil cette catégorie ex : photo à droite, titre à gauche, texte au milieu, un autre : pas de photo, texte à droite un autre …. 10h20 : création des dossiers img/estore/37/categorie-produit img/estore/37/produit 10h47 : fin de création du formulaire d'ajout de catégorie de produit, pas encore testé. Il m'a donc fallu environ 40 minutes pour mettre un simple formulaire à 2 balles en place. STOP : c'est beaucoup trop : je vais recréer mon génrateur fissa, j'en peux plus… 11h31 : le générateur est en place, mais c'est l'ancien générateur, il me faut maintenant l'adapter à l'évolution de mon formulaire... 12h13 : adaptation réalisée, reste à débugguer 12h34 : bon, c'est pas mal pour un premier jet, hélas ça ne fait que me simplifier le travail, mais il y a encore du travail à faire. Autant reprendre mon formulaire fait à la main pour les catégories de produit, et j'utiliserai le générateur pour gagner du temps sur les prochains formulaires.. 12h39 : ok pour le formulaire, restera la taille de la photo à régler, indetérminée pour l'instant. Reproche pour mon formulaire, l'affichage de l'arborescence est nul : il se contente d'afficher toutes les catégories les unes à la suite des autres, à faire plus tard : rajouter la notion de hierarchie, visuellement parlant. Passons à l'affichage en liste des catégories. 12h58 : musique 14h tours annonces 15h09 : la liste pour les catégories de produit est en place, avec possibilité de éditer, supprimer, changer le statut entre activé et inactif. 15h17 pour la suite, j'ai le sentiment qu'il faut que je respecte le disposition de ma table, du moins dans un premier temps, afin de poser les briques de base. Certes, le plus pratique pour un utilisateur au premier abord est de pouvoir créer un produit, et, dans la foulée, d'insérer les photos à partir du même formulaire. Néanmoins, je ne vais pas procéder comme cela dans un premier temps, et la démarche sera calquée sur le modèle des tables : 1. D'abord on insère le produit 2. Ensuite on crée une galerie 3. Enfin on attache une galerie à un produit. Créons le formulaire d'ajout de produit. 15h38 : le formulaire est crée. Cela m'a pris 20 minutes, le gain de temps n'est pas si énorme que cela, mais bon, ça me génère le truc bateau de base… Passons à la liste oups, j'ai oublié la catégorie, optionnellement, revenons … En fait, ce formulaire devra également dans un premier temps être conçu séparément, l'inconvénient est que l'on prend plus de temps à définir un produit. L'avantage de la table intermédiaire est que le même produit peut appartenir à plusieurs catégories simultanément. Donc comme il n'y a pas de fautes, faisons la liste des produits d'abord, basiquement. Un autre avantage est que l'on peut créer de nombreux produits sans se soucier de la catégorie à laquelle ils appartiennent. Le commerçant peut donc rentrer tous ses produits, puis dans un deuxième temps affecter les produits aux catégories; A faire plus tard, une possibilité d'import des produits par fichier csv ou autre format, pour éviter de ce taper de rentrer tous les produits à la main… Je suis dégouté de faire à la main et surtout de ne pas avoir le temps de développer l'outil pour me générer les listes automatiquement, je l'avais déjà fait mais il est plus compliqué à remettre sur pieds et hélas pour l'instant le système fonctionne majoritairement avec liste5, donc cela fera l'objet 'une éventuelle future évolution.. globale.. 16h12 : la liste des produis est opérationnelle (mais très moche) Créons maintenant le formulaire de liaison entre produits et catégories. 17h51 : galères diverses … sport... 19h13 : j'vais me remettre à Tours annonces, j'crois que j'ai pas le temps pour joomla et maya ce soir… 20h25 : enfin le système formulaire liste pour les liaisons produits catégorie est en place. J'ai eu du mal à accepter qu'au niveau sécurité c'était là un point plus critique qu'ailleurs. Après avoir analysé qu'effectivement c'était normal, car une liaison hélas n'appartient pas directement à un utilisateur ou un commerce, alors je me suis résolu à tout sécurisé par des requêtes de vérification tout le long du processus. Faisons maintenant les galeries. Avec mon ancien système le générateur m'aurait généré directement la liste déroulante pour commerce_produit_id dans la table commerce_produit_galerie_photo, mais là en le remettant sur pied ceci ne sera pas exécuté. Malgré les contraintes de temps, il faut que j'améliore mon framework quand j'en ai l'occasion, perdons un peu de temps à en gagner un peu. 20h58 : Hélas, en voyant le code, c'est très passionnant, il me faudrait 2 jours je pense pour faire à peu près ce que je veux. Hélas, je n'ai pas 2 jours, je continue à la main… J'essaierai de prendre ces 2 jours dès le début du mois prochain, lors de la création du nouveau projet… Je pense également que je me prendrai 3 jours supplémentaires pour redévelopper une automatisation des listes, afin de vraiment tout miser sur la rapidité de développement. 5 jours de moins pour toute une vie postérieure optimisée, ça vaut forcément le coup, … on verra en temps et en heure. 22h12 : j'ai fait une erreur de concption dans mon schéma. L'utilisation d'une galerie pour les photos est un peu abusé. Cela permet d'affecter plusieurs galeries par produit, mais en général, on n'a pas besoin de tant de moyens pour mettre en avant un produit. Une seule galerie devrait être suffisante, régie par un style ou template qui lui se trouve au niveau du produit. De plus j'ai oublié les stocks. Reforgeons le schéma (aïeaïeaïe) sch-ecommerce2.png Celui-ci semble plus adapté. Et c'est reparti pour un tour;.. longue pause 00h12 02h24 : confronté à un problème auquel je n'étais jamais confronté auparavant : 42000 la requête sql m'indiquait une parse error, sur un simple insert. J'ai mis longtemps à capter que l'utilisation des apostrophes inversées `` permettaient je ne sais pas pourquoi de résoudre ce problème… Bizarre… Bon, donc je n'ai hélas pas fini, tant pis, je prendrais encore la journée de demain sur cela. PATCH img/estore/37/categorie-produit img/estore/37/produit Tan_Private_CommerceCategorieProduit Tan_Kustom_CommerceProduit SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL'; CREATE TABLE IF NOT EXISTS `tan`.`commerce_categorie_produit_has_commerce_produit` ( `id` INT(11) NOT NULL AUTO_INCREMENT , `commerce_categorie_produit_id` INT(11) NOT NULL , `commerce_produit_id` INT(11) NOT NULL , PRIMARY KEY (`id`, `commerce_categorie_produit_id`, `commerce_produit_id`) , INDEX `fk_commerce_categorie_produit_has_commerce_produit_commerce_c1` (`commerce_categorie_produit_id` ASC) , INDEX `fk_commerce_categorie_produit_has_commerce_produit_commerce_p1` (`commerce_produit_id` ASC) , CONSTRAINT `fk_commerce_categorie_produit_has_commerce_produit_commerce_c1` FOREIGN KEY (`commerce_categorie_produit_id` ) REFERENCES `tan`.`commerce_categorie_produit` (`id` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_commerce_categorie_produit_has_commerce_produit_commerce_p1` FOREIGN KEY (`commerce_produit_id` ) REFERENCES `tan`.`commerce_produit` (`id` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1 COLLATE = latin1_swedish_ci; CREATE TABLE IF NOT EXISTS `tan`.`commerce_categorie_produit` ( `id` INT(11) NOT NULL AUTO_INCREMENT , `parent_id` INT(11) NOT NULL , `commerce_id` INT(11) NOT NULL , `titre` VARCHAR(255) NOT NULL , `textehtml` TEXT NOT NULL , `photo` VARCHAR(255) NOT NULL , `layout` TINYINT(4) NOT NULL , `ordre` INT(11) NOT NULL , `statut` TINYINT(4) NOT NULL , PRIMARY KEY (`id`) , INDEX `fk_commerce_categorie_produit_commerce1` (`commerce_id` ASC) , CONSTRAINT `fk_commerce_categorie_produit_commerce1` FOREIGN KEY (`commerce_id` ) REFERENCES `tan`.`commerce` (`id` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1 COLLATE = latin1_swedish_ci; CREATE TABLE IF NOT EXISTS `tan`.`commerce_produit_photo` ( `id` INT(11) NOT NULL AUTO_INCREMENT , `commerce_produit_id` INT(11) NOT NULL , `path` VARCHAR(45) NOT NULL , `order` TINYINT(4) NOT NULL , `statut` TINYINT(4) NOT NULL , PRIMARY KEY (`id`) , INDEX `fk_commerce_produit_photo_commerce_produit1` (`commerce_produit_id` ASC) , CONSTRAINT `fk_commerce_produit_photo_commerce_produit1` FOREIGN KEY (`commerce_produit_id` ) REFERENCES `tan`.`commerce_produit` (`id` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1 COLLATE = latin1_swedish_ci; CREATE TABLE IF NOT EXISTS `tan`.`commerce_produit` ( `id` INT(11) NOT NULL AUTO_INCREMENT , `commerce_id` INT(11) NOT NULL , `titre` VARCHAR(45) NOT NULL , `description` TEXT NOT NULL , `prix` DECIMAL(13,2) NOT NULL , `style` TINYINT(4) NOT NULL , `quantite` INT(11) NOT NULL , `statut` TINYINT(4) NOT NULL , PRIMARY KEY (`id`) , INDEX `fk_commerce_produit_commerce1` (`commerce_id` ASC) , CONSTRAINT `fk_commerce_produit_commerce1` FOREIGN KEY (`commerce_id` ) REFERENCES `tan`.`commerce` (`id` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1 COLLATE = latin1_swedish_ci; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;