Fuelphp:コントローラーから渡したHTMLソースをビューで出力する

fuelphpでコントローラーからHTMLソースをビューに渡して出力したい場合があります。

fuelphpではコントローラーからビューに渡す値をデフォルトでエスケープするようになっており、
セキュリティを高めるためにXSS(クロスサイトスクリプティング)対策が実施されています。

処理の内容によっては、HTMLソースをビューで出力したい場合があるので、
下記にコントローラーから渡したHTMLソースなどの値を、
エスケープせずにビューで出力する方法を記載します。


エスケープしない値をビューに渡す

Viewクラス forge()メソッドの第三引数に「false」を設定します。

コントローラー

$this->template->content = \View::forge('hoge/index', $data, false);

$dataの値がエスケープしないでビューに渡されます。


変数を指定してエスケープしない値をビューに渡す

エスケープしない変数を指定してビューに値を渡す場合、
set_safe()メソッドを使用し値を設定します。
※$data[‘hoge_html’]の値をエスケープなしで設定した場合

コントローラー

$this->template->content = \View::forge('hoge/index', $data);
$this->template->content->set_safe('hoge_html', $data['hoge_html']);

ビュー

<?php echo $hoge_html; ?>

上記は$data[‘hoge_html’]をエスケープしないで、
ビューで$hoge_htmlという変数で使用できます。


ビューに渡す全ての値をエスケープなしで渡すよりは、
set_safe()メソッドでエスケープしない値のみを指定した方が、
エスケープしない値がわかりやすいのでおすすめです。

HTML:Googleマップを携帯サイトで表示する方法

携帯ガラケー)サイトでGoogleマップを表示した時の方法をメモします。

今まで携帯サイトで地図情報を表示する場合は、
地図画像を作成し表示するなどしていました。

Goolge Maps APIを使用すれば緯度・経度を指定し、
その他必要な情報を設定するだけでGoogleマップを出力してくれます。


Googleマップ画像 表示方法

下記のURLにアクセスすると、Googleマップ画像を出力してくれます。

http://maps.google.com/maps/api/staticmap?center=35.689487,139.691706&zoom=13&markers=35.689487,139.691706&size=200x200&sensor=false

表示したい情報(パラメーター情報)に書き換え、HTMLのimgタグで表示します。
HTMLに挿入するコードは以下のようになります。


<img src="http://maps.google.com/maps/api/staticmap?center=35.689487,139.691706&zoom=13&markers=35.689487,139.691706&size=200x200&sensor=false">

実際に出力したGoogleマップは下記のようになります。


パラメーターの説明

「center」
経度・緯度を指定します。

「zoom」
地図の拡大縮小サイズを指定します。

「markers」
マーカーの経度・緯度を指定します。
カラーやサイズなども指定可能です。

「size」
出力する画像サイズを指定します。

「sensor」
trueかfalseを指定します。
携帯サイトで表示する場合はfalseを指定します。


上記の方法でGoogleマップを携帯サイトで表示することができるので、
地図画像を作る必要がなくとても便利です。

Chrome:Chromeでユーザーエージェントを変更する方法

Chromeユーザーエージェントを変更する場合、拡張機能を使用することで簡単にユーザーエージェントを変更することができます。

chrome_useragent_1

自分のサイトや他のWEBサイトがiphoneではどのように表示されるのか、他のブラウザではどのように表示されるのかなど気になると思います。
またモバイルなどでチェックしたい場合、端末がないことが多いですがユーザーエージェントを変更することでモバイル(ガラケー)の画面もチェックすることが可能です。

下記にユーザーエージェントを変更できる拡張機能をご紹介します。


User-Agent Switcher

chrome_useragent_2

下記のダウンロードページにアクセスします。

User-Agent Switcher

「+CHROMEに追加」ボタンをクリックし、「User-Agent Switcher」をChromeに追加します。

chrome_useragent_b

追加するとアイコンが表示されるので、アイコンをクリックし変更したいユーザーエージェントに変更します。

chrome_useragent_4

リンククリック後、画面をリロードすると選択したユーザーエージェントの画面で表示されます。
下記は「iPhone」リンクをクリックし、「YAHOO」をChromeで開いた時の表示です。

chrome_useragent_5


User-Agent Switcher for Chrome

chrome_useragent_3

下記のダウンロードページにアクセスします。

User-Agent Switcher for Chrome

「+CHROMEに追加」ボボタンをクリックし、「User-Agent Switcher for Chrome」をChromeに追加します。

chrome_useragent_b

追加するとアイコンが表示されるので、アイコンをクリックし変更したいユーザーエージェントに変更します。
※Settingsリンクで新しくユーザーエージェントを追加することができます。

chrome_useragent_6

変更したいユーザーエージェントを選択するとユーザーエージェントが変更され画面が表示されます。

chrome_useragent_7


WEBサイトを作成する方にはいちいち他のブラウザや端末でチェックしながら作業しなくていいの制作の効率も上がると思います。
最終的には本物のブラウザ・端末でチェックしなければいけないと思いますが。。。


Javascript:submitした時の位置情報を取得し、ロード時に表示位置を指定する

HTMLのフォームでsubmitした場合、ロードした画面の表示スクロール位置はリセットされてページの先頭が表示されます。
submitした時の表示位置のまま、ページロード後もスクロール位置を変更しないで表示したい場合があります。

今回はJavascriptsubmitした時の位置情報を取得し、ロード後の画面でsubmitした時のスクロール位置を変更しないで表示する方法を記載します。


Javascriptでブラウザの位置情報を取得し、ロード時に表示位置を指定

下記で縦と横の位置情報を取得します。


<script type="text/javascript">
    x = document.documentElement.scrollLeft || document.body.scrollLeft;
    y = document.documentElement.scrollTop || document.body.scrollTop;
</script>

submit時に取得した位置情報をhiddenに格納し、データをPOSTします。
 
 
画面ロード時に送信した位置情報で画面のスクロール位置を指定します。
onloadイベントで表示スクロール位置を設定しています。


<script type="text/javascript">
window.onload = function(){
    window.scroll(<?php echo $data['x']; ?>, <?php echo $data['y']; ?>); 
}
</script>

上記の方法で値を取得しておけば、ロード時に表示位置を変更せず画面を表示することができます。
位置情報はphpでechoしています。


Fuelphp:fuelphpでcron(クーロン)を実行する方法

fuelphpcronを実行したい場合、fuelphpのタスクを利用します。
タスクはcronを実行することができるクラスです。

定期的に実行するプログラムなどをタスクで作成し、cronで実行した際の方法をメモします。


cronで作成したタスクを実行する方法

タスクは下記のディレクトリに格納します。
「hoge.php」に実行したいプログラムを記述します。

fuel/app/tasks/hoge.php

クーロンを設定します。

# crontab -e

クーロンは下記のように指定します。
タスクをコマンドラインで実行する時と同じように記載します。

0 10 * * * /usr/bin/php /var/www/html/oil refine hoge

上記は、タスクで作成した「hoge.php」を毎日10時に実行することができます。