さくらでのSmarty設置ですが、
まず、公式サイト(http://www.smarty.net/)から、Smarty本体をDL。
解凍します。
解凍したものの中に、libsフォルダがあるので、それをさくらのサーバーにアップする。
さくらのサーバーの公開ディレクトリまでのパス構造は、
/home/アカウント名/www
になっているが、公開ディレクトリより上層のディレクトリにも設置可能な為、
/home/アカウント名/
に、上記libsフォルダをアップロード。
templatesディレクトリ&templates_cディレクトリも、公開ディレクトリより上層へ設置したかった為、
MySmarty.class.phpを作成。内容は↓
<?php
define ("ROOT_DIR" ,$_SERVER['DOCUMENT_ROOT']."/..");
require_once("Smarty.class.php");
class MySmarty extends Smarty {
function MySmarty () {
$this->template_dir = ROOT_DIR."/templates";
$this->compile_dir = ROOT_DIR."/templates_c";
$this->left_delimiter = "<{";
$this->right_delimiter = "}>";
$this->Smarty();
}
}
?>
デリミタも、<{}>に変更してます。
libs内へアップロード。
phpでの呼び出し時は、
require_once ("../libs/MySmarty.class.php" );
で、いけました。
- tag
- php
- smarty
- さくらインターネット
- 設定
検証モデル:
$rec = array (
array ("id" => "01" , "name" => "久保田" , "list" => "php,mysql,css") ,
array ("id" => "02", "name" => "山本" , "list" => "mt,css,design") ,
array ("id" => "03" , "name" => "立松" , "list" => "mt,css,dance")
);
というデータがあったとします。
まず、これの、listの値をコンマで分けて配列に格納したい場合、
foreach ( $rec as $key => $value ) {
$rec[ $key ][ "list" ] = explode ("," , $value["list" ]);
}
という式で、listの中にさらに配列ができます。
ポイントは、$valueで配列を指定しているところです。
この場合、$valueには、arrayという値が入っているはずです。
このデータをテンプレートで出力する場合、まず、
$smarty->assign ( "rec" , $rec );
でアサインし、
テンプレート側では、
{foreach item=value key=key from=$rec name=rec}
<p> {$value.id} </p>
<p> {$value.name} </p>
{foreach item=seplist from=$value.list name=seplist}
{if $smarty.foreach.seplist.first}
<ul>
<li> {$seplist} </li>
{/if}
<li> {$seplist} </li>
{if $smarty.foreach.seplist.last}
<li> {$seplist} </li>
</ul>
{/if}
{/foreach}
{/foreach}
と、記述します。
id、nameは、$valueに続けて.でキーをつなげてやれば出力されますが、
listには更に配列が格納されているので、foreachを入れ子にし、
出力を定義させてやる必要があります。
- tag
- php
- smarty
通常:
$sql = "select * from テーブル名";
$res = $db->query ($sql);
while ($row = $res->fetchRow (DB_FETCHMODE_ASSOC )) {
//処理
}
getAll:$resには、レコードの数だけの二次元配列が作成される。
$res = $db->getAll ($sql , DB_FETCHMODE_ASSOC);
getRow:$resには、SQLの結果から最初の一行を返す。
$res = $db->getRow ($sql , DB_FETCHMODE_ASSOC);
getOne:最初に取得するレコードの先頭のフィールドの値だけを返す。
$res = $db->getOne ($sql);
getCol:第2引数に指定した番号のフィールドの値だけを配列で返す。
$res = $db->getCol ($sql , 1);
- tag
- PEAR
- php
select * from テーブル名 order by フィールド名 desc;
→フィールド名で降順出力。
select count(*) as 任意フィールド名 from テーブル名 where フィールド名 like '%条件%';
→あるフィールドの条件を含むレコードの数をカウント。
- tag
- MySQL
- クエリ
update テーブル名 set フィールド名 = 新しい値;
→全レコードの「フィールド名」のフィールドを「新しい値」にする。
update テーブル名 set フィールド名 = 新しい値 where 条件;
→条件で指定したレコードの値を更新。
update テーブル名 set フィールド名 = 新しい値 , フィールド名 = 新しい値;
※複数のフィールドを更新したい場合はコンマで区切る。
update テーブル名 set フィールド名 = 新しい値 where 条件フィールド名 in ('フィールド名1','フィールド名2','フィールド名3');
※複数のレコードの同じフィールドへ、同じ値を入力する。
- tag
- MySQL
- クエリ