SmartTemplate 实例分析——基本语法[basic]之Alternating_Colors

本文介绍如何使用SmartTemplate实现表格行的交替颜色显示。通过指定BEGIN与END标签,实现数组变量的迭代输出,同时利用ROWBIT和ROWCNT变量进行奇偶行样式控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SmartTemplate 1.2.1 官方源文件 可以从http://download.youkuaiyun.com/source/670995下载

本系列文章中的实例代码可以到我的资源http://download.youkuaiyun.com/source/670977下载
以前学东西都是东一块西一块的,现在正好有时间,学点东西,同时也做一下记录,以便备忘,也希望可以帮到学习SmartTemplate 的同学,初学,文中难免有纰漏,如有错误或不同意见,希望可以跟我联系
lxbin544930@163.com,我会及时更正,共勉。

2. Alternating_Colors

【Content】basic/Alternating_Colors.php:

  1. <?php
  2.     require_once "../config/smarttemplate_basic.cfg.php";
  3.     $page = new SmartTemplate("Alternating_Colors.html");
  4.     $users = array(
  5.                array'NAME' => 'John Doe',   'GROUP' => 'ADMIN' ),
  6.                array'NAME' => 'Jack Doe',   'GROUP' => 'SUPPORT' ),
  7.                array'NAME' => 'James Doe',  'GROUP' => 'GUEST' ),
  8.                array'NAME' => 'Jane Doe',   'GROUP' => 'GUEST' ),
  9.              );
  10.     $page->assign( 'users',  $users );
  11.     $page->output();
  12. ?>

【Template】templates/basic/Alternating_Colors.html:

  1. <style type="text/css">
  2.     .BG_0  { background-color: #D0D0D0; }
  3.     .BG_1  { background-color: #F0F0F0; }
  4. </style>
  5. <table border="1" cellpadding="2" cellspacing="0">
  6. <!-- BEGIN users -->
  7.     <tr class="BG_{ROWBIT}">
  8.         <td>第{ROWCNT}行</td>
  9.         <td>{NAME}</td>
  10.         <td>{GROUP}</td>
  11.     </tr>
  12. <!-- END users -->
  13. </table>

【Return】

  1. <style type="text/css">
  2.     .BG_0  { background-color: #D0D0D0; }
  3.     .BG_1  { background-color: #F0F0F0; }
  4. </style>
  5. <table border="1" cellpadding="2" cellspacing="0">
  6.     <tr class="BG_0">
  7.         <td>第0行</td>
  8.         <td>John Doe</td>
  9.         <td>ADMIN</td>
  10.     </tr>
  11.     <tr class="BG_1">
  12.         <td>第1行</td>
  13.         <td>Jack Doe</td>
  14.         <td>SUPPORT</td>
  15.     </tr>
  16.     <tr class="BG_0">
  17.         <td>第2行</td>
  18.         <td>James Doe</td>
  19.         <td>GUEST</td>
  20.     </tr>
  21.     <tr class="BG_1">
  22.         <td>第3行</td>
  23.         <td>Jane Doe</td>
  24.         <td>GUEST</td>
  25.     </tr>
  26. </table>

【效果图】

【琐记】

上一篇Blog里讲到了模板的简单赋值替换,只是单纯的将一个单模板变量{TITLE}替换为我们需要的值,然后输出,就像我们学C的时候遇到的“定义一个string类型变量,然后给这个变量赋值,最后printf这个变量”一样,只是很简单的应用。

在实际开发中,我们会遇到类似上图的报表数据,如果用SmartTemplate模板我们应该怎么做呢?这里先不做回答,我们先看一个生活中的例子,如果我们要送给某人某些东西,首先我们要先拿到东西,然后通过某些途径直接或间接(电话或住址等)地找到这个人,然才能把指定的东西给他。那么好,我们再回到Hello_Word的哪一篇,Hello_Word.php通过new tempate('')带我们来到Hello_Word.html的家门口,通过{TITLE}找到要接受指定值的人,这样寄送的工作完成,之后就是output了,很简单,貌似啰嗦了很长-_- !

接下来就是当前的问题,要表现类似上图的报表数据,应该怎么办?要通过怎样的途径才能找到要赋值的数据区域,又要给它什么样的东西(数据类型)他才会接收,当然至于怎样接受是模板类本身要解决的问题不用我们管啦。

SmartTemplate模板使用<!-- BEGIN users-->.....<!-- END users-->来指定users的数据块,php文件通过它来找到要替换的数组变量users,并将欲替换array变量$users按KEY入座,并迭代替换,我们看Alternating_Colors.html中的{NAME}{GROUP}与Alternating_Colors.php中的$users数组做对照就会明白了。还有一个问题就是{ROWBIT}和{ROWCNT}是什么意思呢?中文中有顾名思义,英文中也有,呵呵。。

ROWBIT可以姑且理解为行的bit值,只有0和1,这样如果我们要做奇偶行判断就很方便了;

ROWCNT就可以理解为行的count值,也就是数据行号,只不过它的起始位是0,如果需要起始位为1,只要修改include/class.smarttemplateparser.php文件123行

  1. "/$$block"."['ROWCNT']=/$rowcnt;/n"

改为

  1. "/$$block"."['ROWCNT']=/$rowcnt+1;/n"

就OK了,如果修改之后没有看到预期的效果,清空一下temp文件夹再试。

【附录】
include/class.smarttemplateparser.php中解析<!-- BEGIN users-->.....<!-- END users-->的PHP代码(不做解释,仅供参考,方便理解和查阅)

  1.             //  'BEGIN - END' Blocks
  2.             if (preg_match_all('/<!-- BEGIN ([a-zA-Z0-9_.]+) -->/', $page, $var))
  3.             {
  4.                 foreach ($var[1] as $tag)
  5.                 {
  6.                     list($parent, $block)  =  $this->var_name($tag);
  7.                     $code  =  "<?php/n"
  8.                             . "if (!empty(/$$parent"."['$block'])){/n"
  9.                             . "if (!is_array(/$$parent"."['$block']))/n"
  10.                             . "/$$parent"."['$block']=array(array('$block'=>/$$parent"."['$block']));/n"
  11.                             . "/$_tmp_arr_keys=array_keys(/$$parent"."['$block']);/n"
  12.                             . "if (/$_tmp_arr_keys[0]!='0')/n"
  13.                             . "/$$parent"."['$block']=array(0=>/$$parent"."['$block']);/n"
  14.                             . "/$_stack[/$_stack_cnt++]=/$_obj;/n"
  15.                             . "foreach (/$$parent"."['$block'] as /$rowcnt=>/$$block) {/n"
  16.                             . "/$$block"."['ROWCNT']=/$rowcnt;/n"
  17.                             . "/$$block"."['ALTROW']=/$rowcnt%2;/n"
  18.                             . "/$$block"."['ROWBIT']=/$rowcnt%2;/n"
  19.                             . "/$_obj=&/$$block;/n?>";
  20.                     $page  =  str_replace("<!-- BEGIN $tag -->",  $code,  $page);
  21.                 }
  22.             }

今天电脑中毒,开机就弹svchost.exe错误,任务管理器还罢工,搞了一下午才算OK了,郁闷。。。,可能情绪会影响文中某些语句的表达,如有语无伦次、语意模糊的地方希望大家多多拍砖,家里在改房子-_-!!。

明日任务:SmartTemplate 实例分析——基本语法[basic]之Nested_Blocks.html(这是一个嵌套两个<!-- BEGAIN ** --><!-- END *** -->数据块的例子,鉴于本文已经涉及到相关内容,故该Blog会写的比较简单)

资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在本文中,我们将探讨如何通过 Vue.js 实现一个带有动画效果的“回到顶部”功能。Vue.js 是一款用于构建用户界面的流行 JavaScript 框架,其组件化和响应式设计让实现这种交互功能变得十分便捷。 首先,我们来分析 HTML 代码。在这个示例中,存在一个 ID 为 back-to-top 的 div 元素,其中包含两个 span 标签,分别显示“回到”和“顶部”文字。该 div 元素绑定了 Vue.js 的 @click 事件处理器 backToTop,用于处理点击事件,同时还绑定了 v-show 指令来控制按钮的显示与隐藏。v-cloak 指令的作用是在 Vue 实例渲染完成之前隐藏该元素,避免出现闪烁现象。 CSS 部分(backTop.css)主要负责样式设计。它首先清除了一些默认的边距和填充,对 html 和 body 进行了全屏布局,并设置了相对定位。.back-to-top 类则定义了“回到顶部”按钮的样式,包括其位置、圆角、阴影、填充以及悬停时背景颜色的变化。此外,与 v-cloak 相关的 CSS 确保在 Vue 实例加载过程中隐藏该元素。每个 .page 类代表一个页面,每个页面的高度设置为 400px,用于模拟多页面的滚动效果。 接下来是 JavaScript 部分(backTop.js)。在这里,我们创建了一个 Vue 实例实例的 el 属性指定 Vue 将挂载到的 DOM 元素(#back-to-top)。data 对象中包含三个属性:backTopShow 用于控制按钮的显示状态;backTopAllow 用于防止用户快速连续点击;backSeconds 定义了回到顶部所需的时间;showPx 则规定了滚动多少像素后显示“回到顶部”按钮。 在 V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值