Jump to content

appel d'une function dans un module


Recommended Posts

Bonjour,

 

j'ai crée un module qui ajoute un nouvelle onglet dans l'admin d'un produit avec l'aide de hookDisplayAdminProductsExtra

 

Dans celui-ci j'ai crée un bouton qui est à l'image de celui que l'on peut trouver dans virtualproduct.tpl

 

celui du virtualproduct.tpl :

<a href="{$currentIndex|escape:'html':'UTF-8'}&deleteVirtualProduct=true&updateproduct&token={$token|escape:'html':'UTF-8'}&id_product={$product->id}" class="btn btn-default" onclick="return confirm('{l s='Do you really want to delete this file?' js=1}');"><i class="icon-trash"></i> {l s='Delete this file'}</a>

le mien dans mon module.tpl :

<a href="{$currentIndex|escape:'html':'UTF-8'}&pappDelete=true&updateproduct&token={$token|escape:'html':'UTF-8'}&id_product={$product->id}" class="btn btn-default" onclick="return confirm('{l s='Do you really want to delete this file?' js=1}');"><i class="icon-trash"></i> {l s='Delete this file'}</a>

la seule chose qui change c'est l' appelle de la function : pappDelete=true

 

 

Donc si je modifie le fichier AdminProductsController.php

 

en ajoutant ma fonction :

public function processPappDelete()
    {
    	echo "hello du adminproducts controller";
    	exit;

	}

et en ajoutant aussi  dans function initProcess()

if (Tools::getValue('pappDelete'))
		{
			if ($this->tabAccess['delete'] === '1')
				$this->action = 'pappDelete';
			else
				$this->errors[] = Tools::displayError('You do not have permission to delete this.');
		}

mon bouton fonctionne.

 

le problème c'est que je ne souhaite pas modifier le fichier AdminProductsController.php

mais appeler la fonction qui est dans mon module directement.

Pour cela dans mon module.php j'ai mis ceci :

public function hookActionProductUpdate($params)
    {

                if (Tools::getValue('pappDelete'))
		{
			if ($this->tabAccess['delete'] === '1')
				$this->action = 'pappDelete';
			else
				$this->errors[] = Tools::displayError('You do not have permission to delete this.');
		}
...

puis aussi la fonction :

public function processPappDelete()
    {
    	echo "hello";
    	exit;
    }

malheureusement je n'arrive pas atteindre la fonction de mon module. il appelle toujours la fonction de AdminProductControllers.php

 

avez-vous une idée de comment puis-je faire pour appeler la fonction de mon module?

 

Merci d'avance.

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

merci d'avoir repondu rapidement mais j'avoue etre un peu perdu. Dans mon cas mon module s'appelle pappmod.

Il est situé dans modules/pappmod/pappmod.php

 

Comme tu le précises j'utilise currentIndex ce qui donne en lien du bouton :

http://127.0.0.1/projects/Demoprestashop/admin9977/index.php?controller=AdminProducts&pappDelete=true&updateproduct&token=8dfeeca2952d486b7866187cabad123e&id_product=1

comment dois-je indiquer le chemin du module?

 

index.php?controller=pappmod&pappDelete=true

 

si je fais ca il me dis controller introuvable.

 

ou alors index.php?controller=AdminProducts&module=pappmod&pappDelete=true   ou encore   index.php?module=pappmod&pappDelete=true

 

tous ca se sont des idées car je n'ai plus aucune idée à quoi cela doit ressembler.

 

puis je m'aider d'un helper pour retrouver mon chemin ? j'ai vu un fichier nommer ModuleAdminController.php peut-il m'aider dans mon cas?

 

dois-je definitivement supprimer controller=AdminProducts de mon url ou bien lui ajouter quelque chose?

 

sa à l'air simple mais plus j'y reflechi et plus je m'embrouille. :rolleyes:

 

Merci d'avance.

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

Merci d' avoir pris le temps de répondre , malheureusement avec AdminModules&module_name=

sa ne marche pas non plus . Cela me renvoi dans la page d'admin des modules sans aucun effet.

J'ai réussi à obtenir ce que je voulais en ajoutant du javascript .

Je commence par détailler certaine chose pour bien comprendre  :

 

je suis ici sur le .tpl du module qui est un onglet de la page admin d'un produit et non sur la page de la config du module

 

le bouton en question devient:

<div class="col-lg-5">
<div class="papp btn btn-default" {*onclick="return confirm('{l s='Do you really want to delete this file?' js=1}');"*}><i class="icon-trash"></i> {l s='Delete this file'}</div>

j'ai donc passé onclick en commentaire car il ne sera  plus utile dans ma facon de faire a suivre 

j' ai aussi ajouté class="papp

j'enleve donc la methode get &pappDelete

 

 

mon footer (j'ai pas tout mis, juste ce qui nous interesse) :

<div class="panel-footer">
		<a href="{$link->getAdminLink('AdminProducts')|escape:'html':'UTF-8'}" class="btn btn-default"><i class="process-icon-cancel"></i> {l s='Cancel'}</a>
    
    <input type="hidden" name="pappDeleteFile" id="pappDeleteFile" value=""/>
    
		
		<button type="submit" name="submitAddproduct" class="btn btn-default pull-right"><i class="process-icon-save"></i> {l s='Save'}</button>
		<button type="submit" name="submitAddproductAndStay" id="submitAddproductAndStayPapp" class="btn btn-default pull-right"><i class="process-icon-save"></i> {l s='Save and stay'}</button>
	</div>

ici j' ajoute la ligne input type hidden pour pappDeleteFile
 et donne l'id="submitAddproductAndStayPapp" au button submit

 

 

et j'ajoute le script suivant dans le tpl :

<script type="text/javascript">

 $(document).ready(function(){
 
   $('.col-lg-5').find('.papp').attr('onclick','');

   $('.col-lg-5').find('.papp').on('click',function(e){
     if (confirm('Delete this file?')){
       e.preventDefault();
       var truc = 2;

       $('#pappDeleteFile').val(truc);
       $('#submitAddproductAndStayPapp').trigger('click');
     }else{
       e.preventDefault();
     }
   })
   
 })

</script>

coté pappmod.php

public function hookActionProductUpdate($params)
    {

        if (Tools::getValue('pappDeleteFile'))
        {
    	$this->pappDeleteFile();
	}
...
    }

public function pappDeleteFile()
    {
        echo "bla bla mon code etc";
        exit;
    }    
    

Comme ceci j'arrive à lancer mon code via mon bouton. J'espere avoir été clair et ne rien oublié de l 'explication.

 

En gros, je passe d'une methode get en methode post. C'est dommage car j'aurais preferé la methode via l'url.

 

Encore une fois s'il y a d'autres methodes possible je suis preneur mais je cherche surtout la method get. Alors peut etre en créant un controller dans modules/pappmod/controllers/admin/pappcontroller.php j' y arriverais (pas encore test).

Edited by almeidaz (see edit history)
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...