【freo】【freoTips】【テンプレート系TIPS】modeとwork以下のアクセスしているURLによって表示を変える方法
freoを利用しているサイトで表示している画面のURLには、[mode]と[work]という文字列が必ず含まれています。
例えば、「https://32877.info/index.php/view/1」「https://32877.info/index.php/page/gallery」などです。
この、「view」と「page」のことを『mode』といい、「1」と「gallery」のことを『work』といいます。
詳しくは下記を参照してください。
32877:【freo講座】【初心者の為のfreoテンプレート編集講座】【基本編(12)】freoの画面についての考え方
modeとworkの値によって条件を発生させたい場合は下記を参考にしてください。
32877:【freoTIPS】【テンプレート系TIPS】modeとworkの値によって表示を切り替える方法
この記事では、freoで表示している画面のURLの内、modeとwork以下の値によって表示を変える方法を解説します。
modeとwork以下の値について
freoで表示する画面には、mordとwork以下に値が表示される場合があります。
たとえば、[freo/index.php/entry?date=2016]や[freo/index.php/page?word=freo]などです。
このように、[?]以下に続く部分を、リクエストパラメータといいます。
リクエストパラメータは、[パラメータ名=値]という形で表示されます。
リクエストパラメータには、GETとPOSTの二種類がありますが、今回はGETパラメータ(URLに表示される・送信できる長さに制限がある)について解説します。
POSTパラメータはURLに内容が表示されず(=送信内容を秘匿できる)、送信できる長さに制限がないものです。
ワンポイント
[?]以下でない部分(例えば[freo/index.php/regist/preview]の場合、「preview」部分)は、リクエストパラメーターではなくworkとなります。ただし、[freo/index.php/category/diary/food/japanese]など、カテゴリー画面の場合は、カテゴリー画面のPHP側でworkをリクエストパラメータの値として利用できるような仕組みが書かれています。
[freo/libs/freo/internals/category/default.php]の21~31行目
//パラメータ検証 if (!isset($_GET['category']) and isset($freo->parameters[1])) { $parameters = array(); $i = 0; while (isset($freo->parameters[++$i])) { if (!$freo->parameters[$i]) { continue; } $parameters[] = $freo->parameters[$i]; } $_GET['category'] = implode('/', $parameters); }
カテゴリー画面だけでなく、同じようにページ画面でも、[id]というリクエストパラメータにページIDが利用できるようになっています。
リクエストパラメータについて
リクエストパラメータを利用すると、freoのプログラムに閲覧者がデータを受け渡すことができます。
たとえば、[freo/index.php/entry?date=2016]なら、entry機能に「2016年」という日付を受け渡し、[freo/index.php/page?word=freo]なら、page機能に「freo」という文字列を受け渡しています。
リクエストパラメータを利用してデータが受け渡された時に、freoがどのような処理をするかは、freoのPHPであらかじめ決められています。
たとえば、[freo/index.php/entry?date=2016]で、entry機能に「2016年」という日付を受け渡したときは、エントリーの日時が「2016年」のもののみを表示し、[freo/index.php/page?word=freo]で、page機能に「freo」という文字列を受け渡したときは、「freo」という文字列がタイトル・本文に含まれるもののみを一覧表示します。
リクエストパラメータは、同時に複数送信することができます。たとえば、[date]と[word]の両方を送信したいなら、[freo/index.php/entry?date=2016&word=freo]のように[&]で連結してください。
リクエストパラメータに送信できるのは半角英数字のみです。ひらがな・カタカナ・漢字などは自動的に半角英数に変換されます。
URLとして利用できる文字数は決まっているので、余りに長いリクエストパラメータは利用できません。
リクエストパラメータによって表示を変える方法
リクエストパラメータによって表示を変える方法は以下のとおりです。
表示を変えたい画面のテンプレートに、下記のように記入して下さい。
<!--{if $smarty.get.リクエストパラメータ名}-->{$smarty.get.リクエストパラメータ名}<!--{/if}-->
これは、
<!--{もしリクエストパラメータ名のリクエストパラメータに値が送信されていたらここから}-->{リクエストパラメータ名のリクエストパラメータの値}<!--{もしリクエストパラメータ名のリクエストパラメータに値が送信されていたらここまで}-->
という意味です。
たとえば、エントリー画面で特定のユーザーが投稿したエントリーのみを抽出した時に文字列を表示したいなら、[freo/templates/default/default.html]または[freo/templates/entry/default.html]の73行目
<!--{if $smarty.get.user}--><p>ユーザー「{$smarty.get.user}」の検索結果は以下のとおりです。</p><!--{/if}-->
のようになります。
また、たとえばユーザーIDが「test」の投稿したエントリーが表示された時のみ表示を変えたいなら、
<!--{if $smarty.get.user == 'test'}--><p>ユーザーID「test」の検索結果は以下のとおりです。</p><!--{/if}-->
のようになります。
複数のリクエストパラメータが送信されている時、全てのリクエストパラメータを表示したい場合は、
<!--{if $smarty.get|smarty:nodefaults}--> <ul> <!--{foreach from=$smarty.get|smarty:nodefaults item='content' key='parameter'}--> <li>{$parameter}:{$content}</li> <!--{/foreach}--> </ul> <!--{/if}-->
のようにすると良いでしょう。