かめのはこ

とあるエンジニアのメモ帳です

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
 
<雑記>
不要プロファイルエントリ削除
 
右クリック→リセット→再起動→消えてるのを確認。