We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 15497
    • 117 Posts
    テンプレート変数等の値により表示を制御(ON/OFF)するためのスニペットを作ってみました。

    テンプレートエンジンによくある、例えば、Smarty なら {if}~{/if}、HTML_Template_Flexy なら {if:}~{end:} のような、 変数の値によって、表示したり、表示しなかったりを切り替える、そういった機能が欲しくて作りました。(どちらかと言うと、HTML_Template_Flexy の {if:}~{end:} に近いイメージです。)

    例えば、こんな使い方をイメージしています。
    /* 要約(introtext)が入力されていたら見出しとともに表示する。 */
    
    [!StartIf? &var=`introtext`!]
    <h2>要約</h2>
    [*introtext*]
    [!EndIf!]

    /* 長いタイトル(longtitle)が入力されていなければ、代わりにタイトル(pagetitle)を表示する。 */
    
    [*longtitle*]
    [!StartIf? &not=`1` &var=`longtitle`!][*pagetitle*][!EndIf!]


    一応、こちらに簡単な説明ページも用意しました。
    http://www.hikidas.com/hikidas/modx_resource/StartIf_EndIf.php

    実装としては、MODxには、スニペットからページの内容を制御する方法が無いようでしたので、 ちょっと裏ワザっぽいかも知れませんし、
    まだまだ、よくわかっていない部分もありますので、ご意見・ご感想等いただけたらありがたいです。
      ★日本公式フォーラム2009年9月1日本格始動!★
      http://modxcms-jp.com/bb/

      ▼ウェブ屋のCMS→modxヒキダス流(備忘録)
      http://d.hatena.ne.jp/hikidas_ikeda/
      ▼制作済みHTMLページをmodxで更新するデモ
      http://www.hikidas.com/hikidas/modx_document/modx_demo_osc2009kansai.php
      • 15497
      • 117 Posts
      読み返してみると、けっこう難しいタイトルだったので、変更しました。
      「条件分岐」→「テンプレート変数の入力有無等で表示を切り替える」
        ★日本公式フォーラム2009年9月1日本格始動!★
        http://modxcms-jp.com/bb/

        ▼ウェブ屋のCMS→modxヒキダス流(備忘録)
        http://d.hatena.ne.jp/hikidas_ikeda/
        ▼制作済みHTMLページをmodxで更新するデモ
        http://www.hikidas.com/hikidas/modx_document/modx_demo_osc2009kansai.php
        • 19592
        • 56 Posts
        kazuikeさん こんにちは。

        これは便利ですね!
        早速使わせていただきました laugh

        データ未入力のテンプレート変数の非表示切り替えは、ウィジェットのHTML Generic Tagを使っていましたが、<h2>要約</h2>のような見出しも一緒に非表示にしたい場合は、テンプレート変数を入れ子にしたりと、かなりややこしい方法を使ってました…。

        これを使えば、簡単に出来るし、テンプレートに記述するので見通しがよくて、更新や修正が楽になります。
        ありがとうございます smiley


        一つ質問なんですが、このスニペットで一つのテンプレート変数の値によって、テンプレート上の複数の場所の表示を切り替えることは可能でしょうか?

        例えば
        テンプレート変数:tv1 、入力タイプをListbox、値はA,B,C,未入力の4種類として
        値Aのときは
        場所1:見出し文言+テキストAを表示
        場所2:Aに対応した画像を表示

        値Bのときは
        場所1:見出し文言+テキストBを表示
        場所2:Bに対応した画像を表示

        値未入力のときは、どちらも表示しない

        というような使い方を考えています。
        現在は場所1用、場所2用に2つのテンプレート変数を使っていますが、1つの変数で切り替えられると楽だなぁと思いまして^^;
          • 15497
          • 117 Posts
          min-oさん こんにちは
          一つ質問なんですが、このスニペットで一つのテンプレート変数の値によって、テンプレート上の複数の場所の表示を切り替えることは可能でしょうか?

          スニペット側としては、同じ変数を何度指定してもらっても構いません。
          大いに使ってください。 smiley

          ただし、他のスニペットでも同じだと思いますが、
          1ページの中に、同じスニペット(パラメータまで同じもの)を2回以上指定しても、
          1回目の結果が全てにコピーされてしまいます。(MODxの仕様なのか、バグなのか…)

          ですので、ダミーでパラメータをつける等して、1回目、2回目、…を違うスニペットとして扱ってもらう必要があります。

          例えば、以下のような感じです。(hogeの部分はdummyでも何でも構いません。あくまで例ですので…)
          例1)番号を振る
          
          [!StartIf? &var=`tv1` &value=`A` &hoge=`1`!]
          見出し文言 テキストA
          [!EndIf? &hoge=`A1`!]
          [!StartIf? &var=`tv1` &value=`B` &hoge=`1`!]
          見出し文言 テキストB
          [!EndIf? &hoge=`B1`!]
          …
          [!StartIf? &var=`tv1` &value=`A` &hoge=`2`!]
          画像A
          [!EndIf? &hoge=`A2`!]
          [!StartIf? &var=`tv1` &value=`B` &hoge=`2`!]
          画像B
          [!EndIf? &hoge=`B2`!]
          …
          


          例2)意味や目的をつける
          
          [!StartIf? &var=`tv1` &value=`A` &hoge=`A_text`!]
          見出し文言 テキストA
          [!EndIf? &hoge=`A_text`!]
          [!StartIf? &var=`tv1` &value=`B` &hoge=`B_text`!]
          見出し文言 テキストB
          [!EndIf? &hoge=`B_text`!]
          …
          [!StartIf? &var=`tv1` &value=`A` &hoge=`A_image`!]
          画像A
          [!EndIf? &hoge=`A_image`!]
          [!StartIf? &var=`tv1` &value=`B` &hoge=`B_image`!]
          画像B
          [!EndIf? &hoge=`B_image`!]
          …
          


          ちなみに、パラメータを変えても、スニペット名が同じなら、
          登録されているスニペットをDBから取り出す処理は1回だけですので、処理の負荷はほとんど変わらないはずです。
          (このあたりは、かしこく作ってあると思いますが…)

            ★日本公式フォーラム2009年9月1日本格始動!★
            http://modxcms-jp.com/bb/

            ▼ウェブ屋のCMS→modxヒキダス流(備忘録)
            http://d.hatena.ne.jp/hikidas_ikeda/
            ▼制作済みHTMLページをmodxで更新するデモ
            http://www.hikidas.com/hikidas/modx_document/modx_demo_osc2009kansai.php
            • 23276
            • 85 Posts
            こんばんは。
            条件分岐したい場合に便利なスニペットですね laugh
            他のCMSなどにも似た書式で、見た目もすっきりわかりやすいのがよさそうです!
            次回から使わせていただきます grin

            スニペットは2回目以降は結果がコピーされるだけなんですね…知りませんでした shocked
            ページの内容を制御するのは、プラグインの場合にはできたと思います。
              • 15497
              • 117 Posts
              Phize さん こんばんは
              ページの内容を制御するのは、プラグインの場合にはできたと思います。
              ちょっと、プラグインまで手を伸ばす余裕がなくて… sad

              ページのデザインはデザイナーがやるので、チャンクとかに分けてしまうと、後が大変で、
              とりあえず、これができれば、クライアントの要求は満たせるという、そういうところで作ってみました。

              時間ができたら、プラグインにも挑戦してみたいと思います。
                ★日本公式フォーラム2009年9月1日本格始動!★
                http://modxcms-jp.com/bb/

                ▼ウェブ屋のCMS→modxヒキダス流(備忘録)
                http://d.hatena.ne.jp/hikidas_ikeda/
                ▼制作済みHTMLページをmodxで更新するデモ
                http://www.hikidas.com/hikidas/modx_document/modx_demo_osc2009kansai.php
                • 1144
                • 7 Posts
                こんにちは、

                [!StartIf? &var=`comm`!]
                <div class="iladycomm">[+comm+]</div>
                [!EndIf!]

                こういう使い方にしたときは機能しないようなのですが、

                [!StartIf? &var=`comm`!]
                <div class="iladycomm">[*comm*]</div>
                [!EndIf!]

                でないとだめなんでしょうか huh
                  • 15497
                  • 117 Posts
                  ここで、条件として考えられることは、
                  1.varに指定する名前は、テンプレート変数の名前であること
                  2.スニペットを使える箇所で使っていること(当然ですが)
                  この条件が、どちらかでも欠けていれば使えませんし、
                  両方を満たすのであれば、おそらく使えると思います。

                  プレースホルダをどこで何に使っているのかわかりませんので、お答えできるのはこれぐらいです。
                    ★日本公式フォーラム2009年9月1日本格始動!★
                    http://modxcms-jp.com/bb/

                    ▼ウェブ屋のCMS→modxヒキダス流(備忘録)
                    http://d.hatena.ne.jp/hikidas_ikeda/
                    ▼制作済みHTMLページをmodxで更新するデモ
                    http://www.hikidas.com/hikidas/modx_document/modx_demo_osc2009kansai.php
                    • 15497
                    • 117 Posts
                    テンプレート変数の入力有無等で表示を切り替えるスニペット: 「StartIf & EndIf」ですが、
                    複数のテンプレート変数に対応(OR条件)しました。(バージョン1.01)

                    つまり、複数のテンプレート変数を指定して、そのどれかに入力があった場合に、表示をONにする等ができます。

                    例えば、変数「block1」「block2」のどちらかが入力されていたら見出しを表示する。

                    [!StartIf? &var=`block1,block2`!]
                    <h2>見出し</h2>
                    [!EndIf &var=`block1,block2`!]
                    [*block1*]
                    [*block2*]
                    等のように使えます。

                    ちなみに、AND条件にしたいときは、ネストするという方法で使えます。
                    例えば、変数「block1」「block2」の両方が入力されていたら区切り線を表示する。

                    [*block1*]
                    [!StartIf? &var=`block1`!][!StartIf? &var=`block2`!]
                    <hr>
                    [!EndIf &var=`block2`!][!EndIf &var=`block1`!]
                    [*block2*]

                    こちらのページも更新してあります。
                    http://www.hikidas.com/hikidas/modx_resource/StartIf_EndIf.php
                      ★日本公式フォーラム2009年9月1日本格始動!★
                      http://modxcms-jp.com/bb/

                      ▼ウェブ屋のCMS→modxヒキダス流(備忘録)
                      http://d.hatena.ne.jp/hikidas_ikeda/
                      ▼制作済みHTMLページをmodxで更新するデモ
                      http://www.hikidas.com/hikidas/modx_document/modx_demo_osc2009kansai.php