• templates/gentelella/base.tpl

       <!DOCTYPE html>
<html lang="en">
<!-- Smarty lib -->
<!-- 这里就调用了 templates/smarty/config/tplconf.json -->
<?php require('tpl/SmartySetup.php'); ?>
<!-- /Smarty lib --> <!-- head -->
<head>
<!-- 这里就只有一句 <title>{$tplconf["appName"]}</title> -->
<?php $smarty->display('tpl/head.tpl'); ?>
</head>
<!-- /head --> <body class="nav-md">
<div class="container body">
<div class="main_container"> <!-- left content -->
<!-- 调用导航栏模板 -->
<?php $smarty->display('tpl/nav.tpl'); ?>
<!-- /left content --> <!-- right content -->
// 这是是中间的功能显示,index, network, about, 等等。
<?php $smarty->display('tpl/********'); ?>
<!-- /right content --> <!-- footer content -->
<?php $smarty->display('tpl/foot.tpl'); ?>
<!-- /footer content --> </div>
</div> <!-- JavaScript -->
<?php $smarty->display('tpl/tail.tpl'); ?>
<!-- /JavaScript --> </body>
</html>
  • EmWebAdmin 的导航栏的配置文件是 templates/smarty/config/tplconf.json 文件

    // 这个文件的解析是在 templates/smarty/preprocess/SmartySetup.php 里面被调用然后解析
// NOTE: Smarty has a capital 'S'
require_once('smarty/Smarty.class.php');
$smarty = new Smarty();
// $smarty->debugging = true; // template configures
$tplconf = json_decode(file_get_contents("config/tplconf.json"), true);
$smarty->assign('tplconf', $tplconf); // system configures
$sysconf = json_decode(file_get_contents("config/sysconf.json"), true);
$smarty->assign('sysconf', $sysconf); // custom configures
$cusconf = json_decode(file_get_contents("config/cusconf.json"), true);
$smarty->assign('cusconf', $cusconf); include "tpl/tplFuncs.php";
  • 真正解析 的地方在 templates/smarty/preprocess/tplFuncs.php 里面

      $level = 1;
$active = "Home";
$currentPage = end(explode('/', $_SERVER['PHP_SELF']));
// end 返回的值里面数组的最后一个值
// explode 是以前面一个字符串作为分隔符将后面的字符串进行分割
// PHP_SELF 是当前页面的链接
// 所以这个是返回当前页面的 php 文件
/**
* @jsonData: nav data as JSON data format
* @level: indent level
* @active: Classify for php file
* @currentPage: current php file
*/
Function recursiveNav($jsonData, $level, $active, $currentPage)
{ // ret 变量存储了所有的 导航栏的文字的显示以及链接
$ret = ""; // 循环 nav 索引内的所有对应的子索引
foreach( $jsonData as $key => $value ) {
if( isset( $value['subitem'] ) ) {
// 判断 子索引对应的内容中有没有 subitem
// with the drop-down options
// 缩进的控制
$ret .= fillBlank($level);
$ret .= '<li';
if ($key == $active) $ret .= ' class="active"';
$ret .= '><a><i class="fa fa-'.$value["icon"].'"></i> '.$key.' <span class="fa fa-chevron-down"></span></a >'."\n"; // code indent 增加缩进
$ret .= fillBlank($level+1);
$ret .= '<ul class="nav child_menu">'."\n"; // recursive callback 子目录
$ret .= recursiveNav($value['subitem'], $level+2, $active, $currentPage);
// 缩进
$ret .= fillBlank($level+1);
$ret .= '</ul>'."\n";
// 缩进
$ret .= fillBlank($level);
$ret .= '</li>'."\n"; } else {
// 如果不存在,调用 fillBlank 函数,其实这个函数就是根据你的 level 决定ret的缩进
$ret .= fillBlank($level);
$ret .= '<li';
// 如果对应有 link 索引, 并且 link 索引对应的值存在 那么添加链接
if ($currentPage == $value['link'])
$ret .= ' class="current-page"';
$ret .= '><a href="'.$value['link'].'"><i class="fa fa-'.$value['icon'].'"></i>'.$key.'</a></li>'."\n"; }
} return $ret;
}
// 他把对应的 nav 索引下的数据作为第一个参数,级别为1, active 为home, 当前的页面的php文件
$smarty->assign("recursiveNav", recursiveNav($tplconf['nav'], $level, $active, $currentPage));
  • 最终这个模板的实现是在 templates/gentelella/nav.tpl 内。

     <div class="col-md-3 left_col">
<div class="left_col scroll-view">
<div class="navbar nav_title" style="border: 0;" align="center">
<a href="index.php"><img src="images/webadmin.png" class="img-rounded"></a>
</div> <div class="clearfix"></div>
<br /> <!-- sidebar menu -->
<div id="sidebar-menu" class="main_menu_side hidden-print main_menu">
<div class="menu_section">
<ul class="nav side-menu">
{$recursiveNav} <!-- 模板变量 -->
</ul>
</div>
</div>
<!-- /sidebar menu -->
</div>
</div>

最新文章

  1. HttpURLConnection使用getInputStream无法执行
  2. ABAP 销售范围
  3. Delphi Android程序启动过程
  4. 64位Linux下编译搭建Nginx1.5与PHP5.5(CentOS6.4)
  5. hibernate3 Duplicate class/entity mapping(异常)
  6. iOS - AutoLayout
  7. POJ 1538
  8. Java MD5校验
  9. windows Azure平台开发
  10. PredictionIO+Universal Recommender快速开发部署推荐引擎的问题总结(2)
  11. Windows系统下文件的概念及c语言对其的基本操作(甲)
  12. python Django之Ajax
  13. numpy C语言源代码调试(一)
  14. Android四大组件的简介
  15. Paint it really, really dark gray CodeForces - 717E
  16. (string 数组) leetcode 804. Unique Morse Code Words
  17. Mongo 用户创建及权限管理
  18. [UGUI]帧动画
  19. WordPress主题开发实例:查询单篇文章
  20. Intellij Idea 导入多个maven项目展示在左侧栏Maven Projects

热门文章

  1. 转:mac下安装Sublime Text
  2. [Firebase] 4. Firebase Object related Database
  3. Negative seek offset的解决方法
  4. 使用Nginx负载均衡搭建高性能.NETweb应用程序(转)
  5. BEGINNING SHAREPOINT&amp;#174; 2013 DEVELOPMENT 第2章节--SharePoint 2013 App 模型概览 理解三个SharePoint 部署模型 Apps
  6. 从Intellij IDEA14 SpringMVC4+Hibernate4问题得到的启发
  7. ajax提交gb2312的中文,出现乱码
  8. 调整弹出对话框在ASP.NET应用程序的大小
  9. OpenSAML2.X 在SSO系统中的应用
  10. java开源内容管理系统J4CMS支持真正静态化