smartyでassignのscope指定をやってみる
※参考
http://www.smarty.net/docs/ja/language.function.assign.tpl
指定できるのは
blank Smarty::SCOPE_LOCAL
parent Smarty::SCOPE_PARENT
root Smarty::SCOPE_ROOT
global Smarty::SCOPE_GLOBAL
関連するsmartyモジュールは
core/vendors/smarty/sysplugins/smarty_internal_compile_assign.php
core/vendors/smarty/sysplugins/smarty_internal_data.php
検証してみる
<構造>
・app ┣controller ┃┗tests_controller.php ┃ ┣views ┃┣tests ┃┃┗index.tpl ┃┃ ┃┣elements ┃┃┣head.tpl ┃┃┣head_child.tpl ┃┃┗head_grandchild.tpl
<ソース>
tests_controller.php
class TestsController extends AppController { public $name = "Tests"; public $uses = array(); public $layout = ""; public $autoRender = true; public function index(){ $this->set("cont_var","controller_value"); } }
index.tpl
< html > < body > {$view->element('head')} <h1>main</h1> <p>{$cont_var}</p> <p>{$h_non_var}/{$h_parent_var}/{$h_root_var}/{$h_global_var}</p> <p>{$c_non_var}/{$c_parent_var}/{$c_root_var}/{$c_global_var}</p> <p>{$g_non_var}/{$g_parent_var}/{$g_root_var}/{$g_global_var}</p> < /body > < /html >
head.tpl
{$view->element("head_child")} <h1>head</h1> {assign var="h_non_var" value="non_value"} {assign var="h_parent_var" value="parent_value" scope=parent} {assign var="h_root_var" value="root_value" scope=root} {assign var="h_global_var" value="global_value" scope=global} <p>{$cont_var}</p> <p>{$h_non_var}/{$h_parent_var}/{$h_root_var}/{$h_global_var}</p> <p>{$c_non_var}/{$c_parent_var}/{$c_root_var}/{$c_global_var}</p> <p>{$g_non_var}/{$g_parent_var}/{$g_root_var}/{$g_global_var}</p>
head_child.tpl
{$view->element("head_grandchild")} <h1>head_child</h1> {assign var="c_non_var" value="non_value"} {assign var="c_parent_var" value="parent_value" scope=parent} {assign var="c_root_var" value="root_value" scope=root} {assign var="c_global_var" value="global_value" scope=global} <p>{$cont_var}</p> <p>{$h_non_var}/{$h_parent_var}/{$h_root_var}/{$h_global_var}</p> <p>{$c_non_var}/{$c_parent_var}/{$c_root_var}/{$c_global_var}</p> <p>{$g_non_var}/{$g_parent_var}/{$g_root_var}/{$g_global_var}</p>
head_grandchild.tpl
<h1>head_grandchild</h1> {assign var="g_non_var" value="non_value"} {assign var="g_parent_var" value="parent_value" scope=parent} {assign var="g_root_var" value="root_value" scope=root} {assign var="g_global_var" value="global_value" scope=global} <p>{$cont_var}</p> <p>{$h_non_var}/{$h_parent_var}/{$h_root_var}/{$h_global_var}</p> <p>{$c_non_var}/{$c_parent_var}/{$c_root_var}/{$c_global_var}</p> <p>{$g_non_var}/{$g_parent_var}/{$g_root_var}/{$g_global_var}</p>
<実行結果>
< html > < body > <h1>head_grandchild</h1> <p>controller_value</p> <p>///</p> <p>///</p> <p>non_value/parent_value/root_value/global_value</p> <h1>head_child</h1> <p>controller_value</p> <p>///</p> <p>non_value/parent_value/root_value/global_value</p> <p>/parent_value/root_value/global_value</p> <h1>head</h1> <p>controller_value</p> <p>non_value/parent_value/root_value/global_value</p> <p>/parent_value/root_value/global_value</p> <p>/parent_value/root_value/global_value</p> <h1>main</h1> <p>controller_value</p> <p>/parent_value/root_value/global_value</p> <p>/parent_value/root_value/global_value</p> <p>/parent_value/root_value/global_value</p> < /body > < /html >
<検証結果>
・include後でないと参照はできない
・コントローラでsetした値はglobalに利用可能
・LOCAL以外であればincludeした子、孫のデータを参照可能
・LOCALの場合assignしたテンプレートでのみ参照可能
・parent/root/globalの違いがわからない
smartyでランダム関数を利用する
※rand自体はphpの関数をそのまま利用できる
{assign var=hoge value=1|rand:3} //"1|rand:3" の部分は "rand(1,3)" に解釈される
【参考】
※[php]rand関数
http://php.net/manual/en/function.rand.php
※[smarty]修飾子について
http://www.smarty.net/docsv2/ja/language.modifiers.tpl
cakephpでsmartyを利用する
モジュールをダウンロード
※SmartyView
https://github.com/kaz29/smartyview
※Smarty本体
http://www.smarty.net/
以下を配置
core/vender/smarty # 本体のlibをsmartyって名前で設置
app/views/smarty.php # smartyviewのphpのみ設置
const.phpに
Configure::write('Smarty.subDir', ''); Configure::write('Smarty.layoutPath', '');
これやっとくとctpと同じパスでtplが利用できる
views/[controller]/[method].ctp
views/[controller]/smarty/[method].tpl → views/[controller]/[method].tpl
あとはコントローラに
public $view = 'Smarty';
を設定する(app_controolerに設定しておくと楽)
smartyで文字列連結
smartyのテンプレートで上で
変数と文字列を結合させる方法
※cat: がミソですね
// controller $str1 = "one"; $str2 = "two"; $str3 = "3rd"; // template {$str1|cat:$str2|cat:"_"|cat:$str3} // result onetwo_3rd
こんなところ
TimeMachineを起動するとフリーズする
先日macのバックアップ環境として
TimeCapsule買いました
で意気揚々と起動したら
初回バックアップ開始
仕方ないのかもしれんが
とにかく長かった
でようやく終わって
TimeMachine起動してみたら
なんかフリーズする
操作全く受け付けなくなって
しばらく待っても動かない
あきらめモードで電源長押し
再起動してみましたが
再度TimeMachine起動すると同じ症状
ぐぐってもそれらしぃのなかったけど
似たようなとこでウィルス対策ソフトが悪さしてるかもなぁ
ってとこにいきついて
起動してたVB停止してみた
おっ直った、サクサク
Winの時もそうだったが
ウィルス対策いれときたいし
うまい方法ないものか
firefox Aurora インストール
■ダウンロード
http://mozilla.jp/firefox/preview/
■プロファイル作成
"C:\Program Files\Aurora\firefox.exe" -ProfileManager
新しいプロファイル作成(c)
プロファイル名 Aurora
■ショートカット作成
"C:\Program Files\Aurora\firefox.exe" -p Aurora -no-remote
■アドオンチェックオフ
Aurora起動 URLに about:config
右クリック > 新規作成 > 真偽値
名前:extensions.checkCompatibility.7.0a
値:false
<雑記>
不要プロファイルエントリ削除
右クリック→リセット→再起動→消えてるのを確認。