许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  ECShop添加自定义动态库项目详解:手把手教程

ECShop添加自定义动态库项目详解:手把手教程

阅读数 20
点赞 0
article_banner

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

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

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

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

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

[html]view plaincopy


  1. <div class="index_hotOuter">  
  2.    <div class="index_hotTitle">精选热销</div>  
  3.    <div class="index_hotBody">  
  4.    <!--{foreach from=$cat_promotion<span style="color:#ff0000;"> </span>item=goods name="promotion_foreach"}-->  
  5.          <div class="index_hotBodyBox" >  
  6.            <div class="hotPic"><a href="{$goods.url}"><img src="{$goods.thumb}" border="0" alt="{$goods.name|escape:html}" /></a></div>  
  7.            <div class="hotName"><a href="{$goods.url}" title="{$goods.name|escape:html}">{$goods.short_name|escape:html}</a></div>  
  8.            <div class="hotInfo"><span class="price02" style="color:#CC0000">{$goods.promote_price}</span></div>  
  9.          </div>  
  10.    <!--{/foreach}-->  
  11.    </div>  
  12.    <div class="index_hotMore"><a href="brand.php" target=_blank></a></div>  
  13. </div>  

2 、添加语言项

找到 \languages\zh_cn\ admin \template.php

打开后,找到这个位置

在最后添加  

[html]view plaincopy


  1. $_LANG['template_libs']['cat_promotion'] = '分类促销商品';  

这样完成了语言项添加。

3、修改 \admin\includes\lib_template.php

[php]view plaincopy


  1. /* 动态库项目 */  
  2. $dyna_libs = array(  
  3.    'cat_goods',  
  4.    'brand_goods',  
  5.    'suppliers_goods',  
  6.    'cat_articles',  
  7.    'ad_position',  
  8.    //我这里加上下边的预定义的动态库项目文件名  
  9. [php]view plaincopy
  10. 'cat_promotion'  

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

里面有:

[php]view plaincopy


  1. /* 页面中的动态内容 */  
  2. assign_dynamic('index');  

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

在这个地方: \includes\lib_main.php

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

[php]view plaincopy


  1. /**
  2. * 获得指定页面的动态内容
  3. *
  4. * @access  public
  5. * @param   string  $tmp    模板名称
  6. * @return  void
  7. */  
  8. function assign_dynamic($tmp)  
  9. {  
  10.    $sql = 'SELECT id, number, type FROM ' . $GLOBALS['ecs']->table('template') .  
  11.        " WHERE filename = '$tmp' AND type > 0 AND remarks ='' AND theme='" . $GLOBALS['_CFG']['template'] . "'";  
  12.    $res = $GLOBALS['db']->getAll($sql);  
  13.  
  14.   foreach ($res AS $row)  
  15.    {  
  16.        switch ($row['type'])  
  17.        {  
  18.            case 1:  
  19.                /* 分类下的商品 */  
  20.                $GLOBALS['smarty']->assign('goods_cat_' . $row['id'], assign_cat_goods($row['id'], $row['number']));  
  21.            break;  
  22.            case 2:  
  23.                /* 品牌的商品 */  
  24.                $brand_goods = assign_brand_goods($row['id'], $row['number']);  
  25.  
  26.                $GLOBALS['smarty']->assign('brand_goods_' . $row['id'], $brand_goods['goods']);  
  27.                $GLOBALS['smarty']->assign('goods_brand_' . $row['id'], $brand_goods['brand']);  
  28.            break;  
  29.            case 3:  
  30.                /* 文章列表 */  
  31.                $cat_articles = assign_articles($row['id'], $row['number']);  
  32.  
  33.                $GLOBALS['smarty']->assign('articles_cat_' . $row['id'], $cat_articles['cat']);  
  34.                $GLOBALS['smarty']->assign('articles_' . $row['id'], $cat_articles['arr']);  
  35.            break;  
  36.      case 5:  
  37.                /* 分类下的促销商品    后加---*/  
  38.                $GLOBALS['smarty']->assign('promotion_cat_' . $row['id'], assign_cat_promotion($row['id'], $row['number']));  
  39.            break;  
  40.              
  41.        }  
  42.    }  
  43. }  

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

[php]view plaincopy


  1. /**
  2. * 获得指定分类下的促销商品
  3. *
  4. * @access  public
  5. * @param   integer     $cat_id     分类ID
  6. * @param   integer     $num        数量
  7. * @param   string      $from       来自web/wap的调用
  8. * @param   string      $order_rule 指定商品排序规则
  9. * @return  array
  10. */  
  11. function assign_cat_promotion($cat_id, $num = 0, $from = 'web', $order_rule = '')  
  12. {  

另外,在\include\lib_main.php中还要找到这个函数,做如下添加:

[php]view plaincopy


  1. /**
  2. * 替换动态模块
  3. *
  4. * @access  public
  5. * @param   string       $matches    匹配内容
  6. *
  7. * @return string        结果
  8. */  
  9. function dyna_libs_replace($matches)  
  10. {  
  11.    $key = '/' . $matches[1];  
  12.  
  13.    if ($row = array_shift($GLOBALS['libs'][$key]))  
  14.    {  
  15.        $str = '';  
  16.        switch($row['type'])  
  17.        {  
  18.            case 1:  
  19.                // 分类的商品  
  20.                $str = '{assign var="cat_goods" value=$cat_goods_' .$row['id']. '}{assign var="goods_cat" value=$goods_cat_' .$row['id']. '}';  
  21.                break;  
  22.            case 2:  
  23.                // 品牌的商品  
  24.                $str = '{assign var="brand_goods" value=$brand_goods_' .$row['id']. '}{assign var="goods_brand" value=$goods_brand_' .$row['id']. '}';  
  25.                break;  
  26.            case 3:  
  27.                // 文章列表  
  28.                $str = '{assign var="articles" value=$articles_' .$row['id']. '}{assign var="articles_cat" value=$articles_cat_' .$row['id']. '}';  
  29.                break;  
  30.            case 4:  
  31.                //广告位  
  32.                $str = '{assign var="ads_id" value=' . $row['id'] . '}{assign var="ads_num" value=' . $row['number'] . '}';  
  33.                break;  
  34.      case 5:  
  35.         // 分类的促销商品  -------后加的  
  36.                $str = '{assign var="cat_promotion" value=$cat_promotion_' .$row['id']. '}{assign var="promotion_cat" value=$promotion_cat_' .$row['id']. '}';  
  37.                break;  
  38.        }  
  39.        return $str . $matches[0];  
  40.    }  
  41.    else  
  42.    {  
  43.        return $matches[0];  
  44.    }  
  45. }  

这样结束lib_main.php的修改。

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

(1)

[php]view plaincopy


  1. /* 动态内容 */  
  2. $cate_goods   = array();  
  3. $brand_goods  = array();  
  4. $cat_articles = array();  
  5. $ad_positions = array();  
  6. $cate_promotion = array(); //后加  

(2)

[php]view plaincopy


  1. foreach ($temp_libs AS $val)  
  2.    {  
  3.        /* 对动态内容赋值 */  
  4.        if ($val['lib'] == 'cat_goods')  
  5.        {  
  6.            /* 分类下的商品 */  
  7.            if (isset($db_dyna_libs[$val['region']][$val['library']]) && ($row = array_shift($db_dyna_libs[$val['region']][$val['library']])))  
  8.            {  
  9.                $cate_goods[] = array('region' => $val['region'], 'sort_order' => $val['sort_order'], 'number' => $row['number'], 'cats'=>cat_list(0, $row['id']));  
  10.            }  
  11.            else  
  12.            {  
  13.                $cate_goods[] = array('region' => $val['region'], 'sort_order' => $val['sort_order'], 'number'=>0, 'cats'=>cat_list(0));  
  14.            }  
  15.        }  
  16.  
  17.    /* 分类促销产品   后加的*/  
  18.        elseif ($val['lib'] == 'cat_promotion')  
  19.        {  
  20.            /* 分类下的商品 */  
  21.            if (isset($db_dyna_libs[$val['region']][$val['library']]) && ($row = array_shift($db_dyna_libs[$val['region']][$val['library']])))  
  22.            {  
  23.                $cate_promotion[] = array('region' => $val['region'], 'sort_order' => $val['sort_order'], 'number' => $row['number'], 'cats'=>cat_list(0, $row['id']));  
  24.            }  
  25.            else  
  26.            {  
  27.                $cate_promotion[] = array('region' => $val['region'], 'sort_order' => $val['sort_order'], 'number'=>0, 'cats'=>cat_list(0));  
  28.            }  
  29.        }  

(3)

[php]view plaincopy


  1.   assign_query_info();  
  2.   $smarty->assign('ur_here',            $_LANG['03_template_setup']);  
  3.   $smarty->assign('curr_template_file', $curr_template);  
  4.   $smarty->assign('temp_options',       $temp_options);  
  5.   $smarty->assign('temp_regions',       $temp_regions);  
  6.   $smarty->assign('cate_goods',         $cate_goods);  
  7.   $smarty->assign('brand_goods',        $brand_goods);  
  8.   $smarty->assign('cat_articles',       $cat_articles);  
  9.   $smarty->assign('ad_positions',       $ad_positions);  
  10. $smarty->assign('cate_promotion',      $cate_promotion);//后加  
  11.  
  12.   $smarty->assign('arr_cates',          cat_list(0, 0, true));  
  13.   $smarty->assign('arr_brands',         get_brand_list());  
  14.   $smarty->assign('arr_article_cats',   article_cat_list(0, 0, true));  
  15.   $smarty->assign('arr_ad_positions',   get_position_list());  
  16. $smarty->assign('arr_promotion',      cat_list(0, 0, true));//后加  
  17.  
  18.   $smarty->display('template_setup.htm');  

(4)

[php]view plaincopy


  1. /*------------------------------------------------------ */  
  2. //-- 提交模板内容设置  
  3. /*------------------------------------------------------ */  
  4.  
  5. if ($_REQUEST['act'] == 'setting')  
  6. {  
  7.    admin_priv('template_setup');  
  8.  
  9.    $curr_template = $_CFG['template'];  
  10.    $db->query("DELETE FROM " .$ecs->table('template'). " WHERE remarks = '' AND filename = '𝑃𝑂𝑆𝑇[𝑡𝑒𝑚𝑝𝑙𝑎𝑡𝑒𝑓𝑖𝑙𝑒]′𝐴𝑁𝐷𝑡ℎ𝑒𝑚𝑒=′    P OST[templat e f ile]′ANDtheme=′  _POST[template_file]' AND theme = 'curr_template'");  
  11.  
  12.    /* 先处理固定内容 */  
  13.    foreach ($_POST['regions'] AS $key => $val)  
  14.    {  
  15.        $number = isset($_POST['number'][$key]) ? intval($_POST['number'][$key]) : 0;  
  16.        if (!in_array($key, $GLOBALS['dyna_libs']) AND (isset($_POST['display'][$key]) AND $_POST['display'][$key] == 1 OR $number > 0))  
  17.        {  
  18.            $sql = "INSERT INTO " .$ecs->table('template').  
  19.                        "(theme, filename, region, library, sort_order, number)".  
  20.                    " VALUES ".  
  21.                        "('𝑐𝑢𝑟𝑟𝑡𝑒𝑚𝑝𝑙𝑎𝑡𝑒′,′  cur r t emplate′,′  curr_template', '_POST[template_file]', '$val', '".$_POST['map'][$key]."', '" . @$_POST['sort_order'][$key] . "', '$number')";  
  22.            $db->query($sql);  
  23.        }  
  24.    }  
  25.  
  26.    /* 分类的商品 */  
  27.    if (isset($_POST['regions']['cat_goods']))  
  28.    {  
  29.        foreach ($_POST['regions']['cat_goods'] AS $key => $val)  
  30.        {  
  31.            if ($_POST['categories']['cat_goods'][$key] != '' && intval($_POST['categories']['cat_goods'][$key]) > 0)  
  32.            {  
  33.                $sql = "INSERT INTO " .$ecs->table('template'). " (".  
  34.                            "theme, filename, region, library, sort_order, type, id, number".  
  35.                        ") VALUES (".  
  36.                            "'$curr_template', ".  
  37.                            "'$_POST[template_file]', '" .$val. "', '/library/cat_goods.lbi', ".  
  38.                            "'" .$_POST['sort_order']['cat_goods'][$key]. "', 1, '" .$_POST['categories']['cat_goods'][$key].  
  39.                            "', '" .$_POST['number']['cat_goods'][$key]. "'".  
  40.                        ")";  
  41.                $db->query($sql);  
  42.            }  
  43.        }  
  44.    }  
  45.      
  46.   /* 分类促销的商品   后加的*/  
  47.    if (isset($_POST['regions']['cat_promotion']))  
  48.    {  
  49.        foreach ($_POST['regions']['cat_promotion'] AS $key => $val)  
  50.        {  
  51.            if ($_POST['promotion']['cat_promotion'][$key] != '' && intval($_POST['promotion']['cat_promotion'][$key]) > 0)  
  52.            {  
  53.                $sql = "INSERT INTO " .$ecs->table('template'). " (".  
  54.                            "theme, filename, region, library, sort_order, type, id, number".  
  55.                        ") VALUES (".  
  56.                            "'$curr_template', ".  
  57.                            "'$_POST[template_file]', '" .$val. "', '/library/cat_promotion.lbi', ".  
  58.                            "'" .$_POST['sort_order']['cat_promotion'][$key]. "', 5, '" .$_POST['promotion']['cat_promotion'][$key].  
  59.                            "', '" .$_POST['number']['cat_promotion'][$key]. "'".  
  60.                        ")";  
  61.                $db->query($sql);  
  62.            }  
  63.        }  
  64.    }  

(5)

[php]view plaincopy


  1. /* 对提交内容进行处理 */  
  2.   $post_regions = array();  
  3.   foreach ($_POST['regions'] AS $key => $val)  
  4.   {  
  5.       switch ($key)  
  6.       {  
  7.           case 'cat_goods':  
  8.               foreach ($val AS $k => $v)  
  9.               {  
  10.                   if (intval($_POST['categories']['cat_goods'][$k]) > 0)  
  11.                   {  
  12.                       $post_regions[] = array('region'     => $v,  
  13.                                               'type'       => 1,  
  14.                                               'number'     => $_POST['number']['cat_goods'][$k],  
  15.                                               'library'    => '/library/' .$key. '.lbi',  
  16.                                               'sort_order' => $_POST['sort_order']['cat_goods'][$k],  
  17.                                               'id'         => $_POST['categories']['cat_goods'][$k]);  
  18.                   }  
  19.               }  
  20.               break;  
  21. case 'cat_promotion': //后加  
  22.               foreach ($val AS $k => $v)  
  23.               {  
  24.                   if (intval($_POST['promotion']['cat_promotion'][$k]) > 0)  
  25.                   {  
  26.                       $post_regions[] = array('region'     => $v,  
  27.                                               'type'       => 5,  
  28.                                               'number'     => $_POST['number']['cat_promotion'][$k],  
  29.                                               'library'    => '/library/' .$key. '.lbi',  
  30.                                               'sort_order' => $_POST['sort_order']['cat_promotion'][$k],  
  31.                                               'id'         => $_POST['categories']['cat_promotion'][$k]);  
  32.                   }  
  33.               }  
  34.               break;  

到此,修改完template.php文件

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

(1)

[html]view plaincopy


  1. <!-- cateogry goods list -->  
  2.  <tr>  
  3.    <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>  
  4.  </tr>  
  5.  {foreach from=$cate_goods item=library key=lib_name}  
  6.  <tr>  
  7.    <td class="first-cell" align="right"><a href="javascript:;" onclick="removeRow(this)">[-]</a></td>  
  8.    <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>  
  9.    <td><input type="text" name="sort_order[cat_goods][]" value="{$library.sort_order}" size="4" /></td>  
  10.    <td><select name="categories[cat_goods][]"><option value="">{$lang.select_plz}</option>{$library.cats}</select></td>  
  11.    <td><input type="text" name="number[cat_goods][]" value="{$library.number}" size="4"  /></td>  
  12.    <td></td>  
  13.  </tr>  
  14.  {/foreach}  
  15.    
  16. <!-- cateogry promotion goods list   后加的 -->  
  17.  <tr>  
  18.    <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>  
  19.  </tr>  
  20.  {foreach from=$cate_promotion item=library key=lib_name}  
  21.  <tr>  
  22.    <td class="first-cell" align="right"><a href="javascript:;" onclick="removeRow(this)">[-]</a></td>  
  23.    <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>  
  24.    <td><input type="text" name="sort_order[cat_promotion][]" value="{$library.sort_order}" size="4" /></td>  
  25.    <td><select name="promotion[cat_promotion][]"><option value="">{$lang.select_plz}</option>{$library.cats}</select></td>  
  26.    <td><input type="text" name="number[cat_promotion][]" value="{$library.number}" size="4"  /></td>  
  27.    <td></td>  
  28.  </tr>  
  29.  {/foreach}  
  30.    

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

[javascript]view plaincopy


  1. <script language="JavaScript">  
  2. <!--  
  3. var currTemplateFile = '{$curr_template_file}';  
  4. var selCategories    = '{$arr_cates}';  
  5. var selRegions       = new Array();  
  6. var selBrands        = new Array();  
  7. var selArticleCats   = new Array();  
  8. var selAdPositions   = new Array();  
  9. var selPromotion     = '{$arr_promotion}';  //后加的  
  10.  
  11. {foreach from=$temp_regions item=region key=id}  
  12. selRegions[{$id}] = '{$region|escape:quotes}';  
  13. {/foreach}  
  14.  
  15. {foreach from=$arr_brands item=brand key=id}  
  16. selBrands[{$id}] = '{$brand|escape:quotes}';  
  17. {/foreach}  
  18.  
  19. {foreach from=$arr_article_cats item=cat key=id}  
  20. selArticleCats[{$id}] = '{$cat}';  
  21. {/foreach}  
  22.  
  23. {foreach from=$arr_ad_positions item=ad_position key=id}  
  24. selAdPositions[{$id}] = '{$ad_position|escape}';  
  25. {/foreach}  
  26.  
  27.  
  28. {literal}  
  29. [javascript]view plaincopy
  30. ......  
  31. [javascript]view plaincopy
  32. /**
  33. * 增加一个分类的商品
  34. */  
  35. function addCatGoods(obj)  
  36. {  
  37.    var rowId = rowindex(obj.parentNode.parentNode);  
  38.  
  39.    var table = obj.parentNode.parentNode.parentNode.parentNode;  
  40.  
  41.    var row  = table.insertRow(rowId + 1);  
  42.    var cell = row.insertCell(-1);  
  43.    cell.innerHTML = '<a href="javascript:;" onclick="removeRow(this)">[-]</a>';  
  44.    cell.className = 'first-cell';  
  45.    cell.align     = 'right';  
  46.  
  47.    cell           = row.insertCell(-1);  
  48.    cell.innerHTML = buildRegionSelect('regions[cat_goods][]');  
  49.  
  50.    cell           = row.insertCell(-1);  
  51.    cell.innerHTML = '<input type="text" name="sort_order[cat_goods][]" value="0" size="4" />';  
  52.  
  53.    cell           = row.insertCell(-1);  
  54.    cell.innerHTML = '<select name="categories[cat_goods][]"><option value="">' + selectPlease + '</option>' + selCategories + '</select>';  
  55.  
  56.    cell           = row.insertCell(-1);  
  57.    cell.innerHTML = '<input type="text" name="number[cat_goods][]" value="5" size="4" />';  
  58.  
  59.    cell           = row.insertCell(-1);  
  60. }  
  61.  
  62. /**
  63. * 增加一个分类的促销商品,------后加
  64. */  
  65. function addCatPromotion(obj)  
  66. {  
  67.    var rowId = rowindex(obj.parentNode.parentNode);  
  68.  
  69.    var table = obj.parentNode.parentNode.parentNode.parentNode;  
  70.  
  71.    var row  = table.insertRow(rowId + 1);  
  72.    var cell = row.insertCell(-1);  
  73.    cell.innerHTML = '<a href="javascript:;" onclick="removeRow(this)">[-]</a>';  
  74.    cell.className = 'first-cell';  
  75.    cell.align     = 'right';  
  76.  
  77.    cell           = row.insertCell(-1);  
  78.    cell.innerHTML = buildRegionSelect('regions[cat_promotion][]');  
  79.  
  80.    cell           = row.insertCell(-1);  
  81.    cell.innerHTML = '<input type="text" name="sort_order[cat_promotion][]" value="0" size="4" />';  
  82.  
  83.    cell           = row.insertCell(-1);  
  84.    cell.innerHTML = '<select name="promotion[cat_promotion][]"><option value="">' + selectPlease + '</option>' + selPromotion + '</select>';  
  85.  
  86.    cell           = row.insertCell(-1);  
  87.    cell.innerHTML = '<input type="text" name="number[cat_promotion][]" value="5" size="4" />';  
  88.  
  89.    cell           = row.insertCell(-1);  
  90. }  
  91.  
  92. ......  
  93. [javascript]view plaincopy
  94. {/literal}  
  95. //-->  
  96. </script>  

  97. 免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空