X-Cart 学习笔记(四)常见操作
目录
X-Cart 学习笔记(一)了解和安装X-Cart
X-Cart 学习笔记(二)X-Cart框架1
X-Cart 学习笔记(三)X-Cart框架2
X-Cart 学习笔记(四)常见操作
五、常见操作
1、定义模版对象和引用模版
定义smarty变量
Smarty是一种模版语言,它会将*.php中定义模版对象输出到*.tpl模版中,显示到用户的面前。
定义smarty变量:
$smarty->assign(template_variable, php_variable);
如何将定义的smarty变量指定给某个模版呢,语法为:
func_display(template_name, $smarty);
例如根目录下的home.php的中最后几句:
$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:
$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
如有错误,请指出,共同学习,谢谢!
尊重作者,转载请说明出处。
X-Cart 学习笔记(四)常见操作的更多相关文章
- ThinkPHP 学习笔记 ( 四 ) 数据库操作之关联模型 ( RelationMondel ) 和高级模型 ( AdvModel )
一.关联模型 ( RelationMondel ) 1.数据查询 ① HAS_ONE 查询 创建两张数据表评论表和文章表: tpk_comment , tpk_article .评论和文章的对应关系为 ...
- python学习笔记(四)-文件操作
文件读写"""一.文件打开有3种方式 1.读 r #如果打开的文件的时候没有指定模式,那么默认是读 读写模式 r+,只要沾上r,文件不存在的时候,打开都会报错 2.写 w ...
- openresty 学习笔记四:连接mysql和进行相关操作
openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...
- tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)
续集请点击我:tensorflow学习笔记——使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- java学习笔记07--日期操作类
java学习笔记07--日期操作类 一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...
- ES6学习笔记<四> default、rest、Multi-line Strings
default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...
- 零拷贝详解 Java NIO学习笔记四(零拷贝详解)
转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...
- kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
随机推荐
- 为什么高手离不了Linux系统?这就是我的理由
摘要: 通过本文来记录下我在Linux系统的学习经历,聊聊我为什么离不了Linuxx系统,同时也为那些想要尝试Linux而又有所顾忌的用户答疑解惑,下面将为你介绍我所喜欢的Linux系统,这里有一些你 ...
- Halcon 10.0:Sample 分割边缘拟合圆Circles.hdev
处理流程:快速二值化(区域)->获取区域边缘->截取边缘->膨胀边缘区域(定位)->定位区域进行边缘检测->边缘分割:线和圆->选择属性为圆的弧->拟合圆 * ...
- 黑马程序员——【Java高新技术】——JDK1.5新特性:静态导入、可变参数、增强型for循环、自动装箱拆箱、枚举
---------- android培训.java培训.期待与您交流! ---------- 一.静态导入 1.import和import static区别: (1)import 是导入一个类或某个包 ...
- Libgdx 开发指南(1.2) 应用框架——模块概览
模块概览 引言 LibGDX由一些为一个典型游戏架构中的各个步骤提供服务的模块组成. Input:为所有平台提供一致的输入模型与处理器.支持键盘.触屏.加速度传感器与鼠标. Graphics:使用硬件 ...
- 更新包地址安装新版node.js
# apt-get update # apt-get install -y python-software-properties software-properties-common # add-ap ...
- Unity Sprite转Prefab
新项目使用Unity5.X,遇到了一些问题,其中就有Sprite的管理更新问题,查了一些资料,Mono推荐的是转为Prefab处理. 看了一些国外同行的处理方法,分析了一个编辑器插件脚本.学到了一些技 ...
- js 轮播图代码
js代码 (function(){ /** parent //父容器 changeTime //每次间隔几秒切换下一条 leaveTime //鼠标从小图上离开过后几秒继续切换 index //从第几 ...
- <转>九张图九句话
做个像石灰一样的人,别人越泼你冷水,你的人生越沸腾! 来自为知笔记(Wiz)
- Linux线程-pthread_kill
该函数可以用于向指定的线程发送信号: int pthread_kill(pthread_t threadId,int signal); 如果线程内不对信号进行处理,则调用默认的处理程式,如SIGQUI ...
- 程序跳转到访问一个确定的地址0x100000
用函数指针 把这个确定的地址转化成一个函数指针 这就明白了程序中调用函数的意义 测试代码如下: #include <stdio.h> void getMemory() { printf(& ...