ページ 11

DittoのPHxでプレースホルダが使えない件  【解決済み】

Posted: 2014年6月19日(木) 16:30
by kazuike
-----
MODXのバージョン:1.0.13J-r1
PHPのバージョン:5.3.28
-----

その昔は、Dittoの出力パターンの中で、

コード: 全て選択

[+flag:is=`1`:then=`[+text_a+]`:else=`[+text_b+]`+]
のように、
PHxの中でも、プレースホルダが自由に使えたように思いますが、
最近(と言ってもけっこう経ちますが)は、これが使えたり、使えなかったりします。
参考)http://forum.modx.jp/viewtopic.php?f=7&t=1215

今までは、なんとかサイトの仕様を決める段階で、このようなプレースホルダの切替を使わないように回避できていたのですが、
今現在、どうにもこのような切替を使わないと表現できないという、窮地に追い込まれています。

出力パターンの中で使用するプレースホルダについては、
PHxのカスタムモディファイアの中で「$this->placeholders」が使えるということが分かりましたので、
以下のようなPHxのカスタムモディファイアを作って急場をしのぎました。

コード: 全て選択

if ($this->placeholders['flag']=='1') {
	$output = $this->placeholders['text_a'];
} else {
	$output = $this->placeholders['text_b'];
}
return $output;
ただし、このやり方だと、実際には表示しないようなプレースホルダも、Dittoの出力パターンに含める必要があり、

コード: 全て選択

<span style="display:none;">[+text_a+][+text_b+]</span>
のようにして、
無理やりブラウザの画面上には出ないようにしていますが、
HTMLソースから見れる状態になってしまっています。

何かこれに代わる良い方法がありましたら、ご教示いただけませんでしょうか?
ちょっとしたヒントでも構いません。よろしくお願いいたします。

Re: DittoのPHxでプレースホルダが使えない件

Posted: 2014年6月19日(木) 18:05
by yama
http://mng.demo.modx.jp/
サンプルを作っていただくことはできますか?Ditto内蔵のPHxをなんとかするのは難しいですが、コアの機能をうまく利用できそうであれば試してみます。

Re: DittoのPHxでプレースホルダが使えない件

Posted: 2014年6月19日(木) 22:54
by kazuike
yamaさん
ありがとうございます。

とりあえず、サンプルを作りました。
http://140619223906-5296.evo.demo.modx.jp/manager/

「プレースホルダを直接使用」と「PHxカスタムモディファイアを使用」の両方でリストを出しています。
http://140619223906-5296.evo.demo.modx.jp/news/

よろしくお願いいたします。

Re: DittoのPHxでプレースホルダが使えない件

Posted: 2014年6月19日(木) 23:07
by kazuike
念のためソース貼っておきます。

▼スニペット(PHxカスタムモディファイア)「phx:switch_text」

コード: 全て選択

<?php
if ($this->placeholders['flag']=='1') {
   $output = $this->placeholders['text_a'];
} else {
   $output = $this->placeholders['text_b'];
}
return $output;
?>
▼Dittoの部分

コード: 全て選択

<h3>プレースホルダを直接使用</h3>
<table>
[[Ditto?
  &orderBy = createdon DESC
  &tpl = '@CODE:
    <tr>
    <td class="date">[+createdon:date=`%Y年%-m月%-d日`+]</td>
    <td><span class="keyword">[+flag:is=`1`:then=`[+text_a+]`:else=`[+text_b+]`+]</span>
    <a href="[~[+id+]~]">[+title+]</a></td>
    </tr>
' // 表示パターン
]]
</table>

<h3>PHxカスタムモディファイアを使用</h3>
<table>
[[Ditto?
  &orderBy = createdon DESC
  &tpl = '@CODE:
    <tr>
    <td class="date">[+createdon:date=`%Y年%-m月%-d日`+]</td>
    <td><span class="keyword">[+flag:switch_text+]</span>
    <span style="display:none;">[+text_a+][+text_b+]</span>
    <a href="[~[+id+]~]">[+title+]</a></td>
    </tr>
' // 表示パターン
]]
</table>
▼データの内容

1件目
flag='1',text_a='フラグがONなので正解',text_b='フラグがONなので不正解'

2件目
flag='0',text_a='フラグがOFFなので不正解',text_b='フラグがOFFなので正解'

▼出力結果

コード: 全て選択

<h3>プレースホルダを直接使用</h3>
<table>

    <tr>
    <td class="date">2011年3月19日</td>
    <td><span class="keyword">`:else=`フラグがONなので不正解`+]</span>
    <a href="news/newservice.html">新サービスのお知らせ</a></td>
    </tr>

    <tr>
    <td class="date">2011年3月10日</td>
    <td><span class="keyword">`:else=`フラグがOFFなので正解`+]</span>
    <a href="news/begin.html">サイトをオープンしました。</a></td>
    </tr>

</table>

<h3>PHxカスタムモディファイアを使用</h3>
<table>

    <tr>
    <td class="date">2011年3月19日</td>
    <td><span class="keyword">フラグがONなので正解</span>
    <span style="display:none;">フラグがONなので正解フラグがONなので不正解</span>
    <a href="news/newservice.html">新サービスのお知らせ</a></td>
    </tr>

    <tr>
    <td class="date">2011年3月10日</td>
    <td><span class="keyword">フラグがOFFなので正解</span>
    <span style="display:none;">フラグがOFFなので不正解フラグがOFFなので正解</span>
    <a href="news/begin.html">サイトをオープンしました。</a></td>
    </tr>

</table>

Re: DittoのPHxでプレースホルダが使えない件

Posted: 2014年6月21日(土) 10:31
by yama
サンプルありがとうございます、だいたい把握できました。
https://github.com/modxcms-jp/evolution ... hp#L86-L87
ここの正規表現にバグがあるみたいです。だとすると、だいぶ昔からです。(本家版も同じ)
$modx->getTagsFromContent()関数を使うほうが確実かも?のちほど試してみます

Re: DittoのPHxでプレースホルダが使えない件

Posted: 2014年6月21日(土) 11:04
by yama
https://github.com/modxcms-jp/evolution ... d0d799a80c
これでたぶん大丈夫。どうでしょう?

Re: DittoのPHxでプレースホルダが使えない件

Posted: 2014年6月21日(土) 14:43
by kazuike
ありがとうございます。

DittoのPHxでプレースホルダを使えました。