web-dev-qa-db-ja.com

あるウィジェットから別のウィジェットに変数を渡す

ウィジェットを書きましたが、あるウィジェットの変数を別のウィジェットで使用する必要があります。両方のウィジェットは同じ動的サイドバーにあります。

これが私がやろうとしていることです:私は画像スライダーウィジェットの下部にフッターを追加するウィジェットを書きました。スライダーウィジェットの下にフッターウィジェットを追加すると、フッターが表示されます。

問題は、フッターウィジェットがスライダー<div>セット内に表示される必要があり、その下に表示されないことです。例えば:

<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 -->

しかしながら;フッターウィジェットは、スライダーウィジェットが終了した直後に表示されます。

<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 -->

さもないと;スライダーの一番下のcssはフッターを押し下げ、物事を混乱させます。フッターとスライダーの下部余白と余白がゼロになるようにCSSを調整すると、フッターウィジェットが表示されていないときにバナーの下のコンテンツにスペースがなくなります。

これは私が見たい、フラッシュする方法です。

http://i50.tinypic.com/15ogq41.jpg (申し訳ありませんが、画像を投稿できません)

...しかし、ウィジェットは順番に実行されるので、これが起こります。

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

私は2つのcssクラスを使用してウィジェットが存在するかどうかを確認して.yes-widget {}または.no-widget {}を実行することで問題を解決できましたが、1つのウィジェットから変数を渡すことができるほうがずっときれいです別の人に。

最初の画像がどのように動作するようにしたか(ただし、フッターウィジェットを構成する変数はどれも渡されません)...私は次のようにスライダーのウィジェット内にフッターHTMLを含めました。

<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 -->

これは含まれているフッターHTMLです:

<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 -->

より良い方法がないのなら、フッターを実行したい場所にフッターのHTMLをインクルードしてください。インクルードされたフッターのHTMLファイルでフッタウィジェットの変数を処理するにはどうすればよいですか。

たとえば、フッターウィジェットはこの変数を保存します:$ frlink。インクルードファイルに$ frlinkを渡すにはどうすればいいですか?

私はGLOBALを試しましたが、それを追加するためにスライダーウィジェットのどの機能がわからない。たとえば、ウィジェットコンストラクタを持つ関数は、ウィジェットを印刷したり、ウィジェットやウィジェットフォームをバックエンドに保存したりします。

2
Jason

グローバルにする必要はありません。

関数のスコープ内からファイルをインクルードすると、その時点でその関数で定義した変数はインクルードファイルにも表示されます。

しかし、あなたが話している変数はフッタファイルのインクルードの状態を表しているので(私が正しく理解していれば)、それを 静的変数にすることができます

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