Récupération données d'un plugin

Bonsoir,

Je suis en train de développer un plugin pour lister des domaines. Celui va chercher des données dans une base MySQL déjà existante.
J'ai fait une requête pdo, j'arrive à bien récupérer les données dans le plugin et à les affichées via le plugin. Je voudrais plutôt les exploiter dans une page statique via un return $result; , mais impossible de récupérer.

Voici le code de la fonction que j'ai fait :
public function Domain() {
	$servername = $this->getParam('servername');
	$username = $this->getParam('username');
	$passwd = $this->getParam('passwd');
	$database = $this->getParam('database');
	try {
		$dsn = 'mysql:host='.$servername.';dbname='.$database;
		$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',);
			$dbh = new PDO($dsn, $username, $passwd, $options);
	} catch ( Exception $e ) {
		echo "Une erreur s'est produite.<br>Reessayez dans quelques instants<br><br>Si le problème continu, contacter le gestionnaire du site.<br>Merci<br><br>Erreur :", $e->getMessage();
		die();	
	}
	$select = $dbh->query("SELECT * FROM domain");
	$select->setFetchMode(PDO::FETCH_OBJ);
	echo '<table>';
		echo '<td></td><td></td><td>OVH</td><td>Gandi</td>';
	echo '<table>';
	while($result = $select->fetch()){
		echo '<table>';
			echo '<tr>';
				echo '<div class="linedomain">';
					echo '<td class="flag"><img src="data/images/domaine/'.$result->name.'.png"></td><td class="flag"><span>.'. $result->name. '</span></td><td><span>' .$result->price_ovh.'</span></td><td><span>' .$result->price_gandi.'</span></td>';
				echo '</div>';
			echo '</tr>';
		echo '</table>';
	}
	$select->closeCursor();
}
Je voudrais éviter d'avoir toute la partie tableau dans le plugin, pour juste avoir la requête.
public function Domain() {
	$servername = $this->getParam('servername');
	$username = $this->getParam('username');
	$passwd = $this->getParam('passwd');
	$database = $this->getParam('database');
	try {
		$dsn = 'mysql:host='.$servername.';dbname='.$database;
		$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',);
			$dbh = new PDO($dsn, $username, $passwd, $options);
	} catch ( Exception $e ) {
		echo "Une erreur s'est produite.<br>Reessayez dans quelques instants<br><br>Si le problème continu, contacter le gestionnaire du site.<br>Merci<br><br>Erreur :", $e->getMessage();
		die();	
	}
	$select = $dbh->query("SELECT * FROM domain");
	$select->setFetchMode(PDO::FETCH_OBJ);
	$result = $select->fetchAll();
	return $result;
	$select->closeCursor();
}
Si quelqu'un a une idée de pourquoi ça ne fonctionne pas?

Merci

Jeremmm

Réponses

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

    Quel code utilises-tu pour l'affichage dans ta page statique.
    Au niveau de ton plugin tout est bon.

    Au passage remplace
    return $result;
        $select->closeCursor();
    
    par
    $select->closeCursor();
        return $result;
    
    sinon la dernière ligne ne sera jamais exécutée à cause du return

    Consultant PluXml

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

  • Je viens de faire un test simple

    public function Domain() {
    return 'test';
    }

    et sur ma page static

    <?
    global $plxShow;
    echo '<div class="grid_2 domain">';
    echo '<p>Domaines</p>';
    $retour = $plxShow->callHook('Domain');
    echo $retour;
    echo '</div>';
    ?>

    mais ça ne passe pas, je ne comprend pas trop pourquoi.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Je viens de tester et tout fonctionne bien
    voilà le code que j'utilise
    <?php
    /**
     * Plugin plxTest
     *
     * @version	1.0
     * @date	xx/xx/xxxx
     * @author	
     **/
    class plxTest extends plxPlugin {
    
    	/**
    	 * Constructeur de la classe
    	 *
    	 * @param	default_lang	langue par défaut
    	 * @return	stdio
    	 * @author	Stephane F
    	 **/
    	public function __construct($default_lang) {
    
            # appel du constructeur de la classe plxPlugin (obligatoire)
            parent::__construct($default_lang);
    
            # déclaration des hooks
            $this->addHook('monHook', 'monHook');
    
        }
    
    	/**
    	 * Méthode de traitement du hook 
    	 *
    	 * @return	stdio
    	 * @author	Stephane F
    	 **/
        public function monHook() {
    			echo 'test1';
    			return 'test2';
        }
    
    }
    ?>
    
    dans la page statique
    <?php 
    $plxShow = plxShow::getInstance();
    $ret = $plxShow->callHook('monHook');
    echo $ret;
    ?>
    
    le résultat:

    test1 est bien affiché par le echo du plugin dans la fonction monHook
    test2 est bien affiché à partir du code utilisé dans la page statique (valeur de retour)

    Consultant PluXml

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

  • C'est fou ça, je viens de faire le test sur le pluxml que j'ai sur un hébergement externe et chez moi avec une install neuve, ça ne passe pas.

    Je n'ai que le test1 qui s'affiche avec le code tu m'as transmis
  • StéphaneStéphane Member, Former PluXml Project Manager
    Quelle version de pluxml utilises-tu ?
    ça ne peut marcher qu'à partir d'une 5.1.4.
    les version précédentes ne gèrent pas le retour de paramètres des hooks

    Consultant PluXml

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

  • ha ok, je comprend mieux alors, je suis en 5.1.3.

    Je viens de faire un test avec la 5.1.5 et ça fonctionne.

    Merci
  • Stéphane a écrit:
    ...
    test1 est bien affiché par le echo du plugin dans la fonction monHook
    test2 est bien affiché à partir du code utilisé dans la page statique (valeur de retour)
    Bonjour Stephane,
    juste une question par curiosité :
    Comment fais-tu pour 'voir' le echo du test1 et ainsi vérifier qu'il se produit correctement ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    tu vas sur la page statique dans la laquelle tu as copié le code
    <?php 
    $plxShow = plxShow::getInstance();
    $ret = $plxShow->callHook('monHook');
    echo $ret;
    ?>
    
    et tu verras affiché à la fois "test1" et "test2"

    test1 est affiché grâce à la ligne echo "test1" de la fonction monHook() et test2 est affiché par la ligne echo $ret; du code mis dans la page statique, où $ret est la variable qui permet de récupérer la valeur de retour de l'appel du hook "monHook".

    Consultant PluXml

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

  • d'ac, merci Stephane ;)
  • j'ai une autre question pour le même plugin que je suis en train de faire.

    Comme indiquer au dessus je vais taper sur une base mysql. Je voudrrai, pour éviter trop de requête vers la base, faire un xml qui stockerait toutes les données et qui serai appelé par le plugin. Ce fichier sera mis à jour tout les jours.

    Est-ce qu'il y a une fonction qui permet de choisir le fichier xml que l'on veut parser en dehors des parameters.xml et infos.xml habituel que l'on trouve dans un plugin?

    Merci
  • StéphaneStéphane Member, Former PluXml Project Manager
    Non. A toi d'écrire les fonctions de lecture/ecriture pour parser le fichier xml de ton choix. Tu lui donnes le nom que tu veux. Pour les fonctions suffit de faire sur le meme modele que celles qui traitent les différents fichiers xml de PluXml

    Consultant PluXml

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

  • Ok, je vais regarder ce qui est fait sur pluxml et l'intégrer au mieux genre fonction dans le core.
  • je m'incruste car j'ai aussi un petit pb de valeur de retour ...

    Le plugin en question ajoute des champs dans l'article.
    Lorsque j'appelle ce champ dans mon template, je prends soin de vérifier d'abord si elle existe.
    le retour se fait bien ... sauf quand le champ est vide.
    s'il n'existe pas j'ai un ?> qui apparaît
    ( @Stépane > je t'en avais déjà parlé pendant la phase de test, mais la soluce ne marche plus )

    C'est très ennuyeux car en testant l'existence de la valeur avant de l'afficher, il y en a toujours une !
  • StéphaneStéphane Member, Former PluXml Project Manager
    Daniel, peux tu me donner un exemple de code qui te pose problème stp

    Consultant PluXml

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

  • j'compile le plugin et te l'envoie ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    danielsan a écrit:
    j'compile le plugin et te l'envoie ?
    oui, ok

    Consultant PluXml

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

  • ( comme je stresse à chaque fois que j'envoie un plugin un Stéphane ! :D :D :D )
  • J'ai eu aussi ce problème de ?> qui s'affiche. Je l'ai esquivé en mettant tous les données dans une variable que je retourne après. Par contre, je n'ai plus un seul echo dans mon plugin (tout du mon pour la partie public.
  • StéphaneStéphane Member, Former PluXml Project Manager
    danielsan a écrit:
    ( comme je stresse à chaque fois que j'envoie un plugin un Stéphane ! :D :D :D )
    MDR !!!

    Consultant PluXml

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

  • ;)

    merci pour les petites corrections, ça marche nickel.
    Le pb majeur (?) venait d'un oubli sur quoi faire dans le cas où il n'y a pas de valeur :D
Connectez-vous ou Inscrivez-vous pour répondre.