alapaches Posted January 15, 2015 Share Posted January 15, 2015 (edited) Bonjour à toutes et à tous ! Je suis en train de développer mon premier module pour Prestashop 1.6 uniquement pour le moment. Je vous explique un peu la chose : - Mon module à besoin de 3 autres modules pour fonctionner ( C'est pas sa le problème) - Mon module utilise des surcharges (overrides) - Il remplace également des fichiers dans les dossiers de prestashop ( si ils existent), sinon il les crée Je me suis bien tapé 500 lignes de code aujourd'hui ( beaucoup de copier coller) car y'a pas mal de méthodes qui se ressemblent mais qui n'agissent pas sur les mêmes fichiers. Je vous explique donc le soucis : Dans le fichier PHP de mon module, je copie un des fichiers de mon module (EX: monmodule/override/classes/Address.php) que je copie dans le répertoire suivant : racine_du_site/override/classes. Certains de mes fichiers se copient parfaitement. Quand les fichiers existent déjà, l'ancien fichier est renommé en .old et le fichier de mon module est ensuite copié dedans. SAUF que pour certains fichiers/dossiers , sa me pose problème (En particulier le dossier racine_du_site/themes/default-bootstrap/. J'ai fais des tests dans mon code qui me renvoie une erreur. Apparemment, sa viendrais d'un soucis d'accès au répertoire. Pourtant j'ai déjà tout vérifié et tout me semble ok (permissions lecture/écriture, etc...) Voila le souchi (pas miam ) Si quelqu'un à besoin, je joins direct le fichier PHP principal de mon module pour que vous voyez de quoi je cause hihi Vous pouvez créer les fichiers nécessaires pour la copie pour tester ! PS : Je pense que ce type de module servira à grand nombre de personnes ! Cordialement, le petit alapaches hihi moduleaddon.php Edited January 19, 2015 by alapaches (see edit history) Link to comment Share on other sites More sharing options...
alapaches Posted January 16, 2015 Author Share Posted January 16, 2015 (edited) Re, Merci de ta réponse. J'attache le zip du module au post pour que tu voies comment sa se passe. Je précise également que la vérification des modules installés ne s'effectue pas xD Cordialement, alapaches EDIT : Quand je met la fonction qui pose problème en commentaire, c'est une autre fonction qui ne marche pas mais c'est un soucis de source cette fois-ci --' EDIT2 : Le soucis de source est réglé. J'avais oublié un / dans le chemin du fichier moduleaddon.zip Edited January 16, 2015 by alapaches (see edit history) Link to comment Share on other sites More sharing options...
alapaches Posted January 16, 2015 Author Share Posted January 16, 2015 (edited) Heu, $nomFichier n'est pas déclaré ça ne peut pas fonctionner, ce n'est pas plutôt $filename. Les overrides de tes classes ne sont pas bons, tu devrais faire comme ça : class Product extends ProductCoreet pas class ProductCore extends ObjectModelEt dans l'override, tu ajoutes que les function modifiées ou ajoutées. Que veux-tu dire par la ? Imagine que j'ai juste rajouté la ligne suivante : $result['id_state'] = State::getIdByIso(Context::getContext()->cookie->iso_code_state);Je rajoute juste cette ligne dans mon PHP original ou je créé un nouveau fichier qui ne contient que cette ligne la ? EDIT : C'est bien $nomFichier que j'utilise, j'avais pas fait gaffe qu'il me restait encore des $filename. C'est remplacé et sa fonctionne. EDIT2 : Je joint le zip avec les modifs de faites. Tu me dira si c'est correct. De plus, je bloque totalement sur la méthode uninstall(). Parce que la sa veut même pas désinstaller. moduleaddon.zip Edited January 16, 2015 by alapaches (see edit history) Link to comment Share on other sites More sharing options...
alapaches Posted January 16, 2015 Author Share Posted January 16, 2015 Exemple d'un override de la classe Alias class Alias extends AliasCore { public function getAllAliases() { if (!Alias::isFeatureActive()) return ''; $aliases = Db::getInstance()->executeS(' SELECT a.alias, a.search FROM `'._DB_PREFIX_.'alias` a '); return $aliases; } } Dedans il y a que la function ajouté ou modifié par le fichier entier. D'accord je comprend mieux maintenant merci beaucoup ! Une dernière petite question : Tu pourrait me donner un coup de pouce (ou de main c'est toi qui voit ) pour la méthode de désinstallation du module ? Parce que faudrais que sa remette les fichiers originaux (suppression des overrides installés) ? Merci encore ! Link to comment Share on other sites More sharing options...
alapaches Posted January 16, 2015 Author Share Posted January 16, 2015 D'accord je vais faire encore du copier coller trop bien xD Sinon pour le module, en fait quand un utilisateur va aller sur la boutique, il va pouvoir sélectionner son lieu de livraison en haut à gauche (grâce aux 3 modules complémentaires). Les prix des produits vont bien sur changer de prix mais la trouvaille de mon module c'est qu'il va faire en sorte que les prix affichés sur la boutique sont automatiquement mis à jour en fonction de l'adresse choisie MAIS en plus ils seront TTC et le port est compris dedans ! Comme sa, pas de surprise au client lors de la commande ( pas de frais supplémentaires de livraison vu q'ils sont directement calculé avec mon module) Encore une dernière question, je sais pas si t'a vu mais ma méthode qui vérifie si les modules complémentaire sont installés private function _verificationModulesInstalles()Elle ne se fait pas car normalement je doit obtenir une page qui me dit de prendre les 3 modules avec les liens correspondants. Je sais que la fonction en elle-même fonctionne bien mais vu qu'elle ne s'effectue pas elle est mal placée ? Link to comment Share on other sites More sharing options...
alapaches Posted January 16, 2015 Author Share Posted January 16, 2015 (edited) Tu l'as mise dans install ça ne va pas du devrait la mettre dans public function getContent() { $this->_verificationModulesInstalles(); } Re, j'ai fais des modifs, sauf que la page ne s'affiche toujours pas. Elle devrait s'afficher uniquement si les dossiers des modules complémentaire n'existent pas. Voila ce que j'ai rajouté dans la fonction d'install : $this->getContent(); public function getContent() { $this->_html; $this->_verificationModulesInstalles(); }Tu pourrais m'aider ? Normalement après sa je ne devrais pas avoir d'autres problèmes EDIT : J'ai remarqué que la fonction suivante ne marche pas alors que toutes les autres fontionnent : private function _remplacerFichiersCssModuleGeip($nomFichier) { $fichier = _PS_ROOT_DIR_.'/modules/'.$this->name.'/themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier; if (!file_exists($fichier)) { Module::uninstall($this->name); die(Tools::displayError('_remplacerFichiersCssModuleGeip: Source du module introuvable: /themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier)); } $content = file_get_contents($fichier); $copyfile = _PS_ROOT_DIR_.'/themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier; if(file_exists($copyfile)) { rename(_PS_ROOT_DIR_.'/themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier,_PS_ROOT_DIR_.'/themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier.$backup); $copyfile = _PS_ROOT_DIR_.'/themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier; } if (!@$handle = fopen($copyfile, 'w')) { Module::uninstall($this->name); die(Tools::displayError('_remplacerFichiersCssModuleGeip: Ouverture du répertoire impossible /themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier.' Veuillez vérifier les permissions')); } if (fwrite($handle, $content) === FALSE) { Module::uninstall($this->name); die(Tools::displayError('_remplacerFichiersCssModuleGeip: Ecriture du fichier impossible /themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier.' Veuillez vérifier les permissions')); } } Edited January 16, 2015 by alapaches (see edit history) Link to comment Share on other sites More sharing options...
alapaches Posted January 16, 2015 Author Share Posted January 16, 2015 (edited) Met moi ton fichier en pièce jointe le voici Regarde le post d'avant j'ai relevé un soucis moduleaddon.php Edited January 16, 2015 by alapaches (see edit history) Link to comment Share on other sites More sharing options...
alapaches Posted January 16, 2015 Author Share Posted January 16, 2015 (edited) Re, J'ai fait comme tu m'a dit mais sa ne change rien. Du coup j'ai réglé le soucis en ajoutant les dépendances aux modules dans le contruct. Par ailleurs, tu sais pourquoi cette fonction ne marche pas ? private function _remplacerFichiersCssModuleGeip($nomFichier) { $fichier = _PS_ROOT_DIR_.'/modules/'.$this->name.'/themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier; if (!file_exists($fichier)) { Module::uninstall($this->name); die(Tools::displayError('_remplacerFichiersCssModuleGeip: Source du module introuvable: /themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier)); } $content = file_get_contents($fichier); $copyfile = _PS_ROOT_DIR_.'/themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier; if(file_exists($copyfile)) { rename(_PS_ROOT_DIR_.'/themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier,_PS_ROOT_DIR_.'/themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier.$backup); $copyfile = _PS_ROOT_DIR_.'/themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier; } if (!@$handle = fopen($copyfile, 'w')) { Module::uninstall($this->name); die(Tools::displayError('_remplacerFichiersCssModuleGeip: Ouverture du répertoire impossible /themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier.' Veuillez vérifier les permissions')); } if (fwrite($handle, $content) === FALSE) { Module::uninstall($this->name); die(Tools::displayError('_remplacerFichiersCssModuleGeip: Ecriture du fichier impossible /themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier.' Veuillez vérifier les permissions')); } }C'est le même genre de soucis que j'avais eu "vérifier les permissions". Mais cela ne le fait qu'avec cette fonction la car dès que je la mets en commentaire, tout fonctionne. Edited January 16, 2015 by alapaches (see edit history) Link to comment Share on other sites More sharing options...
alapaches Posted January 16, 2015 Author Share Posted January 16, 2015 rename(_PS_ROOT_DIR_.'/themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier,_PS_ROOT_DIR_.'/themes/default-bootstrap/css/modules/geoipsimulatorpro/'.$nomFichier.$backup);$backup = ? C'est une variable que j'ai déclaré et qui contient '.old' Link to comment Share on other sites More sharing options...
alapaches Posted January 16, 2015 Author Share Posted January 16, 2015 Remet moi le module en ligne avec toutes tes modifs du coup. Le voici La variable $backup est déclarée dans la function__contruct() moduleaddon.zip Link to comment Share on other sites More sharing options...
alapaches Posted January 19, 2015 Author Share Posted January 19, 2015 Re, J'ai fini le module. Merci de ton aide précieuse. Je passe en résolu Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now