お知恵をお貸し下さい。
リソースが
document Parent(14)
└document A(15)
└document B(16)
└document C(17)
└document D(18)
└document E(19)
└document F(20)
このような構造の場合に
document C(17) にて
document A(15)に含まれてる場合にtrueを返すには
phxのModifiersでどのように書けばよろしいのでしょうか?
【やりたいこと】
document Parent(14)
に
[!Ditto?
&parents=`14`
&display=`all`
&hideFolders=`0`
&tpl=`list_tpl`
&depth=`1`
!]
このような場合に
list_tpl内にて
<li><a href=[~[+id+]~]>[+pagetitle+]</a></li>
を
<li class="current">
としたい
jsでの出力もいいですが
URLの関係で出せない場合がでてくるので
ditto内で出来ればいいと思います。
カレントページであれば
tplCurrentDocument
で対応可能ですが
例えばカテゴリーのみを一覧表記している場合に効かなくなります。
応用として
ヘッダーナビゲーションなどに
ハイライトできるなど痒いところに手が届く気がします。
宜しくお願いいたします。
phxで親判定? 【解決済み】
Re: phxで親判定?
<li class="[+parent:current+]">
というふうに記述して、[+parent+]の値を判定するcurrentモディファイアを作成できると思います。
<li class="[[current]]">
[+parent:current+]という書き方が可読性的に分かりにくいようにも思いますので、上記のようにスニペットとして作るのもシンプルでよさそうに思います。
スニペット内部では$modx->documentObject['parent']の値を参照します。
というふうに記述して、[+parent+]の値を判定するcurrentモディファイアを作成できると思います。
<li class="[[current]]">
[+parent:current+]という書き方が可読性的に分かりにくいようにも思いますので、上記のようにスニペットとして作るのもシンプルでよさそうに思います。
スニペット内部では$modx->documentObject['parent']の値を参照します。
Re: phxで親判定?
yama様
お忙しい中ありがとうございました。
今回はスニペットの形で作成いたしました。
[[current]]
<?php
$documents = $link;
$docId = $modx->documentObject['id'];
$arrayParents = $modx->getParentIds($docId);
$set = "current";
if ($documents == $docId) {
$output = $set;
} else {
foreach ( $arrayParents as $val ) {
if ($documents == $val) {
$output = $set;
break;
}
}
}
echo $output;
?>
[[current? &link=`id`]]
の形で&linkにIDを投げると
子孫または同じ
$set のテキストを返します。
ditto内だけでなく
各ページのナビゲーションなど応用が効くかとおもいます。
もっと最適化した書き方があるとは思いますので
他の書き方などありましたらご教授ください。
お忙しい中ありがとうございました。
今回はスニペットの形で作成いたしました。
[[current]]
<?php
$documents = $link;
$docId = $modx->documentObject['id'];
$arrayParents = $modx->getParentIds($docId);
$set = "current";
if ($documents == $docId) {
$output = $set;
} else {
foreach ( $arrayParents as $val ) {
if ($documents == $val) {
$output = $set;
break;
}
}
}
echo $output;
?>
[[current? &link=`id`]]
の形で&linkにIDを投げると
子孫または同じ
$set のテキストを返します。
ditto内だけでなく
各ページのナビゲーションなど応用が効くかとおもいます。
もっと最適化した書き方があるとは思いますので
他の書き方などありましたらご教授ください。
Re: phxで親判定?
コード: 全て選択
<?php
if(!isset($set)) $set = 'current';
$docId = $modx->documentObject['id'];
if($link == $docId) return $set;
else {
$arrayParents = $modx->getParentIds($docId);
foreach ($arrayParents as $val) {
if($link == $val) return $set;
}
}
?>