t-yama

mtタグ内でのPHP使用につきまして

0

うまくいかないので、ご質問させていただきます。
カスタムフィールドで、
・color1
・color2
・color3
とある場合に、

<mt:Entries>
<?php for ( $i = 1; $i <= 3; $i++ ) {
<mt:If tag="color$i"><mt:color$i></mt:If>
};
?>
</mt:Entries>

という風にfor文で繰り返したいのですが、タグがないというエラーが出ます。
解決方法はございますでしょうか?

宜しくお願いいたします。

返信(9)

| 返信する
  • >t-yamaさん
    こんにちは。

    テンプレートタグが処理されるのは、再構築の時点です。
    一方、PHPが処理されるのは、出力後のページにアクセスがあった時点です。

    そのため、お書きになったような方法では、正しく動作しません。
    再構築の時点では、PHPのコードはただの文字列でしかないので、「MTColor$i」というテンプレートタグを再構築しようとすることになり、エラーになります。

    PHPを使わないで、プラグインで解決する方法ならあります。
    それについては、明日の当方のブログの記事にしたいと思います。

  • 藤本様

    いつもお世話になっております。

    プラグインでの解決法、楽しみにしております!

    宜しくお願いいたします。

    • >t-yamaさん
      こんにちは。

      ブログに記事を書きました。

      http://www.h-fj.com/blog/archives/2012/11/13-163510.php

      • 藤本様

        早速の記事ありがとうございます。

        ちなみに条件分岐を行いたいのですが、記事に記載の制限の通り難しいのでしょうか?

        実現したいイメージは下記の通りです。

        <mt:For var="x" from="1" to="3">
        <mt:If tag="$tagname">
          <th><mt:SetVarBlock name="tagname">color<$mt:GetVar name="x"$></mt:SetVarBlock></th>
          <$mt:TagExecFunction tagname="$tagname"$>
        </mt:If>
        </mt:For>

        ※ちなみにmt:Forのあとは、varですかね?

        宜しくお願いいたします。

        • >t-yamaさん
          こんにちは。

          あげられたテンプレートだと、変数に値を代入する前に条件判断しているので、正しく動作しません。
          前後のテンプレートの内容が分からないので推測になりますが、以下のように変えれば良いと思います。

          <mt:For var="x" from="1" to="3">
          <mt:SetVarBlock name="tagname">color<$mt:GetVar name="x"$></mt:SetVarBlock>
          <mt:If tag="$tagname">
            <th><$mt:GetVar name="tagname"$></th>
            <td><$mt:TagExecFunction tagname="$tagname"$></td>
          </mt:If>
          </mt:For>
          

          なお、「条件判断が正しく動作しない」というのは、「MTTagExecBlock tagname="if"」のような書き方をすると正しく動作しない、ということです。

          P.S.
          varモディファイアについてご指摘いただき、ありがとうございました。
          記事を修正しました。

  • 多分、以下でいけるんじゃないかと。

    <mt:Entries>
    <MTFor var="x" from="1" to="3">
    <MTSetVarBlock name="loopTags">&lt;mt:color<$MTVar name="x"$>&gt;</MTSetVarBlock>
    <MTVar name="loopTags" decode_html="1" eval="1">
    </MTFor>
    </mt:Entries>
  • oscar様

    ありがとうございます。
    プラグインとともに試させていただきます!

返信する


カテゴリグループ

OpenID対応しています OpenIDについて