用zencart来复制别人的网站成本低,效率高。前面我发了一篇有关开发自己的zencat模板的文章(《来自damon的zencart二次开发教程-3.1开发自己的zencart模板》),里面只有一些基础的理论,下面,我们就来实际操作一下。

1.利用离线浏览器将(《离线浏览器Teleport_Pro完全教程与安装文件下载》)你的目标网页文件(图片,html以及css样式表,js代码)统统下载下来。打开你的zencart文件夹,将默认模板文件复制一个,然后重命名为你自定义的名称,修改template_info.php文件(详细请参考《来自damon的zencart二次开发教程-3.1开发自己的zencart模板》)。将一些基本的操作做完之后,省下的就是分离将网页html文件分离为模板文件了。

2.在分离之前,我们需要对模板文件结构进行深入了解,可以参考我之前发的一篇文章(《zencart与drupal整合(第2天)—zencart模块调用机制》)。

2.1 头部模板文件html_header.php

$directory_array = $template->get_template_part($template->get_template_dir
('.css',DIR_WS_TEMPLATE, $current_page_base,'css'), '/^style/', '.css');

这段代码是用于加载样式表的,css文件只要满足文件名以style开头就会自动加载。(jscript文件也是同样的规则,加载文件夹有 includes/modules/pages/PAGENAME 和 includes/templates/YOURTEMPLATE/jscript。)

2.2页眉tpl_header.php

网站logo,tagline,产品分类导航以及登陆、搜索模块。

其中分类导航的模板文件是templates/tpl_modules_categories_tabs.php,代码如下:

 include(DIR_WS_MODULES . zen_get_module_directory(FILENAME_CATEGORIES_TABS));
?>
<?php if (CATEGORIES_TABS_STATUS == '1' && sizeof($links_list) >= 1) { ?>
<div id="navCatTabsWrapper">
<div id="navCatTabs">
<ul>
<?php for ($i=0, $n=sizeof($links_list); $i<$n; $i++) { ?><li><?php echo $links_list[$i];?></li>
<?php } ?>
</ul>
</div>
</div>
<?php } ?>

我们可以利用id在style.css文件中找到相应的属性,修改样式。这里要注意的是,分类导航的字体,间距等都被定义在了230行中:

ul, #navSupp ul, #navCatTabs ul

搜索模块文件是sideboxes\tpl_search_header.php文件以及sideboxes\tpl_search.php。

常量HEADER_SEARCH_DEFAULT_TEXT用来修改搜索框中默认的文本。

Line 14至Line 20是用来判断提交按钮的样式是图片还是普通的按钮:

  if (strtolower(IMAGE_USE_CSS_BUTTONS) == 'yes') {//当常量IMAGE_USE_CSS_BUTTONS为 yes时$content .= zen_draw_input_field('keyword', '', 'size="6" maxlength="30" style="width: 100px" value="' . HEADER_SEARCH_DEFAULT_TEXT . '" οnfοcus="if (this.value == \'' . HEADER_SEARCH_DEFAULT_TEXT . '\') this.value = \'\';" οnblur="if (this.value == \'\') this.value = \'' . HEADER_SEARCH_DEFAULT_TEXT . '\';"') . '&nbsp;' . zen_p_w_picpath_submit (BUTTON_IMAGE_SEARCH,HEADER_SEARCH_BUTTON);//图片形式的提交按钮} else {$content .= zen_draw_input_field('keyword', '', 'size="6" maxlength="30" style="width: 100px" value="' . HEADER_SEARCH_DEFAULT_TEXT . '" οnfοcus="if (this.value == \'' . HEADER_SEARCH_DEFAULT_TEXT . '\') this.value = \'\';" οnblur="if (this.value == \'\') this.value = \'' . HEADER_SEARCH_DEFAULT_TEXT . '\';"') . '&nbsp;<input type="submit" value="' . HEADER_SEARCH_BUTTON . '" style="width: 45px" />';//普通按钮。}

其中输出 submit 提交表单图片按钮函数 zen_p_w_picpath_submit($p_w_picpath, $alt = '', $parameters = '', $sec_class = '')

该函数的功能主要就是输出一个提交表单的图片按钮,跟一般的输出图片按钮差不多一样,不一样的是这个函数输出的是<input type="p_w_picpath" />类型的按钮,而一般的图片按钮zen_p_w_picpath_button输出的是图片的链接。
参数解析:
$p_w_picpath:输出图片的名字,默认的目录是在模板目录下的buttons/目录下面的图片名字,输入对应的图片名字就可以了
$alt:图片<img>标签的alt属性值。
$parameters:参数,可以是其他属性的值,一般这个很少使用,默认为空
$sec_class:该图片按钮的CSS类,默认为空,只有使用CSS按钮的使用该参数才会用到

function zen_p_w_picpath_submit($p_w_picpath, $alt = '', $parameters = '', $sec_class = '') {global $template, $current_page_base, $zco_notifier;if (strtolower(IMAGE_USE_CSS_BUTTONS) == 'yes' && strlen($alt)<30) return zenCssButton($p_w_picpath, $alt, 'submit', $sec_class /*, $parameters = ''*/);$zco_notifier->notify('PAGE_OUTPUT_IMAGE_SUBMIT');$p_w_picpath_submit = '<input type="p_w_picpath" src="' . zen_output_string($template->get_template_dir($p_w_picpath, DIR_WS_TEMPLATE, $current_page_base, 'buttons/' . $_SESSION['language'] . '/') . $p_w_picpath) . '" alt="' . zen_output_string($alt) . '"';if (zen_not_null($alt)) $p_w_picpath_submit .= ' title=" ' . zen_output_string($alt) . ' "';if (zen_not_null($parameters)) $p_w_picpath_submit .= ' ' . $parameters;$p_w_picpath_submit .= ' />';return $p_w_picpath_submit;}

2.3整体布局tpl_main_page.php
sidebox边框以及左、右边栏left/right column 都可以在后台控制开启和关闭状态。而中间id为"centerColumn"的广告则为变量$body_code:

require($body_code);   //Line 122 prepares and displays center column

定义$body_code的相关文件:
includes/modules/pages/$main_page/main_template_vars.php
includes/templates/mytemplate/$main_page/tpl_{$main_page}_default.php
includes/templates/template_default/$main_page/tpl_{$main_page}_default.php
includes/templates/mytemplate/templates/tpl_{$main_page}_default.php
includes/templates/template_default/templates/tpl_{$main_page}_default.php
//定义整个HTML模板
includes/languages/english/html_includes/define_main_page.php

我们在这个位置放的最多的功能就是幻灯片效果,具体有关幻灯片安装与修改的教程,可以参考我的另一篇文章《来自damon的zencart二次开发教程-4.1制作首页幻灯片方法》。
2.4页脚tpl_footer.php,第一行中

require(DIR_WS_MODULES . zen_get_module_directory('footer.php'));

加载模块函数zen_get_module_directory($check_file,  $dir_only = ‘false’),根据当前输入的模块文件的名字,返回该文件所在的模块目录下的路径。用于验证该文件是否在模块目录下。验证该文件的时候首先验证模块目 录下当前选择的模板目录下是否有该文件,如果有的话,就引用当前模板目录下的模块文件,如果没有就选择默认的模块目录下面的模块文件。

function zen_get_module_directory($check_file, $dir_only = 'false') {
global $template_dir;
$zv_filename = $check_file;
if (!strstr($zv_filename, ‘.php’)) $zv_filename .= '.php';
if (file_exists(DIR_WS_MODULES . $template_dir . '/' . $zv_filename)) {
$template_dir_select = $template_dir . '/';
} else {
$template_dir_select = '';
}
if ($dir_only == 'true') {
return $template_dir_select;
} else {
return $template_dir_select . $zv_filename;
}
}

底部导航调用了模块文件tpl_ezpages_bar_footer.php,

<?php require($template->get_template_dir
('tpl_ezpages_bar_footer.php',DIR_WS_TEMPLATE, $current_page_base,'templates'). '/tpl_ezpages_bar_footer.php'); ?>

tpl_ezpages_bar_footer.php的第22 Line:

$page_query = $db->Execute("select * from " . TABLE_EZPAGES . "
where status_footer = 1 and
footer_sort_order > 0 order by footer_sort_order, pages_title");

我们可以知道表格EZPAGES是用来控制底部导航显示的内容的。此外,修改字段EZPAGES_STATUS_FOOTER中的数字可以控制是否显示(1为显示)。

if (EZPAGES_STATUS_FOOTER == '1' or (EZPAGES_STATUS_FOOTER == '2'
and (strstr(EXCLUDE_ADMIN_IP_FOR_MAINTENANCE, $_SERVER['REMOTE_ADDR']))))

$_SERVER['REMOTE_ADDR']是获取到的访问者ip,利用这一点,我们可以实现依据用户的IP来自动调用语言包,在 index.php文件中获取访问者的ip:$_SERVER['REMOTE_ADDR'],获取ip后,对ip进行判断,这里用 http://api.liqwei.com /location/?ip=$ip提供的接口,对访问者的ip进行判断,$IPINFO = file_get_contents ( “http://api.liqwei.com/location/?ip=$ip” );返回的内容会是国家,ip地址,已经线路,对返回的内容进行截取preg_match(‘|日本|’,$IPINFO),然后在调用相应的语言包。

3 zencart 商品列表

这部分的模板文件主要包括:\templates\tpl_index_product_list.php(主文件)、\templates \tpl_modules_product_listing.php(商品列表模块)、classes \split_page_results.php(分页函数).
关于zencart的分页功能,我们可以下载一款专门的分页插件:(product_pagination下载>>)。这款插件会重写分页函数,也就是split_page_results.php文件。下面,我们再来仔细研究一下这个函数:

class splitPageResults extends base {var $sql_query, $number_of_rows, $current_page_number, $number_of_pages, $number_of_rows_per_page, $page_name;
/*
$sql_query:查询数据库的SQL语句,初始化该类的对象的时候会给这个变量赋值。
$number_of_rows:保存返回查询结果数。
$current_page_number:当前页面的数字,就是第几页。
$number_of_pages:总共有多少页,
计算方法 $this->number_of_pages = ceil($this->number_of_rows / $this->number_of_rows_per_page);
$number_of_rows_per_page:每页显示的数量。这个变量由构造函数赋值。
如果要改变每页显示的数量,可以修改这个参数的值。
$page_name:分页的参数名字,默认是page,就是page=?这样。
*/var $formSuffix; /*v1.4.5-a-lat9*/
/*构造函数,主要是对类变量赋值,其中$query这个是必须要输入的参数值,
这个就是查询数据库的SQL语句,$max_rows这个是每页显示的数量,也必须的参数。
其他的可以使用默认值。*/function splitPageResults($query, $max_rows, $count_key = '*', $page_holder = 'page', $debug = false, $countQuery = "") {...}/* class functions功能函数 */// 显示分页链接
/*
第一个参数就是显示的页面数量,这个就是除了显示下一页的文字以外的数字,如果是6,那 就是显示从1-6,
第七个就是“下一页”这样的提示。$parameters 就是当前页面的一些参数。
*/function display_links($max_page_links, $parameters = '') {...}// 显示商品总数(Display Num)function display_count($text_output) {...
}

\templates\tpl_modules_product_listing.php中的函数调用代码:

$listing_split->display_links(MAX_DISPLAY_PAGE_LINKS, zen_get_all_get_params(array('page', 'info', 'x', 'y', 'main_page')))

zen_get_all_get_params()函数,获取$_GET这个数组的所有键和值,然后把指定不需要的变量去了,然后把剩下的参数重新 组合起来,返回这个组合的结果做为URL的参数 ,用来过滤掉$_GET中的指定参数('page', 'info', 'x', 'y', 'main_page')
建议:zencart 仿站的步骤应根据目标网站代码样式的复杂程度来区分,对于一些整体样式变化不大(相对于默认模板来说),JS代码较少的网站,我们可以直接把目标网站的源 码当做模板来套,而对于一些将整个默认模板的整体样式都做了较大修改,特效比较多的网站,建议还是直接复制一份默认模板的代码,然后对照着目标网站来修 改。

原创文章,转载请注明: 转载自电商沙龙ec-shalom.com,专研电商艺术。

本文链接地址: 来自damon的zencart二次开发教程-3.2复制模板(仿站)操作教程

Related posts:

  1. PHP生成和读取PDF文件的方法(FPDF使用教程)
  2. 用FPDF连接mysql数据库绘制表格
  3. 最好的网站验证码PHP类
  4. zencart与drupal整合(第1天)——zencart基础操作教程

转载于:https://blog.51cto.com/phpcnm/1187755

来自damon的zencart二次开发教程-3.2复制模板(仿站)操作教程相关推荐

  1. 来自damon的zencart二次开发教程-2.2登录模块分析

    我们在制作zencart的模板时,经常会遇到需要将zencart的登陆页面与注册账户页面分离的情况(在 默认情况下,点击"Login"按钮会进入登陆页面与注册账号页面,登录zenc ...

  2. 来自damon的zencart二次开发教程-3.1开发自己的zencart模板

    转载自:http://www.yunxiu.org/blog/ 今天在网上FQ看到一篇老外写的,关于制作zencart模板的文章.<Creating a new Zen Cart Templat ...

  3. 织梦仿站系列教程第二十三讲——列表页制作(二)

    织梦后台提示用户名不存在 查看数据库用户名被改为spider 织梦仿站系列教程第二十三讲--列表页制作(二) 这一讲,我们讲下列表页的分页代码,先找到如下代码: 865 1 href="ht ...

  4. Dede仿站系列教程

    织梦仿站系列教程第一讲--准备工作 http://www.cnzhanzhang.com/thread-271370-1-2.html 织梦仿站系列教程第二讲--首页框架 http://www.cnz ...

  5. 织梦仿站系列教程第十一讲——幻灯片的制作

    织梦仿站系列教程第十一讲--幻灯片的制作 我们还是顺着做吧,这一讲说说幻灯片代码的制作. 首先打开index.htm文档,找到幻灯片部分的代码.dedecms教程就是下面这段代码: <DIV i ...

  6. 织梦仿站系列教程第四讲——首页页首代码

    织梦仿站系列教程第四讲--首页页首代码 今天,我们接上一讲,继续开始我们的仿站之路. 这一讲分两个部分,第一部分,修改首页的页首代码,即之间的代码. 有网页标题title.网页关键字keywords. ...

  7. 织梦仿站系列教程第二十一讲——封面页制作(四)

    织梦搜索提示关键词不少于2个字节 织梦仿站系列教程第二十一讲--封面页制作(四) 看拳击在线的代码,晕,最新新闻和热门新闻竟然是JS调用,我们只好找到这个JS文件,转换成HTML,然后修改. 将如下代 ...

  8. matlab教程 for循环,Matlab for循环使用操作教程分享

    相信不少新手伙伴对Matlab for循环使用操作还不太了解,而下面的这篇文章笔者就专门为大伙分享了关于Matlab for循环使用操作教程,有需要的朋友不要错过哦. 首先安装Matlab, for循 ...

  9. 大学计算机基础实用教程重点知识,大学计算机基础实用操作教程

    <高等学校计算机应用规划教材:大学计算机基础实用操作教程>紧抓基础操作,突出重点,遵循教学规律.对于计算机实际操作过程的细节不求面面俱到,但对其中典型的功能都做了比较详细的讲解.此外,&l ...

最新文章

  1. 苏州大学9月计算机考试试题,2016年9月计算机一级考试题及答案
  2. ABAP:判断是否汉字
  3. 月活675万 三翼鸟以三大能力“重建”行业赛道
  4. MySQL buffer pool中的三种链
  5. js模块化:默认导出 export default
  6. 在Linux机器上配置NUD
  7. photoshop问题
  8. 二分排序java实现
  9. ChaiNext:比特币打穿4.2万美元,市场多空胶着
  10. XML 与动态添加控件
  11. 调幅广播系统建模与仿真
  12. excel如何批量查询手机号归属地
  13. 电子科技大学计算机系王教授,王书振 | 个人信息 | 西安电子科技大学个人主页...
  14. Cesium开发: Draco模型压缩
  15. 八大算法实现(Java)
  16. 基于TextRank的抽取式文本摘要(英文)
  17. GateWay入门Demo
  18. 2018春考计算机技能考试题目,(完整版)2018年山东春季高考技能考试信息技术类专业考试样题...
  19. Master横扫围棋界 AI智能风暴来袭
  20. 魔兽争霸在win7下的分辨率解决方法

热门文章

  1. activex for chrome 网银助手_这 10 款插件让你的 Chrome 更好用
  2. python 调用class不指定函数_python调用另一个.py中的类或函数
  3. c99变长数组_你学过数组,那你知道柔性数组吗?
  4. classin安卓手机安装条件_Classin在线学习平台安装指引——从这里打开知识的大门与北京四中网校名师面对面交流学习!...
  5. 计算机乐谱弱点,缺点简谱郑源
  6. linux进程假死的原因_一次Spring Boot假死诊断
  7. Windows Java、Tomcat、MySQL安装过程
  8. 网络IO超时的几种实现
  9. [译]深度神经网络的多任务学习概览(An Overview of Multi-task Learning in Deep Neural Networks)...
  10. [MySQL]命令行工具和基本操作