12/201207

【freo】開いているページによってメニューを変化させる方法【Tips】

タイトルなげぇ……

やっていることはsmartyの機能を使って現在のURLを取得して一致したらclassを与えているだけです。

ちなみに当サイトの上部にあるメニューで同様のことを行なっています。

実装方法

対象が単一ページのみ場合

http://host/hoge1を表示していたらliにclass="current"を加える。

<li<!--{if ($smarty.server.REQUEST_URI == '/hoge1')}--> class="current"<!--{/if}-->><a href="/hoge1">メニュー1</a></li>
対象が多階層の場合

http://host/hoge1もしくはhttp://host/hoge1/hogehogeを表示していたら以下略。

<li <!--{if ($smarty.server.REQUEST_URI|regex_replace:'/^\/hoge1.*/i':'reg' eq 'reg')}--> class="current"<!--{/if}-->><a href="/hoge1">メニュー1</a></li>
複数のURLを対象にしたい場合

該当部分をこんな感じにする。

($smarty.server.REQUEST_URI == '/hoge1' || $smarty.server.REQUEST_URI == '/hoge2')

あとはcssで.currentに対してなにか記述すればいいと思います。

文字の色を変えるとかそこら辺好きなように。

余談

これはfreoの機能と言うよりも上記にも書きましたがsmartyの機能ですので他のCMSでもsmartyを採用していれば使えると思います。

以下ちょっとした解説もどき(ほぼ初心者向け?)

regex_replaceを指定することで正規表現での検索・検索が可能となります。

^は文字列の先頭を意味します。今回は使用していませんが逆の意味で末尾を意味する$もあります。

\/は/を文字列にしたい場合です。ちなみに/単体では文字列として認識しません。iや^などの前に置いてこれらを機能させるものですので。

iは大文字小文字を区別なくマッチさせますので、認識URLが大文字でも小文字でも認識します。

.*は.と*で別々の意味合いですがこの組み合わせにすることで0ないし1以上の文字列となります。

eqとは正規表現の==と同様の意味合いですので==で記述しても問題ありません。

むしろ==で統一したほうがわかりやすいかも知れませんね。

regは最初のに読み取ったURLを代入し、2個目のに正規表現の文字列を代入しています。(文字列は確かなんでも良かったような気がします)

あとはその2つを先ほどのeqで一致するか確かめればifの判定が出せます。

なぜ多階層のほうでREQUEST_URI == '/hoge1.*'とせずに、わざわざこんな面倒な記述をしているのかというと。

ひとえに正規表現がその状態では機能しないからです(´・ω・`)

機能する方法があれば誰か教えてください(´;ω;`)

関連エントリー

【freo】関連エントリープラグインでエラー【MySQL 5.7】

先日、うちのサイトをMySQL5.5から5.7に変更したんですけど、どうやら一...

2018/07/25
【freo】メディア一括表示プラグインを指定数のみ表示する【プラグイン】

※ただしsmarty3限定 freoで新着メディアを表示したい場合、たぶん...

2018/04/11
【freo】メディア登録(タグ機能追加版)【改造】

どうも、freoのメディア登録ってメディアの説明を入力するところはあっても、タ...

2018/01/04
SSL化予定

最近絵の記事が全くない御堂です。 てめぇ本当に絵描か? それはさておき...

2017/08/18
【freo】TinyMCE 4 でのテーマの変更方法

別にfreoに限った話じゃないですけどね。TinyMCE4を実装しているところ...

2014/05/06
【freo】任意のページ内容を任意の箇所に表示【Tips】

freo1.10来ましたね。 それはそうと、freoってなんだかインフォメ...

2014/05/03

コメント

権限がありません  [2019/02/26 07:46]

このコメントを閲覧する権限がありません。

コメント登録

  • 閲覧制限 ※管理者のみにすると投稿者でも確認ができなくなります。

archive


×

ログイン