这是一篇记录在日记里面的技术文档,其实是对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的修改方法的更多相关文章

  1. 牛客网Java刷题知识点之子类继承不了父类里的(private属性、private方法、构造方法)

    不多说,直接上干货! 子类可以继承父类的属性和方法,除了那些private的外还有一样是子类继承不了的---构造器.对于构造器而言,它只能够被子类调用,而不能被子类继承. 调用父类的构造方法我们使用s ...

  2. Python多类继承中,子类默认继承哪个父类的构造函数__init__

    [1]python中如果子类有自己的构造函数,不会自动调用父类的构造函数,如果需要用到父类的构造函数,则需要在子类的构造函数中显式的调用. [2]如果子类没有自己的构造函数,则会直接从父类继承构造函数 ...

  3. 继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程

    继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的 ...

  4. Java中new一个子类对象的同时并不会自动创建一个父类对象

    首先重申一个概念:子类会继承父类所有非私有成员变量和方法,包括父类的构造方法 当创建一个子类对象时,首先开辟内存,然后调用类的构造函数,这里的构造函数由两部分组成,一部分是从父类继承而来的父类的构造方 ...

  5. java创建一个子类对象是会调用父类的构造方法会不会创建父类

    1.子类在创建实例后,类初始化方法会调用父类的初始化方法(除了Java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Obj ...

  6. 关于CSS中的定位使用子绝父相(子类绝对位置和父类相对位置)

    关于CSS中的定位使用子绝父相(子类绝对位置和父类相对位置) 欢迎转发,但是请填写原博客地址https://www.cnblogs.com/JNovice/p/9536910.html  前言:最近在 ...

  7. 再谈包访问权限 子类为何不能使用父类protected方法

    可见范围 权限的含义应该理解为控制范围,要把它理解成一个限制范围的空间,更为准确的说叫做可见范围 访问控制的等级,从最大权限到最小权限依次为:public.protected.包访问权限(没有关键词) ...

  8. 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性

    原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...

  9. Java中子类是否可以继承父类的static变量和方法而呈现多态特性

    静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明为static的方法有以下几条限制: 它们仅能调用其他的static 方法. 它 ...

随机推荐

  1. easyui_动态添加隐藏toolbar按钮

    目标:动态添加隐藏toolbar,比如根据权限动态显示新增.修改.删除按钮等 思路:先初始化toolbar的所有按钮,加载datagrid其它信息,再根据权限显示隐藏toolbar按钮 步骤: 1.加 ...

  2. 【BZOJ 1013】【JSOI2008】球形空间产生器sphere 高斯消元基础题

    最基础的高斯消元了,然而我把j打成i连WA连跪,考场上再犯这种错误就真的得滚粗了. #include<cmath> #include<cstdio> #include<c ...

  3. 【CodeForces 613A】Peter and Snow Blower

    题 题意 给出原点(不是(0,0)那个原点)的坐标和一个多边形的顶点坐标,求多边形绕原点转一圈扫过的面积(每个顶点到原点距离保持不变). 分析 多边形到原点的最小距离和最大距离构成的两个圆之间的圆环就 ...

  4. nmap常用命令

    1) 获取远程主机的系统类型及开放端口 nmap -sS -P0 -sV -O <target> 这里的 < target > 可以是单一 IP, 或主机名,或域名,或子网 - ...

  5. JSP 九个隐含JSP对象

    输入输出对象:request.response.out. 作用域通信对象:session.application.pageContext servlet对象:page.config 错误对象:exce ...

  6. Java-java中的有符号,无符号操作以及DataInputStream

    1. 无符号和有符号 计算机中用补码表示负数,并且有一定的计算方式:另外,用二进制的最高位表示符号,0表示正数.1表示负数.这种说法本身没错,可是要有一定的解释,不然它就是错的,至少不能解释,为什么字 ...

  7. javaScript模块化规范ADM与CMD

    模块化:模块化是指在解决某一个复杂问题时,依照一种分类的思维把问题进行系统性的分解处理,可以想象一个巨大的系统代码,被整合优化分割成逻辑性很强的模块时,对于软件是一种何等意义的存在. 模块化系统所必须 ...

  8. C# JavascriptSerializer与匿名对象打造Json的完美工具

    一:背景 在web项目中经常需要生成json数据,返回给前端ajax. 无论是ashx,还是WebMethod,可以人工的用字符串去拼接,最终得到json数据. 有没有更好的方法呢?我个人推荐使用Ja ...

  9. C# 跨线程访问或者设置UI线程控件的方法

    一.背景 在C#中,由于使用线程和调用UI的线程属于两个不同的线程,如果在线程中直接设置UI元素的属性,此时就会出现跨线程错误. 二.问题解决方法 使用控件自带的Invoke或者BeginInvoke ...

  10. Eighth scrum meeting - 2015/11/2

    由于之前的在线视频播放控件功能过于简单,我们今天从网上找了一个效果还不错的视频播放开源项目,在添加了复杂的依赖后终于能够正常使用了,效果比起之前来也好了很多,而且后续的视频下载功能也可以基于这个来开发 ...