web-dev-qa-db-fra.com

Passer des variables d'un widget à un autre widget

J'ai écrit un widget mais je dois utiliser les variables d'un widget dans un autre ... les deux widgets sont dans la même barre latérale dynamique.

Voici ce que j'essaie de faire: j'ai écrit un widget qui ajoute un pied de page au bas d'un widget de curseur d'image. Lorsque j'ajoute le widget de pied de page sous le widget de curseur ... le pied de page apparaît.

Le problème est que le widget de pied de page doit apparaître dans le curseur <div>, et non en dessous. Par exemple:

<div id="this-is-the-slider-widget">
    <div>do slider stuff here</div>
    <div id="I-want-the-footer-widget-to-start-here">
        <div>display footer widget here</div>
    </div><!-- close footer widget-->
</div><!-- close slider widget -->

Toutefois; le widget de pied de page s'affiche juste après la fin du widget de curseur.

<div id="this-is-the-slider-widget">
    <div>do slider image show</div>
</div><!-- cose slider widget -->
<div id="footer-widget">
    <div>display footer here</div>
</div><!-- close footer widget -->

Autrement; le bas css du curseur abaisse le pied de page et gâche tout. Si j'ajuste le css afin que le pied de page et le curseur aient une marge inférieure et un remplissage de zéro, le contenu situé sous la bannière n'a aucun espacement lorsque le widget de pied de page n'est pas présent.

Voici ce que je veux qu'il ressemble, flush:

http://i50.tinypic.com/15ogq41.jpg (désolé, vous n'avez pas assez de point pour publier une image)

... mais les widgets sont exécutés dans l'ordre alors voici ce qui se passe:

http://i45.tinypic.com/2va0f48.jpg

Je pourrais résoudre le problème en utilisant deux classes CSS et vérifier si le widget existe et exécuter .yes-widget {} ou .no-widget {} mais je pense que c'est beaucoup plus propre de pouvoir simplement passer les variables d'un widget à un autre.

Comment j'ai obtenu la première image à fonctionner (mais aucune des variables du widget pied de page n'est passée) ... J'ai inclus le pied de page html dans le widget du curseur comme ceci:

<div id="this-is-the-slider-widget">
    <div>do slider stuff here</div>

    <div id="display-footer-here>
        <?php global $ct_on, $child_dir;
            if($ct_on && file_exists($child_dir.'/library/includes/yif-top-banner-section-footer.php')) {
                include_once ($child_dir.'/library/includes/yif-top-banner-section-footer.php');
         } ?>
    </div><!-- end footer widget -->
</div><!-- end slider widget -->

Ceci est le pied de page html qui est inclus:

<div class="top-banner-section-footer">
    <div class="top-banner-section-footer-wrapper">
        <a href="<?php echo $fltitle;?>" class="footerbox left-box no-underline">
            <h3><?php echo $fltitle;?></h3>
            <p><?php echo $fltext;?></p>
        </a>

        <a href="<?php echo $fmlink;?>" class="footerbox middle-box no-underline">
            <h3><?php echo $fmtitle;?></h3>
            <p><?php echo $fmtext;?></p>
        </a>

        <a href="<?php echo $frlink;?>" class="footerbox right-box no-underline">
            <h3><?php echo $frtitle;?></h3>
            <p><?php echo $frtext;?></p>
        </a>
    </div><!-- /.top-banner-section-footer-wrapper -->
</div><!-- /.top-banner-section-footer -->

À moins que vous n'ayez une meilleure méthode, incluez le pied de page html là où je veux que le pied de page s'exécute ... Comment puis-je obtenir les variables du widget de pied de page dans le fichier html de pied de page inclus?

Par exemple, le widget de pied de page enregistre cette variable: $ frlink. Comment puis-je passer $ frlink au fichier inclus?

J'ai essayé GLOBAL mais je ne suis pas sûr de la fonction du widget curseur à ajouter. Par exemple, la fonction qui a le constructeur de widget, où elle imprime le widget, enregistre le widget, le formulaire de widget dans le backend, etc.

2
Jason

Vous n'avez pas besoin de le rendre global.

Si vous incluez un fichier à partir de la portée des fonctions, toutes les variables que vous avez définies dans cette fonction (avant ce point) seront également exposées dans le fichier inclus.

Mais comme la variable dont vous parlez représente l’état de l’inclusion du fichier de pied de page (si j’ai bien compris), vous pouvez en faire une variable statique :

class You_Widget{

    protected static
      $footerIncluded = false;

    public function widget(){

      // this will only run once
      if(!self::$footerIncluded){        
        include __DIR__ . '/footer.php';
        self::$footerIncluded = true;
      }

    }

}
1
onetrickpony