2015年3月5日木曜日

Baked グローバルメニューのトップページへのリンクを修正したい

Bakedのタイトルリンクとグローバルメニューのトップページリンクを両方、ディレクトリ名なしに変更するには、default.ctpを次の様にする。



if ($menu['Page']['path'] == '/index'){$menu['Page']['path'] = '/';}


Bakedのデフォルトテンプレートは、トップページに戻るリンクが2つ用意されている。

しかし、リンク先はページタイトルが

http://hogehoge.com/

なのに対し、グローバルメニューのトップページリンクは

http://hogehoge.com/index

となる。

同じページの表示だけども、お客さんの中には揃えてよ、っておっしゃる方も多いし、製作するこっちだって揃っているほうがケツの座りがいい。
トイレでケツ吹いた後に、ケツにトイレットペーパーがはさまってるのと挟まっていないのだったら、ケツに紙がはさまっていない方がいいじゃないか。アレと一緒だ。
それにケツに紙はさんだ男とはさんでいない男だったら、はさんでいない男の方がモテると思うんだ。同じ理由でindexがついているのはイケてない。取ってしまおう。

本来であればこいつはDBに登録されている「index」を削除するのが筋なのだけど、こうすると、何かのタイミングで戻ってしまう。
何のタイミングかはちょっとよくわからない。管理画面からも未入力はNGとしてエラーが出るので、まあ、Bakedの流儀に沿わないよろしくない方法なのでしょう。

そこで、default.ctpに1行書き加えてやることで、メニューをindexなしに変更してやる。
この方法だとDBいじれないよって方でも安心。

編集ファイル名
app/Plugin/(テーマ名)/View/Layout/default.ctp


<?php
 $classes = array();
  if ($menu['current']) $classes[] = 'current';
  if ($menu['Page']['hidden']) $classes[] = 'hidden';
  if ($menu['Page']['path'] == '/index'){$menu['Page']['path'] = '/';} // ←この1行を足す
?>

テーマファイルに書き込むため、テーマを変更すると元に戻っちゃう点に注意。

なお、両方ともケツに紙がはさまっている方がカッコイイじゃねえか!というのであれば、もっと簡単。
default.ctpのロゴ部分、


 <?php echo BK_SITE_NAME ?>

ここのところに「index」と書き足すだけでいい。



 <?php echo BK_SITE_NAME ?>

Baked 現在のページを取得する

Bakedで現在のページを知りたい、取得したいというときは、view内で下記のようにして取得できる。
<?php
 echo $currentMenu['Page']['name'];
?>
Bakedは、初心者に使いやすい反面、カスタマイズしようとすると情報が少なすぎて困る。
たとえばトップページだけ表示したいコンテンツがある、とかの場合、それがページ内コンテンツであれば簡単なのだけど、default.ctpテンプレート内で、となるといきなり面倒になる。現在のページを取得できればいいだけなのだけども、ソースコードを追わないとわからない。

そういった場合も、default.ctp内に下記の用に記述すれば良い。

<?php
 if($currentMenu['Page']['name'] == 'index'){
  echo 'トップページ';
 }
?>

ただし、トップページだけグローバルメニューを表示しない、という場合にデフォルトのメニューをif文で回避するのはよくない。 この場合、Controllerでメニューの中身を空っぽにして渡す方がよいと思われる。