ECShop二次开发研究日志之1.主页商品如何获取商品相册并显示及商品分类页获取商品相册相册列表

前几天,一个网友问我如何获取商品分类页的商品相册列表,然后给我一个教程《ecshop商品分类页获取相册列表方法》,他按照教程做,分页是可以的,不过要把这个功能弄到主页上就找不到修改的位置所在了。

这个问题是典型的!!初学者问题。

因为初学者最缺的就是一个开发思路,所以借此,正好最近项目忙,累死了,放松一下,写一下分享一下吧。有什么问题高手一笑而过吧。

开发思路分析,我们希望在主页显示商品的相册,那么我们就应该

  1. 找到显示商品的所在;
  2. 找到调用的方法或者变量所在;
  3. 然后根据需要获取相册信息;
  4. 然后输出相册信息到模板中

我的分析思路如下:

我先查看主页的“精品推荐》全部”这个区域,然后我查看源码,找到这边的关键词:id="show_best_area",然后我就去/themes/default/index.dwt文件中查找这个关键词,你会发现这边的输出逻辑是:

<!–{foreach from=$best_goods item=goods}–>

是的,就是best_goods这个变量名,那么我们自然就知道应该去根目录的index.php文件中查找这个变量了,然后你会找到:

$smarty->assign('best_goods',      get_recommend_goods('best'));    // 推荐商品

这一行代码,有点基础的话,你就懂得这个get_recommend_goods方法是关键,我们全站搜索一下这个方法,你会在下面的位置发现这个方法所在的文件:

/includes/lib_goods.php

然后我们会在这个方法里面找到如下代码处:

$goods[$idx][‘url’]          = build_uri(‘goods’, array(‘gid’ => $row[‘goods_id’]), $row[‘goods_name’]);

剩下的就是想办法获取商品相册列表了,这边直接用上面教程内使用的方法,做了一点点修改:

            $goods[$idx][‘url’]          = build_uri(‘goods’, array(‘gid’ => $row[‘goods_id’]), $row[‘goods_name’]);
            // 2015.08.20 ChinaBUG 前台调用商品相册
            $sql = 'SELECT img_url,thumb_url FROM ' . $GLOBALS[‘ecs’]->table(‘goods_gallery’) .’ WHERE goods_id = ‘ . $row[‘goods_id’];
            $goods_photo_gallery = $GLOBALS[‘db’]->getAll($sql);
            $goods[$idx][‘gpic’]             = $goods_photo_gallery;
            //
            if (in_array($row[‘goods_id’], $type_array[‘best’]))

保存,然后查看一下你会发现啥效果也没有。这个当然的事情,因为使用MVC架构的,都是这个鸟样子,你改了控制器,你还需要修改一下视图文件,也就是模板文件。

请打开/themes/default/index.dwt文件,找到

  <!–{foreach from=$best_goods item=goods}–>

所在的位置,在这个循环体里面找一个你希望加入相册的地方,把下面的代码加上去就可以了,这边我是加在价格下方:

            </font>
            <div>

    <!– {foreach from=$goods.gpic item=picture name=no}–>
    <!– {if $smarty.foreach.no.iteration < 5}  –>
    <img class="galleryitem" src="{if $picture.thumb_url}{$picture.thumb_url}{else}{$picture.img_url}{/if}" width="30" alt="{$goods.goods_name}" data-s="{if $picture.thumb_url}{$picture.thumb_url}{else}{$picture.img_url}{/if}" />
    <!–{/if}–>  
    <!–{/foreach}–>

            </div>

这个代码也是来至上面说的教程,我就修改一个样式名哈,用于调整图片大小。

然后,请打开/library/recommend_best.lbi这个文件,在相应的位置上也增加如上代码。

注:这个文件的内容跟index.dwt相关位置是一致的。

好了,请保存,然后进后台,清空缓存。刷新首页,你会发现,商品下面多了一些图片了。

然后,你要是点击全部边上的分类你会发现,居然还是没有增加图片相册,这个说明这个地方获取的数据你没改到,我们再来改改哈。

我们先查看这个的源码你会发现他是调用一个JS的方法get_cat_recommend来获取数据的,有经验的童靴肯定猜到这个地方是使用了AJAX来获取数据的,然后我们再来查看一下这个是怎么调用的,具体调用哪个方法。打开index.php文件我们会发现在74行:

//判断是否有ajax请求
$act = !empty($_GET[‘act’]) ? $_GET[‘act’] : '';
if ($act == 'cat_rec')
……

然后看一下就知道了,原来调用的是get_category_recommend_goods方法获取数据的,然后我们又一次查找这个方法,会发现原来还是在/includes/lib_goods.php文件中,那么还是按照之前的办法,找到里面的:

$goods[$idx][‘url’]          = build_uri(‘goods’, array(‘gid’ => $row[‘goods_id’]), $row[‘goods_name’]);

修改为:

        $goods[$idx][‘url’]          = build_uri(‘goods’, array(‘gid’ => $row[‘goods_id’]), $row[‘goods_name’]);
        // 2015.08.20 ChinaBUG 前台调用商品相册
        $sql = 'SELECT img_url,thumb_url FROM ' . $GLOBALS[‘ecs’]->table(‘goods_gallery’) .’ WHERE goods_id = ‘ . $row[‘goods_id’];
        $goods_photo_gallery = $GLOBALS[‘db’]->getAll($sql);
        $goods[$idx][‘gpic’]             = $goods_photo_gallery;

保存,然后清空缓存,查看一下原来结果还是可以的哈。

友情提示:其实,其他一些商品相关的方法均可以按照以上方法直接添加代码的,具体相关代码都包含在/includes/lib_goods.php文件中,请从头到尾,自己添加一次吧。然后,你就会发现原来功能都实现了,修改一下模板,清空缓存就可以看到效果了。

首页效果已经完成,那么商品分类的要怎么获取呢?原先的教程写的有点点的复杂,可能大家看不懂吧,我还是再简单分析一下吧。

我们还是先打开http://shop.ipodmp.com/category.php?id=2然后,查找你需要添加的位置,我这边是:

<!–{foreach from=$best_goods item=goods}–>

然后还是去找这个变量所在的程序,我们可以获取方法是get_category_recommend_goods,位置如下:

$smarty->assign('best_goods',      get_category_recommend_goods('best', $children, $brand, $price_min, $price_max, $ext));

然后会发现这个方法原来还是在/includes/lib_goods.php文件中,还记得我上面说的,这个文件相关的方法都按照我说的去修改一下就可以了吧?

        // 2015.08.20 ChinaBUG 前台调用商品相册
        $sql = 'SELECT img_url,thumb_url FROM ' . $GLOBALS[‘ecs’]->table(‘goods_gallery’) .’ WHERE goods_id = ‘ . $row[‘goods_id’];
        $goods_photo_gallery = $GLOBALS[‘db’]->getAll($sql);
        $goods[$idx][‘gpic’]             = $goods_photo_gallery;

改一下,然后我们还是去模板那边找到要放的地方,把我们的输出语句给放进去,记得要修改两个地方噢,具体是那两个就看你有没有认真看本文了。只要上面的教程你看了,那么这边很简单就可以自己改好了。

去试试吧~GOOD LUCK……^_^