skinny

in_gl_A

Skinny 呼び出しマニュアル

SkinnyFetchCache - テンプレートをPHPに変換したコードを返す

連想配列の要素を使用しPHPとして実行される直前のコードを文字列として返します。
この内容を evalに渡す事でSkinnyの展開処理が実行されています。
Skinnyの設定でキャッシュの利用をONにした際、./cacheフォルダに保存されているのはこのコードです。

説明

書式

$Skinny->SkinnyFetchCache( 'template-filename' , $out , [template-code] )

パラメータ

template-filename : 使用するテンプレートファイル名
$out : テンプレートに渡す連想配列名
template-code   : テンプレートのコード内容を直接渡す場合は第三引数で渡します。
         (template-filename の指定は無視され、template-code の内容が使用されます)
         ※動的にテンプレートそのものを生成した場合などに利用してください。

戻り値

string : $outを展開しPHPとして実行可能なソースコード文字列

サンプル

PHPコード

<?php
    include_once( "Skinny.php" );
    $out = array();
    
    $out['list'][] = array('age'=>'20', 'name'=>'雷電太郎' );
    $out['list'][] = array('age'=>'24', 'name'=>'佐藤一郎' );
    $out['list'][] = array('age'=>'21', 'name'=>'田中裕子' );
    $out['list'][] = array('age'=>'26', 'name'=>'鈴木雄二' );
    $out['count'] = count( $out['list'] );
    
    // sample.htmlで展開しPHPの埋め込まれたソースコードを取得
    $csvdata = $Skinny->SkinnyFetchCache( "sample.html", $out );
    file_put_contents( "sample.php", $csvdata );
?>

HTML用テンプレート(sample.html

<% if(count,==,0) %>
  該当者が居ませんでした。<br />
<% else %>
  下記 <% echo(count) %>人のデータをCSVファイルに書き出しました。<br />
<% /if %>

<table>
  <tr>
    <th>年齢</th>
    <th>名前</th>
  </tr>
<% def(list) %>
<% each(list) %>
    <tr>
      <td><% echo(list/age) %></td>
      <td><% echo(list/name) %></td>
    </tr>
<% /each %>
<% elsedef %>
    <tr>
      <td colspan="2">データがありません</td>
    </tr>
<% /def %>
</table>

結果

保存したPHPファイルの内容(sample.php

※)見やすいように多少の整形とコメント、PHP部分にカラーリングを施してあります。

<?php $skOutput = $param; # $paramは上記PHPコードの$outです ?>
<?php if($skOutput["count"] == 0) { # if ?>
  該当者が居ませんでした。<br />
<?php }else{ # else ?>
  下記 <?php echo $skOutput["count"]; ?>人
  のデータをCSVファイルに書き出しました。<br />
<?php } # /if ?>

<table>
  <tr>
    <th>年齢</th>
    <th>名前</th>
  </tr>
<?php # def
  if( !isset($skOutput["list"]) ){ $skOutput["list"]=null;}
  if( (!is_array($skOutput["list"]) and strlen($skOutput["list"])!==0) 
    or (is_array($skOutput["list"]) and count($skOutput["list"])!==0) )
  {
?>
<?php # each
 if( !isset($skLoopCount["/list"]) ){ $skLoopCount["/list"]=0; } 
 if( !isset($skOutput['list'])){ $skOutput['list']=array(); } 
 for($skLoopCount["/list"]=0;
     $skLoopCount["/list"] < count($skOutput['list']);
     $skLoopCount["/list"]++)
 {
?>
    <tr>
      <td><?php echo $skOutput["list"][$skLoopCount["/list"]]["age"]; ?></td>
      <td><?php echo $skOutput["list"][$skLoopCount["/list"]]["name"]; ?></td>
    </tr>
<?php } # /each ?>
<?php }else{ # elsedef ?>
    <tr>
      <td colspan="2">データがありません</td>
    </tr>
<?php } # /def ?>
</table>

btn_pagetop