Ecshop中页面到底是怎么显示的呢?这个问题我们先放在一边,我们先研究一下ecshop是怎么将一系列从数据库中读取出来,然后传到显示页面中的。要解决这个问题我们要用根目录下的index.php和 theme/default下的index.dwt来作为用例。之所以用对应的两个文件夹,是因为在index.dwt中要显示的数据是通过smarty 从index.php中加载进来的。在index.php中有如下代码:
$position = assign_ur_here(); $smarty->assign('page_title', $position['title']); // 页面标题 $smarty->assign('ur_here', $position['ur_here']); // 当前位置
首先它是调用函数assign_ur_here,这样得到了变量$position,在变量$position中有title和ur_here这两个变量。在index.dwt中会有如下代码:
<title>{$page_title}<title>
是的,一旦$smarty->assign(’page_title’, $position['title'])执行完,$page_title就会在index.dwt中成为一个可以使用的变量。那么到目前为止我们知道如何从php脚本中往dwt文件中传我们需要的变量了。smarty就是通过这种机制将需要显示的内容传到对应的dwt文件中,这样就实现了页面与内容的分离。Php脚本中的数据我们已经有办法在dwt文件中得到了,下面就是要解决如何显示这些数据。凡是通过smarty加载到dwt文件中的变量,在显示的 时候都是加上{}来显示的。如果加载过来的是数组那么就要通过smarty的循环来显示,如果我传进来一个数组是 $school并且数组的每个条目中有name,那么下面的代码就是实现在页面中显示数组的每个条目的name。
Foreach($school as $k)
{
echo $k[‘name’] . ‘ ’;
}
这样就会在页面中将数组的内容全部打印出来了。
下面我们来举个例子来说明一下dwt到底是怎么显示的。
在index.php中的某个地方写上 smarty->assign(‘test’, ‘This is just a test!’);
然后在index.dwt中某个地方写上{$test},然后在首页中就会有“This is a test!”。当然它显示的地方跟你把{$test}放在哪里有关系。