Comme vous l’avez peut être vu passer sur twitter, j’ai du faire pour les cours une application e-commerce très basique. J’ai choisis de la faire avec Zend. Et du coup je partage le code ici ;). Cette application est très simplifié : il n’y a qu’une page produit, avec la possibilité d’ajouter des produits dans un panier et ensuite de gérer son panier. Il y a aussi la toute la partie gestion des utilisateurs : connexion, enregistrement, déconnexion etc… Et enfin il y a une page paiement qui vérifie les informations de la carte bancaire.
Quelques points techniques abordés dans cette application :
- Bootstrap (Zend_Application)
- Controller, View, Model (MVC)
- Mapping de base de données (ORM) (Zend_Db_Table)
- Formulaires, Validations, Décorateurs (Zend_Form, Zend_Validate)
- Layout et Aides de vue (Zend_View_Helper)
- Authentification (Zend_Auth)
- Session (Zend_Session)
- Cookie
- Zend_Text_Figlet (Bonus ca :))
voila quelques screenshots :
Et enfin les sources à télécharger
Articles en rapport:




Merci du code :) je vais voir ça, je souhaiterais faire un cms moi ^^
Des qu’il est fait, je le poste ici si tu veux ;)
j’ai besoin d’aide je veux developper un site de commerce electronique avec zend et je trouve beaucoup de difficulté dans la direction des pages et definition des url (je suis debutante)
@acacia : n’hesites pas a regarder sur le site http://www.z-f.fr/ Il y a un très bon Forum :D
Bonjour et merci d’avoir partager
Cependant pourquoi le dossier Form est dans le Dossier Models ?
Le script sql ne marche pas
le voici corrigé
CREATE TABLE IF NOT EXISTS `produits` (
`produitId` int(20) NOT NULL AUTO_INCREMENT,
`nom` varchar(20) NOT NULL,
`description` text NOT NULL,
`prix` float NOT NULL,
PRIMARY KEY (`produitId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=51 ;
INSERT INTO `produits` (`produitId`, `nom`, `description`, `prix`) VALUES
(1, ‘Produit N° 0′, ‘Description N° 0′, 13),
(2, ‘Produit N° 1′, ‘Description N° 1′, 11),
(3, ‘Produit N° 2′, ‘Description N° 2′, 11),
(4, ‘Produit N° 3′, ‘Description N° 3′, 5),
(5, ‘Produit N° 4′, ‘Description N° 4′, 16),
(6, ‘Produit N° 5′, ‘Description N° 5′, 1),
(7, ‘Produit N° 6′, ‘Description N° 6′, 1),
(8, ‘Produit N° 7′, ‘Description N° 7′, 12),
(9, ‘Produit N° 8′, ‘Description N° 8′, 14),
(10, ‘Produit N° 9′, ‘Description N° 9′, 12),
(11, ‘Produit N° 10′, ‘Description N° 10′, 10),
(12, ‘Produit N° 11′, ‘Description N° 11′, 19),
(13, ‘Produit N° 12′, ‘Description N° 12′, 15),
(14, ‘Produit N° 13′, ‘Description N° 13′, 11),
(15, ‘Produit N° 14′, ‘Description N° 14′, 15),
(16, ‘Produit N° 15′, ‘Description N° 15′, 10),
(17, ‘Produit N° 16′, ‘Description N° 16′, 4),
(18, ‘Produit N° 17′, ‘Description N° 17′, 15),
(19, ‘Produit N° 18′, ‘Description N° 18′, 6),
(20, ‘Produit N° 19′, ‘Description N° 19′, 13),
(21, ‘Produit N° 20′, ‘Description N° 20′, 11),
(22, ‘Produit N° 21′, ‘Description N° 21′, 6),
(23, ‘Produit N° 22′, ‘Description N° 22′, 10),
(24, ‘Produit N° 23′, ‘Description N° 23′, 17),
(25, ‘Produit N° 24′, ‘Description N° 24′, 7),
(26, ‘Produit N° 25′, ‘Description N° 25′, 1),
(27, ‘Produit N° 26′, ‘Description N° 26′, 0),
(28, ‘Produit N° 27′, ‘Description N° 27′, 8),
(29, ‘Produit N° 28′, ‘Description N° 28′, 17),
(30, ‘Produit N° 29′, ‘Description N° 29′, 20),
(31, ‘Produit N° 30′, ‘Description N° 30′, 17),
(32, ‘Produit N° 31′, ‘Description N° 31′, 9),
(33, ‘Produit N° 32′, ‘Description N° 32′, 11),
(34, ‘Produit N° 33′, ‘Description N° 33′, 7),
(35, ‘Produit N° 34′, ‘Description N° 34′, 15),
(36, ‘Produit N° 35′, ‘Description N° 35′, 6),
(37, ‘Produit N° 36′, ‘Description N° 36′, 9),
(38, ‘Produit N° 37′, ‘Description N° 37′, 16),
(39, ‘Produit N° 38′, ‘Description N° 38′, 19),
(40, ‘Produit N° 39′, ‘Description N° 39′, 3),
(41, ‘Produit N° 40′, ‘Description N° 40′, 8),
(42, ‘Produit N° 41′, ‘Description N° 41′, 8),
(43, ‘Produit N° 42′, ‘Description N° 42′, 1),
(44, ‘Produit N° 43′, ‘Description N° 43′, 2),
(45, ‘Produit N° 44′, ‘Description N° 44′, 19),
(46, ‘Produit N° 45′, ‘Description N° 45′, 16),
(47, ‘Produit N° 46′, ‘Description N° 46′, 13),
(48, ‘Produit N° 47′, ‘Description N° 47′, 3),
(49, ‘Produit N° 48′, ‘Description N° 48′, 10),
(50, ‘Produit N° 49′, ‘Description N° 49′, 20);
CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`email` varchar(30) NOT NULL,
`password` varchar(50) NOT NULL,
`nom` varchar(20) NOT NULL,
`prenom` varchar(20) NOT NULL,
`adresse` text NOT NULL,
`codePostale` int(7) NOT NULL,
`ville` varchar(20) NOT NULL,
`telMobile` varchar(20) NOT NULL,
`telFixe` varchar(20) NOT NULL,
`newsletter` int(2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1 ;
Les shorts PHP tags sont décoseillés…
dite j’ai pas compris à quoi sert ‘screen’ dans
$this->headLink()->appendStylesheet($this->baseUrl().’/styles/design.css’,'screen’) ?
Pas méchant, mais… C’est un peu du grand n’importe quoi ton appli :x
Ah, mais c’est pas du tout une appli « fonctionnelle » … y’a juste plein de petit bout de code sympa pour ceux qui débute avec le zf…
@RedH : Le dossiers Form est dans le dossier model, car quand j’ai commencé l’application, j’avais fais comme ca. C’est vrai que maintenant ca ne se fait plus comme ca !
Le script SQL fonctionnait chez moi :S je suis sous linux, voila peut etre la différence.
Ou sont les short Tag ?
Sinon « $this->headLink()->appendStylesheet($this->baseUrl().’/styles/design.css’,’screen’) » est une ligne qui se place dans le layout pour ajouter un lien dans la section head de la page pour lier un css
C’était la partie ‘screen’ qui n’était pas comprit, et j’avoue que je ne connais pas non plus ce paramètre, à quoi correspond t-il?
le screen, c’est pour dire que c’est le css qui est affiché sur un écran. tu peux mettre un print aussi (par exemple) qui est le css de … l’impression ;)
http://localhost/public/produits
Parse error: parse error in D:wampwwwapplicationlayoutsscriptslayout.phtml on line 41
excuser moi, ça fait un bail que je tente de travailler sur ce projet zend.
Mais impossible de trouver la solution à ce probleme
je ne vois pas d’erreur dans le code. mais rien ne s’affiche .
si cela est arrivé à quelqu’un d’entre vs, merci de me depanner
@eldo j’ai la meme erreur que toi
@eldo, sadus : même problème que vous …. quelqu’un aurait une solution ?
Il n’y a pas de configuration du http.conf ou du .htaccess à faire ?
je crois qu’il fau remplacé tt les <?= par <?php echo
Bonjour,
Ce script marche plutot bien, mais, en essayant de l’inclure dans des développements à moi, avec des modules, j’ai une erreur dû aux sessions semble-t-il ou à l’autoloader :
Fatal error: Uncaught exception ‘Zend_Session_Exception’ with message ‘Zend_Session::start() – /usr/share/php/libzend-framework-php/Zend/Loader.php(Line:146): Error #2 include_once() [function.include]: Failed opening ‘Ecommerce/Model/Panier/Panier.php’ for inclusion (include_path=’mes paths’) Array’ in /usr/share/php/libzend-framework-php/Zend/Session.php on line 493
Cette erreur apparait par exemple lorsque l’on veut se connecter, dans le « UserController », ici :
$session = Zend_Registry::get(‘session’);
$session->panier = new Ecommerce_Model_Panier_Panier();
Quelqu’un a une idée ?
Merci
Fabrice
Bonjour,
Quelqu’un a t-il résolu le problème du Parse error:
parse error in Parse error: parse error in applicationlayoutsscriptslayout.phtml on line 42
Même en remplaçant les <?= par <?php echo dans les fichiers, le problème persiste !
Cela vient de la ligne 23 « <?", il faut "<?php "
Fabrice
merci Fabrice,
en effet, je n’avais pas vu !!!!
ca fonctionne à présent.
Merci infiniment pour l’aide
Salut,
Je voulais te remercier pour le projet que tu as fais.
Personnellement, il est fonctionnel de mon côté.
Il y a juste une erreur de redirection d’url avec les formulaires du « user ».
Lorsque je veux me loguer ou m’inscrire, je suis un lien comme ca :
http://www.monsite.com/zend/projet-lyrixx/public/user/login
Une fois appuyer sur le bouton login, il me renvoit à
http://www.monsite.com/user/login (et du coup il trouve plus le controller)
Je vais tenter de regarder d’où ca peut venir (je suis un débutant aussi dans zend, je viens de cakePHP [dans lequel j'étais novice aussi :p])
En tout cas merci pour ton blog, il explique plus que bien ;)
Bonne journée
Salut, c’est re-moi ^^
Après analyse rapide du code, j’ai trouvé d’où vient l’erreur :)
Dans le dossier « applicationmodelsForm », tu as tes formulaires.
Dans le formulaire « Login.php », « UserRegister.php » et dans « Panier.php », tu as une ligne qui utilise un
$this->setAction(‘controller/action’);
C’est la bonne méthode mais pas les bons arguments dans mon cas, si j’utilise un sous dossier pour le projet, tout est décallé.
Pour résoudre le problème, je dois utiliser un array comme ceci ;)
$this->setAction(array(‘controller’=> »,’action’=> »));
Si je prend l’exemple du panier
$this->setAction(array(‘controller’=>’panier’,'action’=>’update’));
Du coup, le setAction redirige vers un controller et non un lien ^^
Suis happy d’avoir pu m’en sortir tout seul :p
Bonne journée,
Thony alias l’Hardy
Bonjour,
J’essai de corriger l’erreur :
Parse error in Parse error: parse error in applicationlayoutsscriptslayout.phtml on line 42
mais j’ai pas encore saisie ou je dois mettre exactement le « <? PHP "
Si quelqu'un peut m'éclaircir de plus svp!!!!!!!!
effectivement, dans l’action » s’enregistrer » , changes le
$this->setAction(‘/user/register’);
en
$this->setAction(‘user/register’);
sinon fais un $this->setAction(array(‘controller’=> »,’action’=> »)); ( je connaissais pas avant , merci ;) )