最近由于活动需要个个倒计时的功能
虽然模板自带到计时这个功能 但是由于是写到模板里使用的并不是很方便 其实这个写的非常好 如果不需要特别高级定制的话这个足够了 这是代码 还自带轮播哦
<?php
/**
* Created by PhpStorm.
* User:ajiang-tuzi
* QQ:1050653098@qq.com
* WebSite:www.weicot.com
*/
//加载数据
if (($_products = $this->getProductCollection()) && $_collectionSize = $_products->getSize()): ?>
<div class="special-box home-box">
<script type="text/javascript">
//<![CDATA[
//你可以用任何 块来调用这个模板 只要接口没有错 都行 并且你可以通过 xml 把他放在网站的任何一个地方
//等一下我会写出来
// Credits: Robert Penners easing equations (http://www.robertpenner.com/easing/).
jQuery.easing['BounceEaseOut'] = function(p, t, b, c, d) {
if ((t/=d) < (1/2.75)) {
return c*(7.5625*t*t) + b;
} else if (t < (2/2.75)) {
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
} else if (t < (2.5/2.75)) {
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
} else {
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
}
};
jQuery(document).ready(function() {
jQuery('#mycarousel').jcarousel({
easing: 'BounceEaseOut',
scroll:1,
animation: 1000
});
});
//]]>
</script>
<?php
$count = 1;
/* Admin Controllers for timer are declared here */
$timer_active =1;
$formday=date("y-m-d h:i:s");
?>
<?php $i=0; foreach ($_products->getItems() as $_product): ?>
<?php if($i==0){?>
<div class="head">
<span class="dailydeals-span">
<?php echo $this->__('<a href="http://shop.weicot.com/special">Deals</a>') ?>
</span>
<!---促销过滤以及时间显示-->
<?php if(strtotime($formday)<strtotime($_product->getSpecialFromDate())){ $toDate = $_product->getSpecialFromDate();}else{ $toDate = $_product->getSpecialTODate();}?>
<!-- <div class="Pormotion_item<?php if(strtotime($formday)<strtotime($_product->getSpecialFromDate())){echo 2;}else{echo 3;}?>">-->
<!--Condition for Timer Controllers goes here-->
<!-- <?php if($timer_active == 1) :?>
<?php if($_product->getPrice() > $_product->getSpecialPrice()) : ?>
<?php if($_product->getSpecialPrice()!= 0 || $_product->getSpecialPrice()!= "" ) :?>
<div id="countbox_<?php echo $count; ?>" class="timer-view-grin <?php if(strtotime($formday)<strtotime($_product->getSpecialFromDate())){echo "timer-view-green";}?>"></div>
<?php endif;endif;endif;?>
</div>-->
<!---时间显示 js -->
<?php if($_product->getPrice() > $_product->getSpecialPrice()) : ?>
<?php if($_product->getSpecialPrice()!= 0 || $_product->getSpecialPrice()!= "" ) :?>
<script type="text/javascript">
var dthen<?php echo $count; ?> = new Date("<?php echo Date("m/d/y", strtotime($toDate)).' 11:59:00 PM'; ?>");
start = "<?php echo Date("m/d/y h:i:s A", strtotime(Mage_Core_Model_Locale::date(null, null, "en_US", true))); ?>";
start_date = Date.parse(start);
var dnow<?php echo $count; ?> = new Date(start_date);
if(CountStepper>0)
ddiff= new Date((dnow<?php echo $count; ?>)-(dthen<?php echo $count; ?>));
else
ddiff = new Date((dthen<?php echo $count; ?>)-(dnow<?php echo $count; ?>));
gsecs<?php echo $count; ?> = Math.floor(ddiff.valueOf()/1000);
var iid<?php echo $count; ?> = "countbox_<?php echo $count; ?>";
CountBack(gsecs<?php echo $count; ?>,"countbox_"+j, j);
j++;
</script>
<?php $count = $count + 1; ?>
<?php endif;endif; ?>
</div>
<ul id="mycarousel" class="jcarousel-skin-tango"><!--轮播 开始-->
<?php }?>
<li>
<div class="home-product-img">
<a width="155" height="120" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>)">
<img class="product-image" src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(155,120) ?>" alt="<?php echo $this->htmlEscape($_product->getName()) ?>" />
</a>
</div>
<div class="other-info">
<h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>)"><?php echo $this->htmlEscape($_product->getName()) ?></a></h2>
<?php echo $this->getPriceHtml($_product, true, $this->getPriceSuffix()) ?>
</div>
<a class="buy-it buyLinks" href="<?php echo $this->getAddToCartUrl($_product) ?>">Buy it</a>
</li>
<?php $i++; endforeach; ?>
</ul>
<div class="dealsoff">
<div class="clear"></div>
</div>
</div>
<?php endif; ?>
注意CSS 的优先级以及js 的冲突等
这边还有一个好友的办法 跟这个差不多 但他那个方法跟简洁点 因为这个是直接重模板中 拿出来的 magento简单的促销倒计时功能
由于这个并不能达到我的需求 于是我下了个插件 这个插件重写了
<rewrite>
<product_list>Apptha_Timer_Block_Product_List</product_list>
<product_view>Apptha_Timer_Block_Product_View</product_view>
</rewrite>
虽然功能比这篇文章的少minyue-magento简单的促销倒计时功能就一个显示时间的功能 不过由于他重写了这两个模块 让他变得 适应跟多的模板 虽然也要修改 但让事情简单了不少
首先我们来下载插件magentoPrice_Countdown-1.4.0-倒计时插件 这个插件版本看起来好像有点老 不过能用就行
这插件功能就只有一个显示 离促销结束时间
好了我们现在来给他增加一个 离促销开始 时间倒计时
首先我们打开 /app/code/local/Apptha/Timer/etc/system.xml
<timer_catption translate="label">
<label>Timer Caption:</label>
<frontend_type>select</frontend_type>
<source_model>Apptha_Timer_Model_System_Config_Source_Showin</source_model>
<sort_order>2</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<comment>Timer Caption</comment>
</timer_catption>
<title translate="label">
<label>离促销结束到计时头部</label>
<frontend_type>text</frontend_type>
<sort_order>3</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<comment>Timer Heading Text.</comment>
</title>
<titles translate="label">
<label>促销倒计时开始 头部</label>
<frontend_type>text</frontend_type>
<sort_order>3</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<comment>促销倒计时开始 头部</comment>
</titles>
然后我们打开 /app/code/local/Apptha/Timer/Block/Product/view.php
这是未修改以前的
public function getPriceCountDown(){
if(Mage::helper('timer')->isEnabled()){
$currentDate = Mage::getModel('core/date')->date('Y-m-d');
$todate = $this->getProduct()->getSpecialToDate();
$fromdate = $this->getProduct()->getSpecialFromDate();
if($this->getProduct()->getSpecialPrice() != 0 || $this->getProduct()->getSpecialPrice()) {
if($this->getProduct()->getSpecialToDate() != null) {
if(strtotime($todate) >= strtotime($currentDate) && strtotime($fromdate) <= strtotime($currentDate)){
return true;
}
}
}
}
return false;
}
这是修改后的
class Apptha_Timer_Block_Product_View extends Mage_Catalog_Block_Product_View
{
public function getPriceCountDown(){
if(Mage::helper('timer')->isEnabled()){
$currentDate = Mage::getModel('core/date')->date('Y-m-d');
$todate = $this->getProduct()->getSpecialToDate();
$fromdate = $this->getProduct()->getSpecialFromDate();
if($this->getProduct()->getSpecialPrice() != 0 || $this->getProduct()->getSpecialPrice()) {
if($this->getProduct()->getSpecialToDate() != null) {
if(strtotime($todate) >= strtotime($currentDate) && strtotime($fromdate) <= strtotime($currentDate)){
//到期时间 >= 系统时间 && 开始时间 <= 系统时间
//return true;
$title=Mage::helper('timer')->getTimerTitle();//促销结束倒计时
//后台 要记得设置title 输出页面有个判断
return array($todate,$title,true);//判断是否开始促销 是 显示时间 不是则分回 false
}
}
}
}
//如过 你想做个促销开始倒计时的话 你可以把这个改为 true也行
$title=Mage::helper('timer')->getWeicotTitle();//促销开始倒计时
//这个是我增加的 用来获得后台的 title 的设置
return array($fromdate,$title,true) ;
//return true;
}
同理 List.php 也可以用这个 方法 都一样只不过继承的类不同而已
这只是简单的为其增加了一个功能而已
但然你还的写个后台的选项表
并且在/app/code/local/Apptha/Timer /Helper/Data.php 中添加
//大概在 40 行添加
const XML_PATH_TITLES = 'timer/general/titles';
//并添加一个方法
public function getWeicotTitle(){
return $this->conf(self::XML_PATH_TITLES, $store);
}
这是模板的 修改方法 当然你也可以输出到其他模板当中
<?php
/* Count for timer calculation declared here */
$count = 1;
$_product = $this->getProduct();
//$toDate = $_product->getSpecialTODate();
$toDate = $this->getPriceCountDown()[0];//开始时间
?>
<?php $_wishlistSubmitUrl = $this->helper('wishlist')->getAddUrl($_product); ?>
<ul class="add-to-links">
<?php if ($this->helper('wishlist')->isAllow()) : ?>
<li><a href="<?php echo $_wishlistSubmitUrl ?>" onclick="productAddToCartForm.submitLight(this, '<?php echo $_wishlistSubmitUrl ?>'); return false;" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li>
<?php endif; ?>
<?php
$_compareUrl = $this->helper('catalog/product_compare')->getAddUrl($_product);
?>
<?php if ($_compareUrl) : ?>
<li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li>
<?php endif; ?>
</ul>
<!--Condition for Timer Controllers goes here-->
<?php
// var_dump((($this->getPriceCountDown()[2])==true)); ?>
<?php if (($this->getPriceCountDown()[2])==true): ?>
<?php if (Mage::helper('timer')->isShowTitle('viewpage')): ?>
<div id="heading<?php echo $count; ?>" style="color:#<?php echo $head_color; ?>; font-size: 18px; font-weight:bold;padding-top:15px;clear: both;">
<?php echo $this->getPriceCountDown()[1] ?>
</div>
<?php endif; ?>
<div id="countbox_<?php echo $count; ?>" class="timer-view"></div>
<?php if (Mage::helper('timer')->isShowCaption('viewpage')): ?>
<div class='clear'></div>
<div class='timerdate' id="caption<?php echo $count; ?>">
<span class='hour' style='margin:0px'>
<?php echo $this->__('Days') ?>
</span>
<span class='hour' style='margin:0 0 0 40px'>
<?php echo $this->__('Hours') ?>
</span>
<span class='min' style='margin:0 0 0 25px'>
<?php echo $this->__('Minutes') ?>
</span>
<span class='sec' style='margin:0 0 0 15px'>
<?php echo $this->__('Seconds') ?>
</span>
</div>
<?php endif;?>
<script type="text/javascript">
var dthen<?php echo $count; ?> = new Date("<?php echo Date("m/d/y", strtotime($toDate)).' 11:59:00 PM'; ?>");
start = "<?php echo Date("m/d/y h:i:s A", strtotime(Mage_Core_Model_Locale::date(null, null, "en_US", true))); ?>";
start_date = Date.parse(start);
var dnow<?php echo $count; ?> = new Date(start_date);
if(CountStepper>0)
ddiff= new Date((dnow<?php echo $count; ?>)-(dthen<?php echo $count; ?>));
else
ddiff = new Date((dthen<?php echo $count; ?>)-(dnow<?php echo $count; ?>));
gsecs<?php echo $count; ?> = Math.floor(ddiff.valueOf()/1000);
var iid<?php echo $count; ?> = "countbox_<?php echo $count; ?>";
CountBack(gsecs<?php echo $count; ?>,"countbox_"+timer, timer);
timer++;
</script>
<?php $count = $count + 1; ?>
<?php endif; ?>
<!--Dynamic style changes goes here-->
<?php
/* Admin Controllers for timer are declared here */
$desc_color = Mage::getStoreConfig('timer/apptha_timer_color/description');
$timer_color = Mage::getStoreConfig('timer/apptha_timer_color/text');
$head_color = Mage::getStoreConfig('timer/apptha_timer_color/heading_text_color');
?>
<style>
.timer-view{float: left;width: 100%;padding:0;color: #<?php echo $timer_color; ?>;font-size: 40px; font-family: arial;font-weight: bold;}
.timerdate{float: left;width: 100%;padding:0 0 15px 1px;color: #<?php echo $desc_color; ?>;font-size: 13px;}
#heading1{color:#<?php echo $head_color;?>;}
</style>
效果 前台
后台

Magento 后台可以设置
产品的购买数量
产品促销开始和结束时间
产品促销折扣信息
促销后自动恢复原价
当然你可指定一个目录专门做促销 然后用指定的模板输出 分类id 就像这样
Magento首页自定义调用目录
当然你也可以 创建一个新的块来输出 并通过xml 把它放到你所要放到的任何地方
你也可以 在块中添加属性筛选来输出你指定的数据
比如专门输出蓝色的裙子等
反正很自由的 -个xml几乎能完成所有的布局 不用sql就几乎能获得所有的数据
某些情况下 调用失败的 请检查你的块是否有启用
<?php
//高级测试版 首页幻灯片 这个模板石油新订单模板扣出来的 通过xml 实例化 他的块函数就行
//由于这个模板 是促销临时模板 我把css 是写里面的 1.是为了一个css优先级 2.是为了不去破坏原有的模板结构 3.修改最小化方便模板的通用
$_productCollection = $this->getLoadedProductCollection();
$_helper = $this->helper('catalog/output');
?>
<?php if (!$_productCollection->count()): ?>
<p class="note-msg"><?php echo $this->__('There are no products matching the selection.') ?></p>
<?php else: ?>
<div class="special-box home-box">
<script type="text/javascript">
//<![CDATA[
jQuery.easing['BounceEaseOut'] = function(p, t, b, c, d) {
if ((t/=d) < (1/2.75)) {
return c*(7.5625*t*t) + b;
} else if (t < (2/2.75)) {
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
} else if (t < (2.5/2.75)) {
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
} else {
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
}
};
jQuery(document).ready(function() {
jQuery('#mycarousel').jcarousel({
easing: 'BounceEaseOut',
scroll:1,
animation: 1000
});
});
//]]>
</script>
<style>
.jcarousel-skin-tango .jcarousel-item-placeholder {
background: #fff;
color: #000;
display: none;
}
.cms-home .special-box .percent-off {
display: none !important;
}
</style>
<?php /*?><div class="head"><span><?php echo $this->__($this->getTitle()) ?></span></div><?php */?>
<div class="content catalog-listing <?php echo $this->getClassName() ?>" style="padding: 0px 0 0 3px;">
<ul id="mycarousel" class="jcarousel-skin-tango"><!--js 开始-->
<ul class="home-list">
<?php foreach ($_productCollection as $_product): ?>
<?php //开始 注意css 的优先级 ?>
<li class="item" style="margin:0 auto; padding: 0 0 0 5px;">
<div class="home-product-img"><a width="155" height="120" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>)">
<img class="lazy product-image" data-original="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(155,120) ?>" src="<?php echo $this->getSkinUrl('images/loader.gif'); ?>" alt="<?php echo $this->htmlEscape($_product->getName()) ?>" /></a>
</div>
<?php echo Mage::helper('peexl_dailydeals')->dealSaveImage($_product); //促销上标?>
<div class="product-other-info">
<h2 class="product-name" style="font-size: 11px; padding-top: 5px;width: 168px; height: 29px; overflow: hidden;text-overflow: ellipsis;">
<a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>)"><?php echo $this->htmlEscape($_product->getName()) ?></a></h2>
<div class="sku-no">SKU:<?php echo $this->htmlEscape($_product->getSku()); ?></div>
<div class="regular-price-<?php echo $this->htmlEscape($_product->getSku()); ?>"><?php echo $this->getPriceHtml($_product, true, $this->getPriceSuffix()) ?></div>
<?php //由插件输出的数据 ?>
<?php if (Mage::getStoreConfig('dailydeals/peexl_dailydeals_configuration_group/peexl_dailydeals_enable', Mage::app()->getStore()) && Mage::helper('peexl_dailydeals')->isActiveDealProduct($_product) && Mage::getStoreConfig('dailydeals/peexl_dailydeals_configuration_group/peexl_dailydeals_show_remaining_qty', Mage::app()->getStore())) : ?>
<div class="dailydeals-clear"></div>
<style>.regular-price-<?php echo $this->htmlEscape($_product->getSku());?> {display: none;}</style>
<div class="item-remaining">
<?php
$_products=Mage::helper('peexl_dailydeals')->setProductFinalPrice($_product);
echo $this->getPriceHtml($_products, true) ?>
<span class="items-remaining-qty"><?php echo Mage::helper('peexl_dailydeals')->getItemRemainingQty($_product) ?></span>
<span class="item-remaining-label"><?php echo Mage::helper('peexl_dailydeals')->__('item(s) left') ?></span>
</div>
<div class="dailydeals-clear"></div>
<?php endif; ?>
<?php echo Mage::helper('peexl_dailydeals')->getProductTimer($_product) ?>
<div class="clear"></div>
<?php $categories = $_product->getCategoryIds(); ?>
<span>In </span>
<?php $i=1; foreach($categories as $k => $_category_id): ?>
<?php if($i>1) {break;} ?>
<?php $_category = Mage::getModel('catalog/category')->load($_category_id) ?>
<a class="in-category" href="<?php echo $_category->getUrl() ?>"><?php echo $_category->getName() ?></a>
<?php $i++; endforeach; ?>
</div>
</li>
<?php endforeach; ?>
</ul>
</ul>
</div>
<script type="text/javascript">decorateGeneric($$('.grid-row'), ['first', 'last', 'odd', 'even']);</script>
<script type="text/javascript">
jQuery("img.lazy").show().lazyload();
</script>
</div>
<?php endif; ?>
这个插件整体的效果并不是很好 完全可以用 我写的那个插件 加后台原有的促销功能代替 不过这个插件写的不错
其实magento 的自带的促销功能已经很强大了
来两张高级版

像购物车规则以及
优惠券等
总之很强大
Magento的优惠券的功能设置步骤很简单 通过几个步骤就可以轻松搞定了
第一,进入管理后台
第二,选择promotion –> shopping cart price rule
第三,新建一个rule,并输入相关的信息
其中包括rule名称,所要应用的站点(如果你运行多个站点),可以使用的客户组,还有就是优惠券的编码了。尽量弄一个有点规则但是又不是那么明显的编码。这样比较可信,而又不会让那些没得到优惠券的人滥用。
第四,设定优惠券的使用次数和每个用户可以使用的次数。
第五,如果没有选择应用的日期,则将永久应用该优惠规则直到你设置日期为止。当然不要忘了激活些规则。
第六,我们不需要设置条件,除非你想限定只有某些特定的商品才可以使用优惠券。
然后是最关键的一步,在action标签中,选择:在Apply后面的下拉框中选择Fixed amount discount.
备注
以上是个人的笔记 如有不足或错误 欢迎指出、

