カレンダーを作ったので、メモ。
まず、表示したい月を決めます。
たとえば、現在の月を表示したいなら、
$nowts = time();
という、現在のタイムスタンプを格納する変数をつくる。
これを起点日とします。
今日以前は表示したくないカレンダーを作りたかったので、
この変数を基準に必要なパラメータを出していきます。
- $stweek = date("w",$nowts);//起点日の曜日番号
- $stday = date("j",$nowts);//起点日
- $edday = date("t",$nowts);//起点日の月の最終日
まず、$nowts の月の残り日数を計算します。
$nokori = $edday-($stday-1);
起点日から-1をしないと引きすぎてしまいます。
ここに、$stweekを足します。
カレンダーは週単位で計算しないといけないので、起点日の週の既に終わった日も
プラスしてあげないといけません。
なので、
$nokori += $stweek;
これをさらに、週の日数である、7で割り、切り上げます。
そうすると、計算すべき週数が出ます。
$nokori = ceil($nokori/7);
これで、必要なパラメータが揃いました。
これを処理して、smartyのテンプレートで表示したいので、加工しやすいように
配列を作ります。
→続きを読む
- tag
- php
- smarty
- ロジック
さくらでの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