Erreur formulaire

légumelégume Member
Bonjour, j'ai un petit soucis.

Lorsque je crée mon formulaire dans mon plugin il me met l'erreur :

Fatal error: Class 'plxToken' not found in /

Pourtant j'utilise bien
[== Indéfini ==]
plxToken::validateFormToken($_POST);

pour le contrôle du token du formulaire et
[== Indéfini ==]
<?php echo plxToken::getTokenPostMethod() ?>
			<input type="submit" name="submit" value="Valider" />
sur mon bouton qui enregistre les donnée du formulaire.

Je place ce code dans le fichier principal du plugin et ce formulaire sera afficher dans la partie public du site.

Quand je met mon formulaire dans le fichier config tout fonctionne ce qui est très bizarre.

Merci d'avance

Réponses

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

    le fichier config.php est un fichier géré par le moteur des plugins de PluXml. La classe plxToken est donc chargée automatiqement par PluXml. Si ton formulaire est placé dans un autre fichier (donc non connu par le moteur de Plugins), il faut que tu fasses toi meme l'include du fichier class.plx.token.php pour que ces instructions fonctionnent

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • J'ai fais ce code :
    [== Indéfini ==]
    include(dirname(__FILE__).'/class.plx.token.php');
    
    mais ça me redonne l'erreur.

    Je te donne tout le code qui se trouve au-dessus du formulaire :
    [== Indéfini ==]
    <?php 
    
    
    include(dirname(__FILE__).'/class.plx.token.php');
    
    
    
    class BonAchat extends plxPlugin {
    	
    
        public function __construct($default_lang){
        # Appel du constructeur de la classe plxPlugin (obligatoire)
        parent::__construct($default_lang);
    
    
        # Pour accéder à une page de configuration
        $this->setConfigProfil(PROFIL_ADMIN,PROFIL_MANAGER);
    
    
        # Déclaration des hooks
    
        $this->addHook('BonAchat', 'BonAchat');
        $this->addHook('ThemeEndHead', 'ThemeEndHead');
        $this->addHook('ThemeEndBody', 'ThemeEndBody');
        $this->addHook('AdminTopEndHead', 'AdminTopEndHead');
    
    
        }
    
        public function AdminTopEndHead() { ?>
            <link rel="stylesheet" href="<?php echo PLX_PLUGINS ?>BonAchat/app/BonAchat-admin.css">
        <?php }
    
    
        public function ThemeEndHead() { ?>
               <link rel="stylesheet" href="<?php echo PLX_PLUGINS ?>BonAchat/app/BonAchat.min.css">
        <?php }
    	
    	
        public function BonAchat(){ 
    
    	plxToken::validateFormToken($_POST);
    $nbbon = floor(sizeof($plxPlugin->getParams())/4);
    	
    	
    if(!empty($_POST)) {
    if (!empty($_POST['bon-new']) AND !empty($_POST['name-new']) AND !empty($_POST['prenom-new']) AND !empty($_POST['telephone-new']) AND !empty($_POST['email-new']) 
    AND !empty($_POST['pays-new']) AND !empty($_POST['nameC-new']) AND !empty($_POST['prenomC-new']) AND !empty($_POST['telephoneC-new']))  {
    
            # création d'un nouveau evenement
            $newbon= $nbbon + 1;
    		$plxPlugin->setParam('date'.$newbon, plxUtils::strCheck($_POST['date-new']), 'cdata');
    		$plxPlugin->setParam('bon'.$newbon, plxUtils::strCheck($_POST['bon-new']), 'cdata');
            $plxPlugin->setParam('name'.$newbon, plxUtils::strCheck($_POST['name-new']), 'cdata');
    		$plxPlugin->setParam('code'.$newbon, plxUtils::strCheck($_POST['code-new']), 'cdata');
            $plxPlugin->saveParams();
            
    	}else{
            
            # Mise à jour des reponses existants
            for($i=1; $i<=$nbbon; $i++) {
                if(
    				(
    						!isset($_POST['delete'.$i])
    					|| 	($_POST['delete'.$i] != "1")
    				)
    				AND !empty($_POST['bon'.$i])
    			){ 
    
                    
                    #mise a jour du question et reponse
                    $plxPlugin->setParam('date'.$i, plxUtils::strCheck($_POST['date'.$i]), 'cdata');
                    $plxPlugin->setParam('bon'.$i, plxUtils::strCheck($_POST['bon'.$i]), 'cdata');
                    $plxPlugin->setParam('name'.$i, plxUtils::strCheck($_POST['name'.$i]), 'cdata');
    				$plxPlugin->setParam('code'.$i, plxUtils::strCheck($_POST['code'.$i]), 'cdata');
                    $plxPlugin->saveParams();
                
                }elseif(isset($_POST['delete'.$i]) && ($_POST['delete'.$i] == "1")){
                    $plxPlugin->setParam('date'.$i, '', '');
                    $plxPlugin->setParam('bon'.$i, '', '');
                    $plxPlugin->setParam('name'.$i, '', '');
                    $plxPlugin->setParam('code'.$i, '', '');				
                    $plxPlugin->saveParams();
                }
            } // fin  for($i=1; $i<=$nbevents; $i++) {
        }
    
    }
    $nbbon = floor(sizeof($plxPlugin->getParams())/4);
    
    	?>
    

    Merci pour ta réponse ;)
  • StéphaneStéphane Member, Former PluXml Project Manager
    légume a écrit:
    [== Indéfini ==]
    include(dirname(__FILE__).'/class.plx.token.php');
    

    veux dire que l'inclusion se fait par rapport au fichier qui contient l'instruction
    or class.plx.token.php est dans le dossier /core/lib/
    tel que c'est écrit le chemin n'est pas bon, car par rapport à ton plugin c'est dans ../../core/lib/

    donc fait plutôt
    include PLX_CORE.'class.plx.token.php';
    

    apres faut peut etre adapter en fonction d'où est placé ton fichier pour avoir le bon chemin

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Merci encore ;)

    Mais ça ne fonctionne pas mon fichier est dans plugins/BonAchat/BonAchat.php
  • A moins que tu parle du fichier class.plx.token.php qui lui est dans le fichier lib du fichier core de Pluxml
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Pour ton plugin BonAchat, tu dois avoir dans le dossier plugins/BonAchat/, les fichiers suivants :
    [list=*]
    [*]BonAchat.php, qui contient la class de ton plugin extends de plxPlugin[/*]
    [*]config.php qui contient ton formulaire[/*]
    [*]infos.xml[/*]
    [*]....[/*]
    [/list]

    et dans ton fichier config.php du gères ton formulaire :
    [== PHP ==]
    <?php
    if(! defined('PLX_ROOT') { exit; }
    
    plxToken::validateFormToken($_POST);
    
    if(! empty($_POST)) {
       // on sauvegarde les paramètres avec $plxPlugin->setParam($paramNom, $param
      foreach($_POST as $nom=>$valeur) {
         // $type à choisir entre string, numeric, cdata selon $nom
        $plxPlugin->setParam($nom, $valeur, $type);
      }
      $plxPlugin->saveParams();
      header('Location: parametres_plugin?p='.$plugin);
      exit;
    }
    <form id="form_<?php echo $plugin; ?>" method="post">
          <!-- autant de fois qu'il y a de noms -->
         <p>
             <label for="id_nom1">nom1</label><input id="id_nom1" name="nom1" type="text" value="<?php echo $plxPlugin->getParam("nom1"); />
        </p>
        <!-- et pour soumettre le formulaire -->
        <p>
           <?php echo plxToken::getTokenPostMethod(); ?>
          <input type="submit" />
       </p>
    </form>
    ?>
    
    Il n'y pas d'include à ajouter si tu as mis tes fichiers au bon endroit

    Cliques ici pour lire le manuel
  • Le formulaire je souhaite l'afficher en public sur le site c'est pour ça que je voulais le mettre dans le fichier extends de plxPlugin.

    Si je le met dans le fichier config comment le mettre dans la partie public du site.

    Encore merci de vos réponses ;)
  • StéphaneStéphane Member, Former PluXml Project Manager
    Regarde comment fait est le plugin plxMyContact.
    ça te donnera un exemple pour mettre un formulaire coté public

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • J'ai regarder le plugin plxMyContact je voie que le formulaire est crée et gérer via le fichier form.contact.php mais je ne voie pas comment tu fais pour l'afficher dans la partie public si quelqu'un peut m'éclairer svp.
  • StéphaneStéphane Member, Former PluXml Project Manager
    il faut le code de la methode plxShowConstruct , plxMotorPreChauffageBegin et plxShowStaticListEnd

    plxShowConstruct et plxMotorPreChauffageBegin permettent de créer dynamiquement une entrée dans le tableau $plxMotor->aStats pour faire croire qu'on a une page statique (comme si elle avait été créée par l'interface de gestion des pages statiques dans l'admin) et d'afficher la page quand on va cliquer sur le menu

    plxShowStaticListEnd affiche le menu de la page de contact coté visiteur à coté des menus des pages statiques

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    @Legume,

    Je ne suis pas sûr de bien comprendre ta demande :
    [list=*]
    [*]Propose tu des bons d'achat aux visiteurs de ton site[/*]
    [*]ou les visiteurs de ton site demandent le remboursement de bon d'achats[/*]
    [/list]
  • Les visiteurs pourront sur le site directement acheter des bons d'achat qui pourront être utiliser en magasin, d'où l'utilisation d'un formulaire sur le site.
  • Quelqu'un aurais une idée ?
Connectez-vous ou Inscrivez-vous pour répondre.