同様の問題があったので、こちらのトピックをお借りします。
ほぼ同じケースで、以下のような書き方をしています。
コード: 全て選択
[+longtitle:eq():
then(<li>[+parent:pagetitle+] - [+content+]</li>):
else(<li>[+parent:pagetitle+] - <a href="[~[+id+]~]">[+longtitle+]</a></li>)+]
longtitleが入っているかどうかで表示内容を分岐させる使い方をしているのですが、
この時、content部分に半角の閉じカッコが入っていると、そこで表示が終わってしまいます。
もしくは、longtitleが入力されていて、contentに閉じカッコが入っている場合は、else以下が何も表示されません。
※contentに閉じカッコが含まれていなければ、else以下の分岐も意図したとおりに表示されます。
※Dittoを使用しており、そのテンプレートなので変数をくくる記号は「+」になっています。
こちらのyamaさんのご返信を読んで、manager/includes/document.parser.class.inc から
コード: 全て選択
foreach($tags as $tag) {
if(strpos($tag,$left)!==false) {
$innerTags = $this->_getTagsFromContent($tag,$left,$right);
$tags = array_merge($innerTags,$tags);
}
}
上記の部分を丸ごと削除してアップしなおしたのですが、他にも内部PHxを使った書き方を使用しているところがあるためか、
全体的に表示がおかしくなってしまいました。
いろいろ崩れてしまったので、着目する部分が的外れかもしれませんが気付いたことを書きます。
1. 最初に挙げた分岐部分の表示は、longtitleが空ではない場合のみしか表示されなくなった。
半角の「)」が含まれていても表示されますが、else以下に該当するパターンのものしか出てこなくなりました。
2. [*変数@ID*]の書き方で表示している部分が表示されたり、されなかったりする。
トップページは正常に値が出ているのですが、他のページは[*変数@ID*]という記述が出てきます。
※この記述は全ページに共通で出すパーツにしか使用しておらず、分岐などはないのでなぜページによって違うか謎です。
3. 他のPHxで書いた部分に影響が出ている?
コード: 全て選択
[*parent:eq(0):then([*longtitle:ifempty([*pagetitle*])*]):else([[UltimateParent:pagetitle]])*]
例えば、ページのカテゴリタイトルなどをこのように書いているのですが、
1階層目(親が0)のページでは、「[*longtitle:ifempty([*pagetitle*]」という表示が出ています。
親が0にはならない、2階層目以降のページはelse以降が正常に判定されているみたいで、pagetitleの中身が表示されます。
※症状としては、1と同じです。半角カッコを含むかどうかは関係ないですが。
コンテンツでは半角カッコを使わないようにすれば問題はないので、今のところはそのルールで運用しています。
動作チェックが何かのお役に立てればと思い、ご報告いたします。(そもそも削除ブロックが間違ってたりしたらすみません…)