Jump to content

[Résolu] Problème Module Calcul Auto des prix + transport inclus


alapaches

Recommended Posts

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 :D) 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 :P

moduleaddon.php

Edited by alapaches (see edit history)
Link to comment
Share on other sites

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 by alapaches (see edit history)
Link to comment
Share on other sites

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 ProductCore
et pas

class ProductCore extends ObjectModel
Et 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 by alapaches (see edit history)
Link to comment
Share on other sites

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 :P) 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

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

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 by alapaches (see edit history)
Link to comment
Share on other sites

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 by alapaches (see edit history)
Link to comment
Share on other sites

 

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

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