Plugin et redirection vers form

cfdevcfdev Member
Salut à tous,
j'ai besoin d'un petit coup de main :)

Avant j'avais un seul fichier form donc pas de soucis pour la redirection de ma vue.
Je suppose que tout se passe dans la fonction de préchauff (Steph dis moi si je me trompe)
[== PHP ==]
...
public $url = "mcatalogue";
...
	public function plxMotorPreChauffageBegin($template="static.php") {

		$template = $this->template==''?'static.php':$this->template;
		$string= '
			if ($this->get && preg_match("#^'.$this->url.'/?#",$this->get, $capture)) {
				$prefix = str_repeat("../", substr_count(trim(PLX_ROOT.$this->aConf["racine_statiques"], "/"), "/"));
				$this->mode = "'.$this->url.'";
				$this->cible = $prefix.PLX_PLUGINS."'.get_class($this).'/form";
				$this->template = "'.$template.'";
				return true;
			}
		';
		echo "<?php ".$string." ?>";

	}
Donc si j'ai quelque chose dans l'url avec http//monsitedefou/mcatalogue/xxxx le plugin va piocher dans mon fichier form.mcatalogue.php ?!


Seulement maintenant j'ai besoin de différencier 2 types d'url:
[list=*]
[*]http//monsitedefou/mcatalogue/xxxx[/*]
[*]http//monsitedefou/mcatalogue/xxxx/yyyy[/*]
[/list]

Et en fonction rediriger soit vers form.category.php soit form.product.php. Une idée ?

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut

    Voici la solution

    code du plugin, fichier mcatalogue.php
    <?php
    
    class mcatalogue extends plxPlugin {
    	
    	public $url = "mcatalogue";
    	public $template = "";
    
    	/**
    	 * Constructeur de la classe
    	 *
    	 * @param	default_lang	langue par défaut utilisée par PluXml
    	 * @return	null
    	 * @author	Stephane F
    	 **/
    	public function __construct($default_lang) {
    
    		# Appel du constructeur de la classe plxPlugin (obligatoire)
    		parent::__construct($default_lang);
    		# init variables
    		
    		# déclaration du hook
    		$this->addHook('plxShowConstruct', 'plxShowConstruct');		
    		$this->addHook('plxMotorPreChauffageBegin', 'plxMotorPreChauffageBegin');
    	}
    	
    	public function plxShowConstruct($page) {
    
    		# infos sur la page statique
    		$string  = "
    		if(\$this->plxMotor->mode=='".$this->url."') {";
    		$string .= "	\$array = array();";
    		$string .= "	\$array[\$this->plxMotor->cible] = array(
    			'name'		=> '".addslashes($this->url)."',
    			'menu'		=> '',
    			'url'		=> '".$this->url."',
    			'readable'	=> 1,
    			'active'	=> 1,
    			'group'		=> ''
    		);";
    		$string .= "	\$this->plxMotor->aStats = array_merge(\$this->plxMotor->aStats, \$array);";
    		$string .= "}";
    		echo "<?php ".$string." ?>";
    	}	
    
    	public function plxMotorPreChauffageBegin() {
    		
    		# regex alternative: [^a-z_\-0-9]/i
    		$template = $this->template==''?'static.php':$this->template;
    		$string= '
    			if ($this->get && preg_match("#^'.$this->url.'/[\w\-]+/?$#",$this->get, $capture)) {
    				$prefix = str_repeat("../", substr_count(trim(PLX_ROOT.$this->aConf["racine_statiques"], "/"), "/"));
    				$this->mode = "'.$this->url.'";
    				$this->cible = $prefix.PLX_PLUGINS."'.get_class($this).'/form.category";
    				$this->template = "'.$template.'";
    				return true;
    			}
    			if ($this->get && preg_match("#^'.$this->url.'/[\w\-]+/[\w\-]+/?$#",$this->get, $capture)) {
    				$prefix = str_repeat("../", substr_count(trim(PLX_ROOT.$this->aConf["racine_statiques"], "/"), "/"));
    				$this->mode = "'.$this->url.'";
    				$this->cible = $prefix.PLX_PLUGINS."'.get_class($this).'/form.product";
    				$this->template = "'.$template.'";
    				return true;
    			}			
    		';
    		echo "<?php ".$string." ?>";
    
    	}	
    }
    ?>
    

    Ensuite il faut les 2 fichiers pour traiter les catégories et produits

    /plugins/mcatalogue/form.category.mcatalogue.php
    /plugins/mcatalogue/form.product.mcatalogue.php

    bien respecter le nom des fichiers

    il ne te reste plus qu'à mettre dedans le code pour gérer categories ou produits

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • cfdevcfdev Member
    Super merci Stéphane! comme tjs trop fort!
    c'est bien ce que je pensais, il fallait rajouter une condition dans la fonction de prechauff et je dois dire que le regexp m'ennuyais un peu ;)

    Dès que j'ai 5min il faudra que je fasse du debug pour bien comprendre cette fonction, car pour la réalisation des routes d'un plugin elle me parait indispensable ... par exemple si on veut rajouter d'autres niveaux http//monsitedefou/mcatalogue/xxxx/yyyy/zzzzz ..etc
  • StéphaneStéphane Member, Former PluXml Project Manager
    si tu veux rajouter d'autres niveau, il faut complèter le regexp pour découper et identifier chaque partie de l'url
    if ($this->get && preg_match("#^'.$this->url.'/[\w\-]+/[\w\-]+/?$#",$this->get, $capture)) {
    

    ici j'ai utilisé ce regexp: /[\w\-]+/[\w\-]+/?$
    ce qui revient à identifier les caractères alpha-num dans la forme xxxx/yyyy

    pour un autre niveau: /[\w\-]+/[\w\-]+/[\w\-]+/?$
    dans la forme: xxx/yyyy/zzzz

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

Connectez-vous ou Inscrivez-vous pour répondre.