Resources資源

Resource plugins are meant as a generic way of providing template sources or PHP script components to Smarty. Some examples of resources: databases, LDAP, shared memory, sockets, and so on.
資源插件被認爲是爲Smarty提供模板源或PHP腳本組件的一種普通方式。一些資源例子如:數據庫、LDAP、共享內存、sockets(套接字)等等。

There are a total of 4 functions that need to be registered for each type of resource. Every function will receive the requested resource as the first parameter and the Smarty object as the last parameter. The rest of parameters depend on the function.
需要爲每一種類型的資源註冊四個函數。每一個函數將接收被請求的資源作爲第一個參數,Smarty對象作爲最後一個參數。剩餘的參數取決於函數的不同。

 

bool smarty_resource_name_source(string $rsrc_name, string &$source, object &$smarty)

bool smarty_resource_name_timestamp(string $rsrc_name, int &$timestamp, object &$smarty)

bool smarty_resource_name_secure(string $rsrc_name, object &$smarty)

bool smarty_resource_name_trusted(string $rsrc_name, object &$smarty)

 

The first function is supposed to retrieve the resource. Its second parameter is a variable passed by reference where the result should be stored. The function is supposed to return true if it was able to successfully retrieve the resource and false otherwise.
第一個函數將會檢索資源。它的第二個參數是一個參考引用變量,結果值會存放到該變量裏面。如果此函數能成功的檢索到資源,將會返回true,否則返回false。

The second function is supposed to retrieve the last modification time of the requested resource (as a UNIX timestamp). The second parameter is a variable passed by reference where the timestamp should be stored. The function is supposed to return true if the timestamp could be succesfully determined, and false otherwise.
第二個函數將會檢索被請求資源的最後修改時間(UNIX時間戳)。它的第二個參數是一個參考引用變量,時間戳值會存放到該變量裏面。如果此函數能成功的確定時間戳,將會返回true,否則返回false。

The third function is supposed to return true or false, depending on whether the requested resource is secure or not. This function is used only for template resources but should still be defined.
第三個函數將會返回truefalse,取決於被請求資源是否安全。這個函數僅用於模板資源,但仍應被定義。

The fourth function is supposed to return true or false, depending on whether the requested resource is trusted or not. This function is used for only for PHP script components requested by {include_php} tag or {insert} tag with src attribute. However, it should still be defined even for template resources.
第四個函數將會返回truefalse,取決於被請求資源是否被信任。這個函數僅用於被{include_php}{insert}標記以 src 屬性請求的PHP腳本組件。但仍應被定義,甚至用於模板資源也不例外。

See also register_resource(), unregister_resource().

Example 16-10. resource plugin資源插件

<?php
/*
 * Smarty plugin
 * ------------------------------------------------------------- 
 * File:     resource.db.php
 * Type:     resource
 * Name:     db
 * Purpose:  Fetches templates from a database
 * -------------------------------------------------------------
 */
function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty)
{
    // do database call here to fetch your template,
    // populating $tpl_source
    $sql = new SQL;
    $sql->query("select tpl_source
                   from my_table
                  where tpl_name='$tpl_name'");
    if ($sql->num_rows) {
        $tpl_source = $sql->record['tpl_source'];
        return true;
    } else {
        return false;
    }
}

function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty)
{
    // do database call here to populate $tpl_timestamp.
    $sql = new SQL;
    $sql->query("select tpl_timestamp
                   from my_table
                  where tpl_name='$tpl_name'");
    if ($sql->num_rows) {
        $tpl_timestamp = $sql->record['tpl_timestamp'];
        return true;
    } else {
        return false;
    }
}

function smarty_resource_db_secure($tpl_name, &$smarty)
{
    // assume all templates are secure
    return true;
}

function smarty_resource_db_trusted($tpl_name, &$smarty)
{
    // not used for templates
}
?>
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章