第一階層に画像を寄せる

サイト構成上、第一階層目か第二階層目がカテゴリーである事が多い。

/index.html
/food <-ここ
  /fish
    /tuna
   /big-eye-fish.html
 /meat <-それとかここ
   /beef
   /pork

そんな時に、MODxでページがどんなに深くても出力したい画像を第一階層目にある画像ディレクトリに寄せてしまう方法。ついでに画像がなかったらテキストで出してみる。

<?php
 $current = $modx->documentIdentifier;
 $parent = $modx->getParent($current);

while($parent['id'] != ''){
 $currentParent = $parent['id'];
 $parent = $modx->getParent($currentParent);
}

$dirParent = $modx->getPageInfo($currentParent, 1, $fields= 'id, pagetitle, alias');
$currentPage =  $modx->getDocument($current, '*', 1, 0);

$imgPath = "assets/images/" . $dirParent['alias'] . "/title_" . $currentPage['alias']  . ".gif";

if(file_exists($imgPath)){
 $imgSrc = "<p><img src='" . $imgPath . "' alt='" . $currentPage['pagetitle']  . "(バナー)'></p>";
}
else{
 $imgSrc = "<span class='subBannerText'>" . $currentPage['pagetitle']  . "</span>";
}
 return $imgSrc;
?>

テンプレート側では

[[subBanner]]

を挿入する。
CSSでは

span.subBannerText {
 display:block;
 width: 490px;
 height:44px;
 background-image: url(/assets/images/subBanner.gif);
 padding-top: 14px;
 padding-left: 73px;
 color: white;
 font-weight: bold;
 background-repeat: no-repeat; 
 font-size: 13px;
}

みたいに設定するといい感じでページのバナーを出力してくれる