目录
X-Cart 学习笔记(一)了解和安装X-Cart
X-Cart 学习笔记(二)X-Cart框架1
X-Cart 学习笔记(三)X-Cart框架2
X-Cart 学习笔记(四)常见操作
五、常见操作
1、定义模版对象和引用模版
定义smarty变量
Smarty是一种模版语言,它会将*.php中定义模版对象输出到*.tpl模版中,显示到用户的面前。
定义smarty变量:
1
|
$smarty ->assign(template_variable, php_variable);
|
如何将定义的smarty变量指定给某个模版呢,语法为:
1
|
func_display(template_name, $smarty );
|
例如根目录下的home.php的中最后几句:
1
2
3
4
5
6
7
|
$smarty ->assign( ‘main‘ , ‘catalog‘ ); //定义模版变量main,其实就是一个字符串’catelog’
$smarty ->assign( ‘cat‘ , $cat ); //定义模版变量cat,其实就是php的变量$cat
$smarty ->assign( ‘location‘ , $location ); //定义模版变量location,其实就是php的变量$location
func_display( ‘customer/home.tpl‘ , $smarty ); //这里就是指定该smarty含有的变量将被home.tpl使用,并且home.tpl所引入的所有模版都是可以使用它的。
|
smarty变量常见使用方法
在模版中,要使用smarty语法,只需要在我们正常的语法外加上{}即可,操作非常简单。注释时使用{*内容*}。
输出字符串或者数值型变量
{$main} {*表示输出$main的内容’catalog’*}
输入结果:catalog
输出数组
和大多数语言一样,输出数组可以使用循环,下标等。
Php:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
$users = array ();
$users []= array (
‘name’ => ‘Bowen’,
‘gender’ => ‘boy’,
‘age’ => 25,
‘address’ => ‘Chongqing, China’
); $users []= array (
‘name’ => ‘Bourne,
‘gender’ => ‘boy’,
‘age’ => 28,
‘address’ => ‘Chongqing, China’
); |
Tpl:
<table> {foreach from=$users item=user key=index} <tr><td>name:</td><td>{$user.name}</td></tr> <tr><td>gender:</td><td>{$user.gender}</td></tr> <tr><td>age:</td><td>{$user.age}</td></tr> <tr><td>address:</td><td>{$user.address}</td></tr> <tr><td colapan=2></td></tr> {/foreach} </table>
输出如下:
Name: |
Bowen |
Gender: |
Boy |
Age: |
25 |
Address: |
Chongqing, China |
| |
Name: |
Bourne |
Gender: |
Boy |
Age: |
28 |
Address: |
Chongqing, China |
|
直接输出Bowen的年龄:{Users.0.age}
其它循环语法:
- Where
{while $foo > 0}
{$foo--}
{/while}
- Section
- For
{section name=foo start=10 loop=20 step=2}
{$smarty.section.foo.index}
{/section}
{for $foo=1 to 3}
<li>{$foo}</li>
{/for}
定义smarty变量
出了在php中定义smarty变量,然后指定给模版外,在tpl中也可以定义变量,语法:
{assign item=name value=’Bowen’}
使用这个变量:{$name}
输出:Bowen
比较判断
同其他语法,使用if elseif else if作为判断语法,创建的比较关键字或者比较字符见下表:
运算符 |
别名 |
语法示例 |
含义 |
对应PHP语法 |
== |
eq |
$a eq $b |
等于 |
== |
!= |
ne, neq |
$a neq $b |
不等于 |
!= |
> |
gt |
$a gt $b |
大于 |
> |
< |
lt |
$a lt $b |
小于 |
< |
>= |
gte, ge |
$a ge $b |
大于等于 |
>= |
<= |
lte, le |
$a le $b |
小于等于 |
<= |
=== |
$a === 0 |
绝对等于 |
=== |
|
! |
not |
not $a |
非 (一元运算) |
! |
% |
mod |
$a mod $b |
取模 |
% |
is [not] div by |
$a is not div by 4 |
取模为0 |
$a % $b == 0 |
|
is [not] even |
$a is not even |
[非] 取模为0 (一元运算) |
$a % 2 == 0 |
|
is [not] even by |
$a is not even by $b |
水平分组 [非] 平均 |
($a / $b) % 2 == 0 |
|
is [not] odd |
$a is not odd |
[非] 奇数 (一元运算) |
$a % 2 != 0 |
|
is [not] odd by |
$a is not odd by $b |
[非] 奇数分组 |
($a / $b) % 2 != 0 |
例如:
{if $name eq ‘Bowen’}
< p>Hello,
Boy</p>
{else}
<p>Hello,
{$name}</p>
{if}
数学计算
{math}可以让模板设计者在模板中进行一些数学运算。
例:
{* $height=4, $width=5 *}
{math equation="x + y" x=$height y=$width}
输出:9
{multi}可以让模板设计者在模板中进行乘法运算。
{assign item=price value=10}
{assign item=amount value=2}
{multi
x=$price y=$amount assign=total}
{$total}
输出:20
调试输出
当在后台定义了一些smarty模版变量后,特别是一些多元数组,我们想知道传递到前台的时候数组是怎样的,又不想用调试工具,那么,在前台,可以使用调试语法输出:
{$variable_value|@debug_print_var}
引用模版
2、启用smarty调试
X-CART 系统自带有一种强大的smarty前台debug console,在启用之后,可以看到当前页面所加载的所有模版和所有模版变量的值,打开方法:登陆进入admin管理页面Settings->General settings找到Enable debugging console并且勾选启用。在浏览页面的时候,会发现如下对话框出现:
模版信息
变量信息
3、调用业务处理层文件
在x-cart 源代码中root/ include/func文件夹中包含了系统的业务处理处理文件,我们可以向C#引用命名空间一样,引用这些文件。
对func.cart.php的文件,引用方法如下:
x_load(‘cart’);
这样,就可以在引用了该文件的*.php中使用func.cart.php中的任意一个方法了。
4、数据库操作
在开发中,不可避免的,要对数据库进行操作,对数据库操作的方法都在func.db.php这个文件中,因此我们只需要了解这个文件中有哪些常用的方法就可以了。
- db_query($query, $delayed_query_type = false)
该方法是一个万能的方法,可以执行mysql的一切查询语句,如增删改查,阐述$query为查询字符串,失败返回false,成功,反馈查询到的值。
- db_exec($query, $params = array())
该方法同db_query,也是一个万能的查询方法。不过这个方法支持传递传输。更加的灵活。
例子一:
$query = "SELECT * FROM table WHERE field1=? AND field2=? AND field3=‘\\?‘" $params = array (val1, val2) query to execute: "SELECT * FROM table WHERE field1=‘val1‘ AND field2=‘val2‘ AND field3=‘\\?‘"
例子二:
$query = "SELECT * FROM table WHERE field1=? AND field2 IN (?)"
$params = array (val1, array(val2,val3))
query to execute:
"SELECT * FROM table WHERE field1=‘val1‘ AND field2 IN (‘val2‘,‘val3‘)"
- func_query_first($query, $use_cache = FALSE, $limit_first = TRUE)
执行sql语句,保存查询结果到数据,列明为键值,并且返回数组的第一个元素。查询结果为空返回array()。
- func_query_first_cell($query, $use_cache = false, $limit_first = true)
执行sql语句,保存查询结果到数据,列明为键值,并且返回数组的第一个元素第一个单元格的值。查询结果为空返回false。
- func_array2insert ($tbl, $arr, $is_replace = false, $is_ignore = false, $delims = array())
插入数据到指定的表。
- func_array2update ($tbl, $arr, $where = ‘‘, $skip_quotes = false)
更新指定表中的数据。
5、Session的使用
几乎所有的网站都会使用到session去保存站点的一些状态,身份等信息,x-cart也不例外,x-cart有自己的session使用方法。
注册session
x_session_register("var");
$var = "some value";
$smarty->assign("var", $var);
清除session
x_session_unregister("var");
6、清理系统缓存
x-cart站点在运行过程中,会产生很多的缓存文件,包括模版缓存,cache,
第一种
第一种简单的方法就是在浏览器中访问:站点/cleanup.php?auth_code=XXXXXXXXXXXXX,例如:
http://www.x-cart-plus.com/cleanup.php?auth_code=qskvt_oxdF0gqiafYrMt_cDfLv-BVf5W
在成功清理后,页面会输出:
The compiled templates cache (‘var/templates_c‘ directory) has been cleaned
up.
The X-Cart cache (‘var/cache‘ directory) has been cleaned up.
第二种
还有一种方法就是管理员在后台页面进行清理操作。进入后台管理页面,Tools->Maintenance,找到该页面的Clear templates/X-Cart cache节点,点击clear即可。
第三种
当然更为粗暴但是有效的方法就是进入服务器,直接在站点晴空站点更目录的var文件夹。
六、开发环境
1、开发工具
操作系统:这个应该没有什么限制,windows xp及以上,本人使用的时windows 8。
代码编辑器:前台开发可以使用一般的文本编辑器,Nodepad++,sublime等,但是为了方便后台调试,可以用一些强大的SDK,例如Zend Studio, PhpStorm,VS.PHP。本人习惯使用VS.PHP,主要是界面美观。
数据库管理工具:Navicate。
2、调试环境
无论是使用Zend Studio, PhpStorm还是VS.php,都需要配置php的调试环境,这里就不细说了,百度、谷歌一下,可以看到很多。
参考:http://www.chenxuanyi.cn/xampp-phpstorm-xdebug.html
http://blog.csdn.net/a600423444/article/details/12720543
如有错误,请指出,共同学习,谢谢!
尊重作者,转载请说明出处。