Forum francophone du Framework CakePHP
Vous n'êtes pas identifié.
Pages: 1 2
Bonjour,
Après avoir noté l'arrivée d'un nouveau comportement pour CakePHP, j'ai enfin eu l'occasion de le tester et je suis totalement bluffé !
Voici enfin le comportement propre et efficace qui permet de gérer les fichiers associés à un modèle sans le stocker en base de données.
Je vous conseille de lire la page http://www.meiocodigo.com/projects/meioupload/ pour voir les détails.
En résumé, voici les étapes nécessaires ... on peut difficilement faire plus simple d'intégration.
1) Avoir un champ "picture" (peut importe le nom tant que cela correspond à la configuration) dans son modèle. Les champs "dir", "mimetype" et "filesize" sont également "automatiques" si on souhaite les inclure.
2) Modifier sont modèle pour inclure le Comportement (les options peuvent être plus ou moins détaillées) :
3) Inclure un champ image dans le formulaire d'ajout/modif :
4) Pour supprimer l'image, il suffit de rajouter une checkbox de suppression au formulaire :
5) Sauvegarder l'élément de manière habituelle dans le contrôleur ...
Et bien d'autres options, je vous conseille de visiter la page du Comportement. En espérant avoir pu vous rendre service !
Hors ligne
ah c'est cool, ça. j'étais en train justement de jeter un oeil à attm, de David Persson.
https://cakeforge.org/projects/attm/
Si je comprends bien ce que ça fait en général, je ne comprends pas trop ce que ça fait dans le détail, et en plus la mise en place implique pas mal de modifications (nouvelle arbo du webroot, remplacement des appels aux helpers standards par d'autres, config à ajouter dans le core), du coup je m'apprêtais à le tester sur une appli toute neuve pour voir. Je vais jeter un oeil à MeioUpload d'abord. Merci Pierre.
Hors ligne
Excellent Behavior ! Enfin une gestion quasi transparente des images associées à un enregistrement.
Par contre j'ai du récrire la méthode createthumb() pour la génération des aperçus, qui n'avait pas l'air d'être plus qu'un brouillon. Au cas où cela intéresse quelqu'un :
Hors ligne
salut a tous.
j'ai un souci avec l'upload, aucun fichier ne s'envoi...je suis en local est ce que ca joue??
et commet afficher les message d'erreur en cas d'erreur de validation??
Dernière modification par Zaibon (27-05-2009 15:03:22)
Hors ligne
j'utilise souvent ce behavior et j'en ai créé une version plugin plus facilement réutilisable :
http://github.com/msadouni/cakephp-meio … ree/master
j'en ai profité pour ajouter la traduction française, la possibilité d'ajouter d'autres traductions et le code de Kalt pour les miniatures avec phpThumb. N'hésitez pas à le forker sur github pour y apporter des modifs.. Je compte prochainement y ajouter des tests pour ensuite nettoyer un peu le code.
Hors ligne
apparemment meioupload n'est pas compatible avec la dernière version de cakephp
voir ici dans les commentaires.
il apparait un erreur : Array to string conversion [CORE/cake/libs/model/datasources/dbo_source.php, line 582]
quelqu'un aurais déja eu ce problème et aurai trouver la solution??
Hors ligne
je l'utilise sans souci avec la dernière version (1.2.3.8166). À quel endroit as-tu l'erreur et comment as-tu déclaré MeioUpload dans le model ?
Hors ligne
Bonsoir,
J'aimerai savoir quelqu'un a utiliser de Behavior sur plusieurs modèles.
Car je l'utilise sur plusieurs et j'ai un soucis.
Je l'utilise dans le modèle 'Structure' et 'EpiType'.
Quand je travaille sur le modèle 'Structure' je n'ai pas de soucis mais quand je travaille sur le modèle 'EpiType'. Là j'ai ce message :
Quand je cherche un peu, je découvre que le modèle 'Structure' est crée après le modèle 'EpiType'. Existe t'il un lien ? Je pense.
Et quand j'enlève le Behavior du modèle 'Structure' je n'ai plus de soucis.
Une idée su une solution ou une piste.
Voici un peu de code :
Merci d'avance
Hors ligne
Bon je viens d'avoir une idée pour contourner le problème. Je charge dynamiquement le Behavior lors de l'enregistrement de mon formulaire.
Comme on peut le faire pour le 'Containable'. Et ça fonctionne correctement.
Hors ligne
Bonjour,
Cet excellent behavior m'a permis d'avancer très rapidement dans mon développement en cours, mais j'ai une petite remarque.
Lorsque j'édite l'enregistrement et que je veux recharger un fichier ayant le même nom, il le sauvegarde avec un chiffre additionnel à la fin du nom du fichier et le fichier original est bien enlevé. Je m'attendais à ce qu'il écrase le fichier existant par le nouveau.
Existe t'il une option permettant de définir si un fichier existant est écrasé par le nouveau.
Merci d'avance.
Hors ligne
Bonsoir.
Je débute avec Cake et j'essaye d'utiliser MeioUpload, je l'ai implémenté selon les instruction à la différence que mes tables "livres" (produits) et "images" sont séparées (liées entre elle par un $hasAndBelongToMany et une table de jointure).
Lorsque je sauvegarde le formulaire pour un nouveau produit (crée grace à $form->create('Livre', array('enctype' => 'multipart/form-data')) et contenant un champ file nommé "data[Image][filename]"), le livre est enregistré grâce à saveAll, mais le fichier n'est pas uploadé, la table de jointure, pas mise à jour et les champs de l'enregistrement de la table "images" sont vides hormis les automagiques et le filename qui a pris sa valeur par défaut...
Je désespère, moi qui croyais que c'était si simple 
Je transmet volontiers des fragments de code à la demande, au cas ou l'erreur ne sera pas bête et méchante.
Merci de votre aide !
Hors ligne
Un bout de code ne mange pas de pain et on y verra déjà plus clair donc oui poste :p
Hors ligne
Pour sauvegarder automatiquement une Habtm, il me semble que tu dois ajouter un numéro dans les champs du modèle joint, ici ton input data[Image][filename] devrait s'appeler data[Image][0][filename], que tu dois pouvoir créer avec $form->input('Image.0.filename'). Ceci dit je ne sais pas si MeioUpload va bien le gérer.
Petite précision :
est plus concis que :
Hors ligne
Bonjour,
J'ai modifié selon ce que Kalt à préconisé (au cas où), pas de changement... Sinon pour le code:
Modèle Image:
et la fonction de mon contrôleur de livres qui s'occupe du boulot:
Il est évident que si c'est trop scabreux, je renoncerai à cette table d'images, c'était plus pour l'avenir, lorsque l'envie me prendra de mettre plusieurs images par livre...
Merci pour vos réponses rapides en tout cas ! 
Dernière modification par Iosis (08-12-2009 12:09:22)
Hors ligne
Bien, j'ai finalement résolu le problème en renonçant à cette table images et en renseignant les champs de meioupload dans la table livres, ce qui fonctionne parfaitement.
J'ai ensuite voulu tester le redimensionnement et la création de thumbnails qui fonctionne aussi très bien, mais à tendance à remplir le vide par du blanc. J'ai donc renseigné les tailles que sur une dimension, en l'occurrence pour des livres, la hauteur.
Modèle livres:
Cela fonctionne très bien ! L'image n'est redimensionnée qu'en hauteur et n'est pas affublée de deux bandes blanches sur les côtés.
Seulement Meioupload n'a pas l'air de beaucoup apprécier, car il me notifie l'oubli du paramètre width.
Comment pourrais-je me défaire de cette notice ? Y a-t-il une option ? Ou quelqu'un aurait-il eu la même idée ?
Merci !
Dernière modification par Iosis (12-12-2009 22:22:34)
Hors ligne
Oups, je crois que le problème venait de mon image d'origine, c'est bon, plus de problème.
Hors ligne
Bonjour à tous, j'ai un petit problème avec la partie 4 de ce petit exemple.
Cela est super ça supprimer bien l'image sauf que quand je le rajoute dans mon form par défaut cette checkbox est toujours coché ce qui est un peu embêtant. Ya t'il une solution afin de la décoché par défaut ?
Cordialement Jean-Baptiste.
Hors ligne
Il me semble que les checkbox ne prennent pas de parametre "value" par defaut, donc il te reste 2 solutions :
1 - Fixer une valeur par defaut depuis ton controleur
2 - Le faire dans ta vue
Hors ligne
Je viens de tester et cela ne marche pas car en effet la valeur par défaut de $form->data['Product']['picture']['remove'] est le nom de l'image à supprimé. Ce que je ne comprend pas c'est que cette checkbox à toujours l'attribue: checked="checked"
Jai essayer de rajouter une option affectant le checked mais cela ne marche pas.
Sinon il va falloir que je passe dans les assistants ce qui serais dommage de faire un mélange des deux...
Cordialement Jean-Baptiste.
Hors ligne
Franchement de la balle.
Attention si jamais avec la version 1.3 ça fait une plantée sur la la classe folder.
Pour y remédier il suffit d'ajouter la méthode suivante (qui n'existe plus sous la 1.3) dans le fichier "cake/libs/folder.php"
Hors ligne
Yop, merci pour l'astuce.
Par contre à mon avis, il est préférable une mise à jour du Behavior plutôt qu'une modification du coeur de Cake ^^
Hors ligne
Mmm je suis bloqué sur la suppression. Comme il n'y a pas de valeur à la checkbox je vois pas pas trop comment lui dire ce qu'il doit supprimer.
Bon alors personnellement je me dis qu'on doit passer l'id (vu que c'est la seule clé unique).
dans la vue, mais il ne se passe rien. Comment vous le faite chez vous ?
dans le controller
Bon dans ma table par contre le champ "name" est toujours à null et personnellement je sais pas à quoi il sert vu qu'il y a déjà "picture" c'est peut être le nom du fichier sans l'extension.
Hors ligne
Bon personnellement j'ai pas capté l'histoire de la checkbox qui peut faire supprimer l'image.
J'ai fait autrement, vous balancez l'id du fichier à la checkbox puis on gère la suppression dans le controller.
Hors ligne
Mais pour l'histoire de la miniature.
Chez moi ça marche bien, mais sauf sous "internet explorer" GRRR et uniquement pour les PNG les JPG c'est bon.
J'ai même tenté de rajouter le code Kalt, en ajoutant "phpThumb" dans les vendors mais rien n'y fait.
Vous avez-pas de soucis à ce niveau ?
C'est quand même franchement abusé, j'arrive pas à comprendre comment le traitement des données peut varier selon le naviguateur.
Hors ligne
Bon ben pour info vers la ligne 639 il faudrait ajouter x-png sinon le traitement ne se fera pas et typiquement on trouve pas mal de logo en ce format. ( dans mon cas ou je faisais un test avec le logo de Google qui bien sur n'était pas un png simple, lol quel manque de bol)
L'extension de fichier est toujours .png, c'est le mime qui est différent donc c'est un peu plus subtile.
Dernière modification par mibs (03-03-2010 14:45:24)
Hors ligne
Pages: 1 2