freoの特定ユーザーのプロフィールを参照する文字列

名前

{$freo.refer.users.ユーザーID.name}

エンティティ化してメールアドレス

{$freo.refer.users.ユーザーID.mail|escape:hexentity}

URL

{$freo.refer.users.ユーザーID.url}

紹介文

{$freo.refer.users.ユーザーID.text|nl2p}

UAによって適用されるテンプレートフォルダ(ある場合)

iPad

/templates/ipads

iPod

/templates/ipods

iPhone & iPod touch

/templates/iphones

Android

/templates/androids

ガラケー

/templates/mobiles

また、iPhoneとAndroid等共に同じtemplateを読みこませる場合は

/freo/lib/freo/common.php

内の153行目付近にある

//接続環境取得

部分の

} elseif (preg_match('/Android/', $_SERVER['HTTP_USER_AGENT'])) {
$freo->agent['type'] = 'android';

} elseif (preg_match('/Android/', $_SERVER['HTTP_USER_AGENT'])) {
$freo->agent['type'] = 'iphone';

のように変更すれば

iphonesフォルダの中身がandroidでもおそらく適用されます(android実機では未確認です)

タイトルなげぇ……

やっていることは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.*'とせずに、わざわざこんな面倒な記述をしているのかというと。

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

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

ちょっとDB(MySQL)の中身をいじっていて文字化けに関して陥ったので、個人的なメモ。

症状

php側でデータを作る際にutf8で作成するようにし、phpMyAdminでも照合参照をutf8_general_ciに設定していたのになぜかphpMyAdmin上では文字化け状態になっていた。

ちなみにレンタルサーバーの関係上、my.cnfは編集できない(編集する必要がなかったのではあるが)

原因

各フィールドの照合参照がutf8系ではなかった。

解決

freo(CMS)上ではきちんと文字が表示され、エクスポート出来る状態だったので、そちらで各テーブルごとにエクスポートした後に、sqlファイル内の記述でutf8に設定されているのを確認し、phpMyAdminでインポートする。

また、エクスポート&インポートなどせずともphpMyAdmin上で手作業なり、SQL文なりで各フィールドの照合参照を修正してもいいと思う(未確認)

疑問

全体を一括エクスポートし、utf8に設定されているのを確認し、インポートするのでは照合参照はutf8系で認識されるのになぜか文字化けが直らないという状況が発生。しかし各テーブルごとにインポートするときちんと文字化けが直るという現象に。

やはりDBはいろいろとめんどうだなぁという印象が更に深まったのであった(´・ω・`)

あと文字化けは直ったけどこの場合、freoのconfig.phpで文字コードをUTF8にきちんと設定しておかないとサイト上で文字化けしますのでfreo使っている方はお気をつけを(たしか公式に書いてあったね)

archive


×

ログイン