牛骨文教育服务平台(让学习变的简单)
博文笔记

ECSHOP 添加自定义动态库项目详解

创建时间:2017-01-04 投稿人: 浏览次数:335

对于如何添加静态库项目,这个有很多人写过,我用的是ecshop 2.7.2版,这里不多说了,我这里要讲的是如何 添加自定义动态库项目.

实现在后台 模板设置页里能看到最下边红色框内多出的 动态项目库

需要修改的地方有:(csdn的源码贴出挺麻烦的, 不知道怎么用不同颜色标出,只好在添加修改的地方用 后加的字样来标出了)

1、编制好你需要添加的动态库项目文件,我在这里添加的是 cat_promotion.lbi ,放置的位置是所在模版(我这里用的模版名称是 “redbaby ” ) 的 library目录中,对应完整目录是: hemes edbabylibrary ;

我这里的该库文件内容代码如下:(注意下调用的列表对象变量这里是 $cat_promotion)

[html] view plain copy
<div class="index_hotOuter">  
    <div class="index_hotTitle">精选热销</div>  
    <div class="index_hotBody">  
    <!--{foreach from=$cat_promotion<span style="color:#ff0000;"> </span>item=goods name="promotion_foreach"}-->  
          <div class="index_hotBodyBox" >  
            <div class="hotPic"><a href="{$goods.url}"><img src="{$goods.thumb}" border="0" alt="{$goods.name|escape:html}" /></a></div>  
            <div class="hotName"><a href="{$goods.url}" title="{$goods.name|escape:html}">{$goods.short_name|escape:html}</a></div>  
            <div class="hotInfo"><span class="price02" style="color:#CC0000">{$goods.promote_price}</span></div>  
          </div>  
    <!--{/foreach}-->  
    </div>  
    <div class="index_hotMore"><a href="brand.php" target=_blank></a></div>  
</div>  

2 、添加语言项

找到 languageszh_cnadmin emplate.PHP

打开后,找到这个位置

这里写图片描述

在最后添加

[html] view plain copy
$_LANG["template_libs"]["cat_promotion"] = "分类促销商品";  

这样完成了语言项添加。

3、修改 adminincludeslib_template.php

[php] view plain copy
/* 动态库项目 */  
$dyna_libs = array(  
    "cat_goods",  
    "brand_goods",  
    "suppliers_goods",  
    "cat_articles",  
    "ad_position",  
    //我这里加上下边的预定义的动态库项目文件名  
[php] view plain copy
"cat_promotion"  

4、上边都做完了,然后做什么呢,关键的地方到了,我们找到前台显示页面的主php文件中,这里找到的 index.php

里面有:

[php] view plain copy
/* 页面中的动态内容 */  
 assign_dynamic("index");  

这里就是在前台页面中加载动态项目库的函数了,这个函数在哪里呢?

在这个地方: includeslib_main.php

找到这个函数,做修改,加入你自己的东东:

[php] view plain copy
/** 
 * 获得指定页面的动态内容 
 * 
 * @access  public 
 * @param   string  $tmp    模板名称 
 * @return  void 
 */  
function assign_dynamic($tmp)  
{  
    $sql = "SELECT id, number, type FROM " . $GLOBALS["ecs"]->table("template") .  
        " WHERE filename = "$tmp" AND type > 0 AND remarks ="" AND theme="" . $GLOBALS["_CFG"]["template"] . """;  
    $res = $GLOBALS["db"]->getAll($sql);  

   foreach ($res AS $row)  
    {  
        switch ($row["type"])  
        {  
            case 1:  
                /* 分类下的商品 */  
                $GLOBALS["smarty"]->assign("goods_cat_" . $row["id"], assign_cat_goods($row["id"], $row["number"]));  
            break;  
            case 2:  
                /* 品牌的商品 */  
                $brand_goods = assign_brand_goods($row["id"], $row["number"]);  

                $GLOBALS["smarty"]->assign("brand_goods_" . $row["id"], $brand_goods["goods"]);  
                $GLOBALS["smarty"]->assign("goods_brand_" . $row["id"], $brand_goods["brand"]);  
            break;  
            case 3:  
                /* 文章列表 */  
                $cat_articles = assign_articles($row["id"], $row["number"]);  

                $GLOBALS["smarty"]->assign("articles_cat_" . $row["id"], $cat_articles["cat"]);  
                $GLOBALS["smarty"]->assign("articles_" . $row["id"], $cat_articles["arr"]);  
            break;  
      case 5:  
                /* 分类下的促销商品    后加---*/  
                $GLOBALS["smarty"]->assign("promotion_cat_" . $row["id"], assign_cat_promotion($row["id"], $row["number"]));  
            break;  

        }  
    }  
}  

上边的这个 函数 assign_cat_promotion(row[′id′],row[‘number’])); 你要自己定义,用来获取后台模板设置的时候指定一些参数,我这边定义在 includelib_goods.php里,函数头如下:

[php] view plain copy
/** 
 * 获得指定分类下的促销商品 
 * 
 * @access  public 
 * @param   integer     $cat_id     分类ID 
 * @param   integer     $num        数量 
 * @param   string      $from       来自web/wap的调用 
 * @param   string      $order_rule 指定商品排序规则 
 * @return  array 
 */  
function assign_cat_promotion($cat_id, $num = 0, $from = "web", $order_rule = "")  
{  
 另外,在includelib_main.php中还要找到这个函数,做如下添加:

[php] view plain copy
/** 
 * 替换动态模块 
 * 
 * @access  public 
 * @param   string       $matches    匹配内容 
 * 
 * @return string        结果 
 */  
function dyna_libs_replace($matches)  
{  
    $key = "/" . $matches[1];  

    if ($row = array_shift($GLOBALS["libs"][$key]))  
    {  
        $str = "";  
        switch($row["type"])  
        {  
            case 1:  
                // 分类的商品  
                $str = "{assign var="cat_goods" value=$cat_goods_" .$row["id"]. "}{assign var="goods_cat" value=$goods_cat_" .$row["id"]. "}";  
                break;  
            case 2:  
                // 品牌的商品  
                $str = "{assign var="brand_goods" value=$brand_goods_" .$row["id"]. "}{assign var="goods_brand" value=$goods_brand_" .$row["id"]. "}";  
                break;  
            case 3:  
                // 文章列表  
                $str = "{assign var="articles" value=$articles_" .$row["id"]. "}{assign var="articles_cat" value=$articles_cat_" .$row["id"]. "}";  
                break;  
            case 4:  
                //广告位  
                $str = "{assign var="ads_id" value=" . $row["id"] . "}{assign var="ads_num" value=" . $row["number"] . "}";  
                break;  
      case 5:  
         // 分类的促销商品  -------后加的  
                $str = "{assign var="cat_promotion" value=$cat_promotion_" .$row["id"]. "}{assign var="promotion_cat" value=$promotion_cat_" .$row["id"]. "}";  
                break;  
        }  
        return $str . $matches[0];  
    }  
    else  
    {  
        return $matches[0];  
    }  
}  

这样结束lib_main.php的修改。

5、上边数据准备好,那要在后台的模板设置里能看到动态项目库,如这样格式:(注意下边红色框内是动态库项目调用的地方,我添加的就是 红色椭圆框内的)需要修改2个文件,一个是 admin emplate.php具体需要修改的地方见最后一行示例:

(1)

[php] view plain copy
/* 动态内容 */  
 $cate_goods   = array();  
 $brand_goods  = array();  
 $cat_articles = array();  
 $ad_positions = array();  
 $cate_promotion = array(); //后加  

(2)

[php] view plain copy
foreach ($temp_libs AS $val)  
    {  
        /* 对动态内容赋值 */  
        if ($val["lib"] == "cat_goods")  
        {  
            /* 分类下的商品 */  
            if (isset($db_dyna_libs[$val["region"]][$val["library"]]) && ($row = array_shift($db_dyna_libs[$val["region"]][$val["library"]])))  
            {  
                $cate_goods[] = array("region" => $val["region"], "sort_order" => $val["sort_order"], "number" => $row["number"], "cats"=>cat_list(0, $row["id"]));  
            }  
            else  
            {  
                $cate_goods[] = array("region" => $val["region"], "sort_order" => $val["sort_order"], "number"=>0, "cats"=>cat_list(0));  
            }  
        }  

    /* 分类促销产品   后加的*/  
        elseif ($val["lib"] == "cat_promotion")  
        {  
            /* 分类下的商品 */  
            if (isset($db_dyna_libs[$val["region"]][$val["library"]]) && ($row = array_shift($db_dyna_libs[$val["region"]][$val["library"]])))  
            {  
                $cate_promotion[] = array("region" => $val["region"], "sort_order" => $val["sort_order"], "number" => $row["number"], "cats"=>cat_list(0, $row["id"]));  
            }  
            else  
            {  
                $cate_promotion[] = array("region" => $val["region"], "sort_order" => $val["sort_order"], "number"=>0, "cats"=>cat_list(0));  
            }  
        }  
(3)

[php] view plain copy
   assign_query_info();  
   $smarty->assign("ur_here",            $_LANG["03_template_setup"]);  
   $smarty->assign("curr_template_file", $curr_template);  
   $smarty->assign("temp_options",       $temp_options);  
   $smarty->assign("temp_regions",       $temp_regions);  
   $smarty->assign("cate_goods",         $cate_goods);  
   $smarty->assign("brand_goods",        $brand_goods);  
   $smarty->assign("cat_articles",       $cat_articles);  
   $smarty->assign("ad_positions",       $ad_positions);  
$smarty->assign("cate_promotion",      $cate_promotion);//后加  

   $smarty->assign("arr_cates",          cat_list(0, 0, true));  
   $smarty->assign("arr_brands",         get_brand_list());  
   $smarty->assign("arr_article_cats",   article_cat_list(0, 0, true));  
   $smarty->assign("arr_ad_positions",   get_position_list());  
$smarty->assign("arr_promotion",      cat_list(0, 0, true));//后加  

   $smarty->display("template_setup.htm");  


(4)

[php] view plain copy
/*------------------------------------------------------ */  
//-- 提交模板内容设置  
/*------------------------------------------------------ */  

if ($_REQUEST["act"] == "setting")  
{  
    admin_priv("template_setup");  

    $curr_template = $_CFG["template"];  
    $db->query("DELETE FROM " .$ecs->table("template"). " WHERE remarks = "" AND filename = "$_POST[template_file]" AND theme = "$curr_template"");  

    /* 先处理固定内容 */  
    foreach ($_POST["regions"] AS $key => $val)  
    {  
        $number = isset($_POST["number"][$key]) ? intval($_POST["number"][$key]) : 0;  
        if (!in_array($key, $GLOBALS["dyna_libs"]) AND (isset($_POST["display"][$key]) AND $_POST["display"][$key] == 1 OR $number > 0))  
        {  
            $sql = "INSERT INTO " .$ecs->table("template").  
                        "(theme, filename, region, library, sort_order, number)".  
                    " VALUES ".  
                        "("$curr_template", "$_POST[template_file]", "$val", "".$_POST["map"][$key]."", "" . @$_POST["sort_order"][$key] . "", "$number")";  
            $db->query($sql);  
        }  
    }  

    /* 分类的商品 */  
    if (isset($_POST["regions"]["cat_goods"]))  
    {  
        foreach ($_POST["regions"]["cat_goods"] AS $key => $val)  
        {  
            if ($_POST["categories"]["cat_goods"][$key] != "" && intval($_POST["categories"]["cat_goods"][$key]) > 0)  
            {  
                $sql = "INSERT INTO " .$ecs->table("template"). " (".  
                            "theme, filename, region, library, sort_order, type, id, number".  
                        ") VALUES (".  
                            ""$curr_template", ".  
                            ""$_POST[template_file]", "" .$val. "", "/library/cat_goods.lbi", ".  
                            """ .$_POST["sort_order"]["cat_goods"][$key]. "", 1, "" .$_POST["categories"]["cat_goods"][$key].  
                            "", "" .$_POST["number"]["cat_goods"][$key]. """.  
                        ")";  
                $db->query($sql);  
            }  
        }  
    }  

   /* 分类促销的商品   后加的*/  
    if (isset($_POST["regions"]["cat_promotion"]))  
    {  
        foreach ($_POST["regions"]["cat_promotion"] AS $key => $val)  
        {  
            if ($_POST["promotion"]["cat_promotion"][$key] != "" && intval($_POST["promotion"]["cat_promotion"][$key]) > 0)  
            {  
                $sql = "INSERT INTO " .$ecs->table("template"). " (".  
                            "theme, filename, region, library, sort_order, type, id, number".  
                        ") VALUES (".  
                            ""$curr_template", ".  
                            ""$_POST[template_file]", "" .$val. "", "/library/cat_promotion.lbi", ".  
                            """ .$_POST["sort_order"]["cat_promotion"][$key]. "", 5, "" .$_POST["promotion"]["cat_promotion"][$key].  
                            "", "" .$_POST["number"]["cat_promotion"][$key]. """.  
                        ")";  
                $db->query($sql);  
            }  
        }  
    }  
(5)

[php] view plain copy
/* 对提交内容进行处理 */  
   $post_regions = array();  
   foreach ($_POST["regions"] AS $key => $val)  
   {  
       switch ($key)  
       {  
           case "cat_goods":  
               foreach ($val AS $k => $v)  
               {  
                   if (intval($_POST["categories"]["cat_goods"][$k]) > 0)  
                   {  
                       $post_regions[] = array("region"     => $v,  
                                               "type"       => 1,  
                                               "number"     => $_POST["number"]["cat_goods"][$k],  
                                               "library"    => "/library/" .$key. ".lbi",  
                                               "sort_order" => $_POST["sort_order"]["cat_goods"][$k],  
                                               "id"         => $_POST["categories"]["cat_goods"][$k]);  
                   }  
               }  
               break;  
 case "cat_promotion": //后加  
               foreach ($val AS $k => $v)  
               {  
                   if (intval($_POST["promotion"]["cat_promotion"][$k]) > 0)  
                   {  
                       $post_regions[] = array("region"     => $v,  
                                               "type"       => 5,  
                                               "number"     => $_POST["number"]["cat_promotion"][$k],  
                                               "library"    => "/library/" .$key. ".lbi",  
                                               "sort_order" => $_POST["sort_order"]["cat_promotion"][$k],  
                                               "id"         => $_POST["categories"]["cat_promotion"][$k]);  
                   }  
               }  
               break;  

到此,修改完template.php文件

6、修改 admin emplates emplate_setup.htm 这个是模板设置页面的模板文件。

(1)

[html] view plain copy
<!-- cateogry goods list -->  
  <tr>  
    <td colspan="6" style="background-color: #F4FBFB; font-weight: bold" align="left"><a href="javascript:;" onclick="addCatGoods(this)">[+]</a> {$lang.template_libs.cat_goods} </td>  
  </tr>  
  {foreach from=$cate_goods item=library key=lib_name}  
  <tr>  
    <td class="first-cell" align="right"><a href="javascript:;" onclick="removeRow(this)">[-]</a></td>  
    <td><select name="regions[cat_goods][]"><option value="">{$lang.select_plz}</option>{html_options values=$temp_regions output=$temp_regions selected=$library.region}</select></td>  
    <td><input type="text" name="sort_order[cat_goods][]" value="{$library.sort_order}" size="4" /></td>  
    <td><select name="categories[cat_goods][]"><option value="">{$lang.select_plz}</option>{$library.cats}</select></td>  
    <td><input type="text" name="number[cat_goods][]" value="{$library.number}" size="4"  /></td>  
    <td></td>  
  </tr>  
  {/foreach}  

 <!-- cateogry promotion goods list   后加的 -->  
  <tr>  
    <td colspan="6" style="background-color: #F4FBFB; font-weight: bold" align="left"><a href="javascript:;" onclick="addCatPromotion(this)">[+]</a> {$lang.template_libs.cat_promotion} </td>  
  </tr>  
  {foreach from=$cate_promotion item=library key=lib_name}  
  <tr>  
    <td class="first-cell" align="right"><a href="javascript:;" onclick="removeRow(this)">[-]</a></td>  
    <td><select name="regions[cat_promotion][]"><option value="">{$lang.select_plz}</option>{html_options values=$temp_regions output=$temp_regions selected=$library.region}</select></td>  
    <td><input type="text" name="sort_order[cat_promotion][]" value="{$library.sort_order}" size="4" /></td>  
    <td><select name="promotion[cat_promotion][]"><option value="">{$lang.select_plz}</option>{$library.cats}</select></td>  
    <td><input type="text" name="number[cat_promotion][]" value="{$library.number}" size="4"  /></td>  
    <td></td>  
  </tr>  
  {/foreach}  

(2)在 admin emplates emplate_setup.htm 的下边的js脚本里,要添加如下红色的(后加的)代码

[javascript] view plain copy
<script language="JavaScript">  
<!--  
var currTemplateFile = "{$curr_template_file}";  
var selCategories    = "{$arr_cates}";  
var selRegions       = new Array();  
var selBrands        = new Array();  
var selArticleCats   = new Array();  
var selAdPositions   = new Array();  
var selPromotion     = "{$arr_promotion}";  //后加的  

{foreach from=$temp_regions item=region key=id}  
selRegions[{$id}] = "{$region|escape:quotes}";  
{/foreach}  

{foreach from=$arr_brands item=brand key=id}  
selBrands[{$id}] = "{$brand|escape:quotes}";  
{/foreach}  

{foreach from=$arr_article_cats item=cat key=id}  
selArticleCats[{$id}] = "{$cat}";  
{/foreach}  

{foreach from=$arr_ad_positions item=ad_position key=id}  
selAdPositions[{$id}] = "{$ad_position|escape}";  
{/foreach}  


{literal}  
[javascript] view plain copy
......  
[javascript] view plain copy
/** 
 * 增加一个分类的商品 
 */  
function addCatGoods(obj)  
{  
    var rowId = rowindex(obj.parentNode.parentNode);  

    var table = obj.parentNode.parentNode.parentNode.parentNode;  

    var row  = table.insertRow(rowId + 1);  
    var cell = row.insertCell(-1);  
    cell.innerHTML = "<a href="javascript:;" onclick="removeRow(this)">[-]</a>";  
    cell.className = "first-cell";  
    cell.align     = "right";  

    cell           = row.insertCell(-1);  
    cell.innerHTML = buildRegionSelect("regions[cat_goods][]");  

    cell           = row.insertCell(-1);  
    cell.innerHTML = "<input type="text" name="sort_order[cat_goods][]" value="0" size="4" />";  

    cell           = row.insertCell(-1);  
    cell.innerHTML = "<select name="categories[cat_goods][]"><option value="">" + selectPlease + "</option>" + selCategories + "</select>";  

    cell           = row.insertCell(-1);  
    cell.innerHTML = "<input type="text" name="number[cat_goods][]" value="5" size="4" />";  

    cell           = row.insertCell(-1);  
}  

/** 
 * 增加一个分类的促销商品,------后加 
 */  
function addCatPromotion(obj)  
{  
    var rowId = rowindex(obj.parentNode.parentNode);  

    var table = obj.parentNode.parentNode.parentNode.parentNode;  

    var row  = table.insertRow(rowId + 1);  
    var cell = row.insertCell(-1);  
    cell.innerHTML = "<a href="javascript:;" onclick="removeRow(this)">[-]</a>";  
    cell.className = "first-cell";  
    cell.align     = "right";  

    cell           = row.insertCell(-1);  
    cell.innerHTML = buildRegionSelect("regions[cat_promotion][]");  

    cell           = row.insertCell(-1);  
    cell.innerHTML = "<input type="text" name="sort_order[cat_promotion][]" value="0" size="4" />";  

    cell           = row.insertCell(-1);  
    cell.innerHTML = "<select name="promotion[cat_promotion][]"><option value="">" + selectPlease + "</option>" + selPromotion + "</select>";  

    cell           = row.insertCell(-1);  
    cell.innerHTML = "<input type="text" name="number[cat_promotion][]" value="5" size="4" />";  

    cell           = row.insertCell(-1);  
}  

......  
[javascript] view plain copy
{/literal}  
//-->  
</script>  

到此结束,就可以实现在后台操作模板实现动态项目库的调用了。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。