ecshop设置一个子类对应多个父类并指定跳转url的修改方法
这是一篇记录在日记里面的技术文档,其实是对ecshop的二次开发。主要作用是将一个子类对应多个父类,并指定条跳转url的功能。ecshop是一款在线购物网站,感兴趣的可以下载源码看看。我们看看具体是怎么修改的。
1、数据库表“表前缀_category”添加如下字段
alter TABLE `ga_category` add `assign_child` varchar(255) default NULL;
alter TABLE `ga_category` add `jump_url` varchar(255) default NULL;
2、includes/lib_goods.php
get_categories_tree、get_child_tree函数中的
$cat_arr[$row['cat_id']]['url'] = build_uri('category', array('cid' => $row['cat_id']), $row['cat_name']);
改为
if(isset($row['jump_url']) != NULL && trim($row['jump_url']) != ''){
$cat_arr[$row['cat_id']]['url'] = $row['jump_url'];
}else{
$cat_arr[$row['cat_id']]['url'] = build_uri('category', array('cid' => $row['cat_id']), $row['cat_name']);
}
将
$three_arr[$row['cat_id']]['cat_id'] = get_child_tree($row['cat_id']);
改为
if(isset($row['assign_child']) != NULL && trim($row['assign_child']) != ''){
$three_arr[$row['cat_id']]['cat_id'] = get_assign_child_tree($row['assign_child']);
}else{
$three_arr[$row['cat_id']]['cat_id'] = get_child_tree($row['cat_id']);
}
将将获取子类的sql
$sql = 'SELECT cat_id,cat_name ,parent_id,is_show ' . 'FROM ' . $GLOBALS['ecs']->table('category') . "WHERE parent_id = '$parent_id' AND is_show = 1 ORDER BY sort_order ASC, cat_id ASC";
改为(添加assign_child, jump_url两个字段用于查询用)
$sql = 'SELECT cat_id,cat_name ,parent_id,is_show, template_file, assign_child, jump_url ' . 'FROM ' . $GLOBALS['ecs']->table('category') . "WHERE parent_id = '$parent_id' AND is_show = 1 ORDER BY sort_order ASC, cat_id ASC";
并添加函数
function get_assign_child_tree($tree_id = '') { $three_arr = array();
if($tree_id == '') return $three_arr; $child_sql = 'SELECT cat_id, cat_name, parent_id, is_show, assign_child, jump_url ' . 'FROM ' . $GLOBALS['ecs']->table('category') . "WHERE cat_id in( $tree_id ) AND is_show = 1 ORDER BY sort_order ASC, cat_id ASC"; $res = $GLOBALS['db']->getAll($child_sql); foreach ($res AS $row) { if ($row['is_show']) $three_arr[$row['cat_id']]['id'] = $row['cat_id']; $three_arr[$row['cat_id']]['name'] = $row['cat_name']; if(isset($row['jump_url']) != NULL && trim($row['jump_url']) != ''){
$three_arr[$row['cat_id']]['url'] = $row['jump_url'];
}else{
$three_arr[$row['cat_id']]['url'] = build_uri('category', array('cid' => $row['cat_id']), $row['cat_name']);
} if (isset($row['cat_id']) != NULL) {
if(isset($row['assign_child']) != NULL && trim($row['assign_child']) != ''){
$three_arr[$row['cat_id']]['cat_id'] = get_assign_child_tree($row['assign_child']);
}else{
$three_arr[$row['cat_id']]['cat_id'] = get_child_tree($row['cat_id']);
}
} }
return $three_arr; }
3、admin/category.php中作如下修改
在($_REQUEST['act'] == 'insert')、if ($_REQUEST['act'] == 'update')的条件中的
$cat['grade'] = !empty($_POST['grade']) ? intval($_POST['grade']) : 0;
$cat['filter_attr'] = !empty($_POST['filter_attr']) ? implode(',', array_unique(array_diff($_POST['filter_attr'],array(0)))) : 0;
后面添加
$cat['jump_url'] = !empty($_POST['jump_url']) ? trim($_POST['jump_url']) : ''; $cat['assign_child'] = !empty($_POST['assign_child']) ? trim($_POST['assign_child']) : '';
4、在admin/templates/category_info.htm的
<tr id="assign_child"> <td class="label">{$lang.assign_child}:</td> <td> <input type="text" name='assign_child' value='{$cat_info.assign_child}' size="32" /> </td> </tr>
中添加
<tr id="jump_url"> <td class="label">{$lang.jump_url}:</td> <td> <input type="text" name='jump_url' value='{$cat_info.jump_url}' size="32" /> </td> </tr>
5、languages/zh-cn/admin/category.php中添加如下语言描述
$_LANG['jump_url']='跳转url(指定跳转至的url)';
$_LANG['assign_child']='指定子类(将其id填写在输入框中即可,多个是用应为的“,”号隔开)';
ecshop设置一个子类对应多个父类并指定跳转url的修改方法的更多相关文章
- 牛客网Java刷题知识点之子类继承不了父类里的(private属性、private方法、构造方法)
不多说,直接上干货! 子类可以继承父类的属性和方法,除了那些private的外还有一样是子类继承不了的---构造器.对于构造器而言,它只能够被子类调用,而不能被子类继承. 调用父类的构造方法我们使用s ...
- Python多类继承中,子类默认继承哪个父类的构造函数__init__
[1]python中如果子类有自己的构造函数,不会自动调用父类的构造函数,如果需要用到父类的构造函数,则需要在子类的构造函数中显式的调用. [2]如果子类没有自己的构造函数,则会直接从父类继承构造函数 ...
- 继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程
继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的 ...
- Java中new一个子类对象的同时并不会自动创建一个父类对象
首先重申一个概念:子类会继承父类所有非私有成员变量和方法,包括父类的构造方法 当创建一个子类对象时,首先开辟内存,然后调用类的构造函数,这里的构造函数由两部分组成,一部分是从父类继承而来的父类的构造方 ...
- java创建一个子类对象是会调用父类的构造方法会不会创建父类
1.子类在创建实例后,类初始化方法会调用父类的初始化方法(除了Java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Obj ...
- 关于CSS中的定位使用子绝父相(子类绝对位置和父类相对位置)
关于CSS中的定位使用子绝父相(子类绝对位置和父类相对位置) 欢迎转发,但是请填写原博客地址https://www.cnblogs.com/JNovice/p/9536910.html 前言:最近在 ...
- 再谈包访问权限 子类为何不能使用父类protected方法
可见范围 权限的含义应该理解为控制范围,要把它理解成一个限制范围的空间,更为准确的说叫做可见范围 访问控制的等级,从最大权限到最小权限依次为:public.protected.包访问权限(没有关键词) ...
- 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性
原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...
- Java中子类是否可以继承父类的static变量和方法而呈现多态特性
静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明为static的方法有以下几条限制: 它们仅能调用其他的static 方法. 它 ...
随机推荐
- Linux/Unix System Level Attack、Privilege Escalation(undone)
目录 . How To Start A System Level Attack . Remote Access Attack . Local Access Attack . After Get Roo ...
- jquery ajax 应用返回类型是html json
jquery ajax 例子: function JudgeUserName() { $.ajax({ type:"GET&q ...
- 优秀大数据GitHub项目一览
http://blog.csdn.net/yaoxtao/article/details/50540485 优秀大数据GitHub项目一览 VMware CEO Pat Gelsinger曾说: 数据 ...
- ci中如何得到配置的url
$this->load->helper('url'); 然后,你可以用它查询并返回设置在config.php文件中的site和/或base URL: echo site_url(); ec ...
- Sql Server中启用分布式事务小结
1.web服务器与数据库服务器同时启动msdtc服务 2. 2台服务器做出如下配置: 控制面板->管理工具->组件服务->计算机->我的电脑->本地DTC .Net示例: ...
- VS2013配置Caffe卷积神经网络工具(64位Windows 7)——准备依赖库
VS2013配置Caffe卷积神经网络工具(64位Windows 7)--准备依赖库 2014年4月的时候自己在公司就将Caffe移植到Windows系统了,今年自己换了台电脑,想在家里也随便跑跑,本 ...
- WebSocket 是什么原理?为什么可以实现持久连接?
https://www.zhihu.com/question/20215561 作者:Ovear链接:https://www.zhihu.com/question/20215561/answer/ ...
- SQL2005之SA提权总结
首先,看看xp_cmdshell存在不,不存在的话先恢复下. Exec sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_confi ...
- ASP.NET版Memcached监控工具(转载)
在上一篇文章<使用Memcached提高.NET应用程序的性能>中周公讲述如何在.NET中使用Memcached来提高.NET应用程序的性 能.在实际的使用中有可能出现Memcached因 ...
- Ubuntu 为网卡配置静态IP地址
为网卡配置静态IP地址编辑文件/etc/network/interfaces:sudo vi /etc/network/interfaces并用下面的行来替换有关eth0的行:# The primar ...