牛骨文教育服务平台(让学习变的简单)
博文笔记

TP框架---模板变量使用汇总

创建时间:2016-04-06 投稿人: 浏览次数:4828

一般情况下使用TP框架加载css样式或者js脚本时,需要先定义路径常量
在配置文件中定义加载路径常量

    /* 模板相关配置 */
    "TMPL_PARSE_STRING" => array(
        "__STATIC__" => __ROOT__ . "/Public/static",
        "__ADDONS__" => __ROOT__ . "/Public/" . MODULE_NAME . "/Addons",
        "__IMG__"    => __ROOT__ . "/Public/" . MODULE_NAME . "/images",
        "__CSS__"    => __ROOT__ . "/Public/" . MODULE_NAME . "/css",
        "__JS__"     => __ROOT__ . "/Public/" . MODULE_NAME . "/js",
    ),

1、在模板中使用函数

系统自带的函数,一般在functions.php中

// C函数,获取配置名称
<title>{:C("WEB_SITE_TITLE")}</title>
// U函数,获取URL地址
<a class="brand" href="{:U("index/index")}">OneThink</a>

自定义函数,一般定义在模块下common下的function.php或者公共模块common下的function.php中

//使用hook函数
{:hook("pageHeader")}

{:ini_get("upload_max_filesize")}===><?php echo ini_get("upload_max_filesize");?>

{:get_username()}===><?php echo get_username();?>

{:session("user_auth.username")}===><?php echo session("user_auth.username");?>

{$Think.config.COLOR_STYLE}===><?php echo (C("COLOR_STYLE")); ?>

{$Think.const.PHP_OS}===》<?php echo (PHP_OS); ?>

// 如果加const,则会默认加上THINK_前缀
{$Think.VERSION} ===》<?php echo (THINK_VERSION); ?>

{$_SERVER["SERVER_SOFTWARE"]} ===》<?php echo ($_SERVER["SERVER_SOFTWARE"]); ?>

// 如何在模板里获取mysql版本
<th>MYSQL版本</th>
<php>                       $system_info_mysql = M()->query("select version() as v;");
</php>                  <td>{$system_info_mysql.0.v}</td>
// 解析后
<?php $system_info_mysql = M()->query("select version() as v;"); ?>
<?php echo ($system_info_mysql["0"]["v"]); ?></td>


// 数组的某个字段使用函数,调用function.php中的get_nav_url方法,并把$nav.url当做参数
<a href="{$nav.url|get_nav_url}" 
// 本函数定义位置 ApplicationHomeCommonfunction.php中
/**
 * 获取导航URL
 * @param  string $url 导航URL
 * @return string      解析或的url
 */
function get_nav_url($url){
    switch ($url) {
        case "http://" === substr($url, 0, 7):
        case "#" === substr($url, 0, 1):
            break;        
        default:
            $url = U($url);
            break;
    }
    return $url;
}

2、自定义标签库
①首先在配置文件config.php中添加

// 预先加载的标签库,库文件定义在ThinkPHPLibraryOTTagLib下
    "TAGLIB_PRE_LOAD"     =>    "OT\TagLib\Article,OT\TagLib\Think",
// 这里使用的nav标签,会调用ThinkPHPLibraryOTTagLibThink.class.php里的_nav方法(为什么调用_nav方法,请自行参考Template.class.php)
<think:nav name="nav">
    <eq name="nav.pid" value="0">
        <li>
                  <a href="{$nav.url|get_nav_url}" target="<eq name="nav.target" value="1">_blank<else/>_self</eq>">{$nav.title}</a>
               </li>
       </eq>
</think:nav>
// _nav方法定义如下
    /* 导航列表 */
    public function _nav($tag, $content){
        $field  = empty($tag["field"]) ? "true" : $tag["field"];
        $tree   =   empty($tag["tree"])? false : true;
        $parse  = $parse   = "<?php ";
        $parse .= "$__NAV__ = M("Channel")->field(".$field.")->where("status=1")->order("sort")->select();";
        if($tree){
            $parse .= "$__NAV__ = list_to_tree($__NAV__, "id", "pid", "_");";
        }
        $parse .= "?><volist name="__NAV__" id="". $tag["name"] ."">";
        $parse .= $content;
        $parse .= "</volist>";
        return $parse;
    }

3、eq标签

<a href="{$nav.url|get_nav_url}" target="<eq name="nav.target" value="1">_blank<else/>_self</eq>">{$nav.title}</a>
// 读取session中的update变量
<eq name="Think.session.update" value="1">升级<else/>安装</eq></a></li>

<eq name="Think.ACTION_NAME" value="mydocument">

4、defined标签

<input type="text" name="db[]" value="<defined name="SAE_MYSQL_HOST_M">{$Think.const.SAE_MYSQL_HOST_M}<else/>127.0.0.1</defined>">

5、If标签

// condition里可以使用函数
<if condition="is_login()">
<else/>
</if>

<if condition="$menu["id"] eq $cate_id or $menu["current"] eq 1">class="current"</if>

6、使用widget (W函数)

这里写图片描述

7、U函数(生成url)

{$menu.url|U}

{:U("Install/step1")}
// 可以传递相应的参数
<a href="{:U("Article/lists?category=".$cate["name"])}">
{:U("?id=".$prev["id"])}">
{:U("index","cate_id=".$nav["id"])}
{:U("index","cate_id=".$cate_id."&pid=".$article["id"])}{:U("index",array("pid"=>$pid,"cate_id"=>$cate_id,"model_id"=>$vo))}">
{:U("article/add",array("cate_id"=>$cate_id,"model_id"=>$vo,"pid"=>I("pid",0),"group_id"=>$group_id))}

8、标签组合应用

            <div class="breadcrumb">
                <span>您的位置:</span>
                <assign name="i" value="1" />
                <foreach name="_nav" item="v" key="k">
                    <if condition="$i eq count($_nav)">
                    <span>{$v}</span>
                    <else />
                    <span><a href="{$k}">{$v}</a>&gt;</span>
                    </if>
                    <assign name="i" value="$i+1" />
                </foreach>
            </div>

9、gt标签

<gt name="three_menu["allow_publish"]" value="0">

10、present标签

<present name="three_menu["_child"]">

##################################################

项目应用部分

1、字符串截取,超过10个字符显示…

<li>
    <a title="{$task.task_name}">{$task.task_name|mb_substr=0,10,"UTF8"}
    <if condition="mb_strlen($task["task_name"]) gt 10">...</if>
    </a>
</li>

2、switch…case应用

 <switch name="task["status"]" >
    <case value="-1" break="1"><li class="warning" id ="{$task["id"]}" status = "-1"></case>
    <case value="1"><li class="being" id ="{$task["id"]}" status = "1"></case>
    <case value="2"><li class="success" id ="{$task["id"]}" status = "2"></case>
    <case value="3"><li class="waitting" id ="{$task["id"]}" status = "3"></case>
    <default /><li class="waitting" id ="{$task["id"]}" status = "0">
</switch>
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。