一般情况下使用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}"
// 本函数定义位置 \Application\Home\Common\function.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中添加
// 预先加载的标签库,库文件定义在\ThinkPHP\Library\OT\TagLib下
'TAGLIB_PRE_LOAD' => 'OT\\TagLib\\Article,OT\\TagLib\\Think',
// 这里使用的nav标签,会调用ThinkPHP\Library\OT\TagLib\Think.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>></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>