ecshop首页调用促销倒计时

在使用ecshop做站的时候,如果设置了促销产品或者促销活动,需要显示出来倒计时的时间,在网上也找了很多代码,结果都是不尽如意,有这样那样的问题,以下问题是我自身在结合网上找到的代码,并进行调整实现的,分享出来供大家参考,希望能够帮助那些和我遇到同样问题的朋友。

ecshop首页调用促销倒计时_第1张图片


一、修改ecshop程序部分 打开includes中的lib_goods.php这个文件

找到get_promote_goods()函数在

(大概在396行)$goods[$idx]['url']          = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']); return $goods;}

中间添加下面的代码

 /* 促销时间倒计时 */

        $time = gmtime();

        if ($time >= $row['promote_start_date'] && $time <= $row['promote_end_date'])

        {

              $goods[$idx]['gmt_end_time']  = local_date('M d, Y H:i:s',$row['promote_end_date']);

        }

        else

        {

            $goods[$idx]['gmt_end_time'] = 0;

        }

    }

二、打开模板下的库文件夹library找到并打开促销产品的库文件recommend_promotion.lbi添加下面的代码

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<!-- {if $promotion_goods} -->

<script >

var Tday = new Array();

var daysms = 24 * 60 * 60 * 1000

var hoursms = 60 * 60 * 1000

var Secondms = 60 * 1000

var microsecond = 1000

var DifferHour = -1

var DifferMinute = -1

var DifferSecond = -1

function clock(key)

  {

   var time = new Date()

   var hour = time.getHours()

   var minute = time.getMinutes()

   var second = time.getSeconds()

   var timevalue = ""+((hour > 12) ? hour-12:hour)

   timevalue +=((minute < 10) ? ":0":":")+minute

   timevalue +=((second < 10) ? ":0":":")+second

   timevalue +=((hour >12 ) ? " PM":" AM")

   var convertHour = DifferHour

   var convertMinute = DifferMinute

   var convertSecond = DifferSecond

   var Diffms = Tday[key].getTime() - time.getTime()

   DifferHour = Math.floor(Diffms / daysms)

   Diffms -= DifferHour * daysms

   DifferMinute = Math.floor(Diffms / hoursms)

   Diffms -= DifferMinute * hoursms

   DifferSecond = Math.floor(Diffms / Secondms)

   Diffms -= DifferSecond * Secondms

   var dSecs = Math.floor(Diffms / microsecond)

   

   if(convertHour != DifferHour) a="<font color=red>"+DifferHour+"</font>天";

   if(convertMinute != DifferMinute) b="<font color=red>"+DifferMinute+"</font>时";

   if(convertSecond != DifferSecond) c="<font color=red>"+DifferSecond+"</font>分"

     d="<font color=red>"+dSecs+"</font>秒"

     if (DifferHour>0) {a=a} 

     else {a=''}

   document.getElementById("leftTime"+key).innerHTML = a + b + c + d; //显示倒计时信息

  

  }

</script>

<div class="module">

<h1 class="mod11tit"><p>{$lang.promotion_goods}</p>   

    <a href="../search.php?intro=promotion" class="more">更多>></a></h1>

<div class="promotion_goods">

<!--{foreach from=$promotion_goods key=key item=goods name="promotion_foreach"}-->

<!-- {if $smarty.foreach.promotion_foreach.index lt 4} 限制显示数量 -->

   <div class="goodsbox">

  <div class="imgbox"><a href="{$goods.url}"><img src="{$goods.thumb}" border="0" alt="{$goods.name|escape:html}"/></a></div>

<ul>         

  <li><a href="{$goods.url}" title="{$goods.name|escape:html}">{$goods.short_name|truncate:18}</a></li>

       <li>优惠价格:<b>{$goods.promote_price}</b></li>

      <li>剩余:<font class="f4" id="leftTime{$key}">{$lang.please_waiting}</font></li>

       </ul>

</div>

<!-- {/if} --> 

    <script>

Tday[{$key}] = new Date("{$goods.gmt_end_time}");   

window.setInterval(function()     

{clock({$key});}, 1000);     

</script>

   <!--{/foreach}-->

</div>

</div>

<!-- {/if} -->

然后保存 刷新即可。


注:1.注意代码中的绿色字体 key=key 在网上有很多ecshop首页调用倒计时的代码,但是缺少了key=key 这一个导致显示出来的内容是:正在载入,请稍等...    结果时间就是显示不出来。

2.在加入key=key的后,显示时间是NaN时NaN分NaN秒,这个问题也困扰我很长时间,问了一下些ecshop的群,但是没问来帮助指导一下,在ecshop的论坛里面貌似有解决这个问题的办法,但是帖子被屏蔽了。于是我想可能这个问题涉及到了很多朋友挣rmb比较敏感。后来无意间想到清除一下缓存试试,结果成功了。其实很简单,在后台清除一下ecshop的缓存就可以解决这个问题了。

3.当然,你的代码可以不和我的完全一样,从中摘出你需要的代码放到recommend_promotion.lbi这个促销商品的库文件中同样可以实现。

4.此代码实现后,并不完美,仔细观察,首页的倒计时时间和详细的产品页面的倒计时相差8个小时,怎么来解决呢。

在/data/config.php 中找到: $timezone    = "UTC";  改为  $timezone    = "PRC"; 就可以了。 然后 保存 清楚缓存 刷新页面 就可以使首页和产品页面的倒计时时间保持一致了。


这篇文章可能会影响到一些朋友,但是这只是个人在学习 使用ecshop的过程中遇到的问题,以及自己摸索出来的解决办法,希望能帮助那些和我一样苦逼的朋友。

你可能感兴趣的:(ecshop首页调用促销倒计时)