• 关于magento 2 关注了一下下

    从magento1.1 到magento1.7  也经历了 好几年的发展了

    每次发布一个小的稳定的新版本  都伴随着一次模板与兼容性的大调整

    丰富 灵活 一直是magento所看好的一点,但是配置需求与效率 就压力很大了,magento2 从开发到现在 也经历了半年了, 由于比较忙没有做详细的测试,只是偶尔网上关注一下。

    总的来看,更丰富更灵活了,支持的数据库 更多,命名结构的调整,加载解析的优化,以及一些功能的添加  相比1版的  还是相当具有吸引力的。  数据结构设计上依然采用eav 模型,执行效率 与 服务器配置消耗  依然有待亲身经历了。

    对程序的一知半解  也不好单从开发目标及规划上判断出  成品相对magento1版会优越多少。 不过大团队开发,松耦合 集成共用的模式   应该就注定了 效率上的硬伤,可能我这个想法太过无知  :-)

    另一方面 就是 2版是基于 php5.3  这点应该也是很多陈旧服务器提供商 很难接受的, 成本上相对也会有一个提高。 对于国内的大部分小家子个体户市场 不知道影响怎么样

    继续期待下  :-)

  • 根据产品取其自定义属性值

    magento中 使用自定义属性 的频率还是相当高的

    之前 自己做模板的时候  再调用产品的某个自定义属性时是绞尽脑汁  也没找到什么好的方法, 因为对程序逻辑本身缺乏基础和认知,所以只能走一些旁门左道,把产品的所有相关属性提取出来后过滤一次,   这样的效率    可想而知
    不过这边还是做个简单记录吧:
    首先需要一个针对 产品提取 各属性值的 方法, 由于自带的方法包含信息比较多,所以我们需要自己改写 一下
    app\code\core\Mage\Catalog\Block\Product\View 目录下的  Attributes.php 文件,参考getAdditionalData 方法,新建改写以下方法
    public function getMeSetData($t_product)
    {
    $data = array();
    $product = $t_product;
    $attributes = $product->getAttributes();
    foreach ($attributes as $attribute) {
    $value = $attribute->getFrontend()->getValue($product);

    if (!$product->hasData($attribute->getAttributeCode())) {
    $value = Mage::helper(‘catalog’)->__(‘N/A’);
    } elseif ((string)$value == ”) {
    $value = Mage::helper(‘catalog’)->__(‘No’);
    } elseif ($attribute->getFrontendInput() == ‘price’ && is_string($value)) {
    $value = Mage::app()->getStore()->convertPrice($value, true);
    }

    if (is_string($value) && strlen($value)) {
    $data[$attribute->getAttributeCode()] = array(
    ‘label’ => $attribute->getStoreLabel(),
    ‘value’ => $value,
    ‘code’  => $attribute->getAttributeCode()
    );
    }
    }
    return $data;
    }
    方法有了,接下来就是如何调用了
    这边以产品查看页中调用为例:
    $p_attrs = Mage::getBlockSingleton(‘catalog/product_view_attributes’)->getMeSetData($_product);
    这样取出来的是与产品相关的所有属性信息,再对此属性集过滤  提取自己需要的信息。
    foreach($p_attrs as $p_attr => $attr_arr)
    {
    if(strstr($p_attr,’attr_code’)) {
    ……. //自定义操作
    }
    }
    这种,一看就是属于吃力不讨好的事,  不过也算是解决问题的一条笨途径了

     

    偶然的机会在维护的时候,发现以下代码,简洁明了,具体我没去考证就是了

    <?php echo $_product->getResource()->getAttribute(‘attr_code’)->getFrontend()->getValue($_product);

    这就是菜鸟与大神间的差距啊 ~~~~…

  • magento 调用当前使用的货币符号

    群里面看到的
    感觉有点用,顺便拿过来分享下

    <?php echo Mage::app()->getLocale()->currency(Mage::app()->getStore()->getCurrentCurrencyCode())->getSymbol(); ?>

  • Magento Maximum Order Amount 设置及解决方法简记

    仿照后台 最低订单价格限制修改

    步骤如下:

    1、编辑

    app/code/core/Mage/Sales/etc/system.xml

    复制minimum_order 配置段,并将相关设置 修改为 maximum_order

    (刷新后台会发现相关设置已经可用, 如未发现请核实修改的配置代码)

    2、编辑功能代码

    app/code/core/Mage/Sales/Model/Quote.php

    相同的,复制并修改validateMinimumAmount  功能函数

    同样 将 min 修改为 max即可

     

    app\code\core\Mage\Sales\Model\Quote\Address.php

    相同的,复制并修改validateMinimumAmount  功能函数

    同样 将 min 修改为 max即可

    此处需注意将 逻辑判断的小于  修改为大于

     

    3、添加功能调用

    app/code/core/Mage/Checkout/controllers/CartController.php

    修改 indexAction 中的提示信息,相同的仿照minimum_amount 进行操作

    app/code/core/Mage/Checkout/controllers/OnepageController.php

    添加逻辑判断 及重定向页面

     

    4、测试使用功能

    完成第一步中的设置后,保存 更新缓存,进入前台页面下单

  • 通过ajax操作magento产品属性加一(如diggs +1)

    参考其他网站www.marcmart.com   实现 站内产品digg+1
    这边简单的记一下流水账,希望对看到这篇文章的人有帮助 :-)

    首先需要建立对应的产品属性,这边我们命名为 diggs . 类型为文本,默认值为 0
    新建完成后添加此属性到对应的属性组,如Default

    接下来,需要进行ajax操作 就要有一个对应的请求url
    于是我们需要在控制器中添加对应的动作
    修改core/Mage/Catalog/controllers
    ProductController.php 文件,添加indexAction 方法     (由于magento   local 目录中方法重载偶尔会抽风,所以这边直接对核心文件进行修改)
    代码如下:

    public function indexAction()
        {
            $productId = $this->getRequest()->getParam('id');
            $qty = (int)$this->getRequest()->getParam('qty');
            $key = Mage::getSingleton('core/cookie')->get($productId.'diggs');
            if(!$key){
                Mage::getSingleton('core/cookie')->set($productId.'diggs',md5($productId.'diggs'));
                $product = Mage::getModel('catalog/product')
                        ->load($productId)
                        ->setDiggs($qty)
                        ->save();
     
                echo 'yes';
            }
        }

    属性及处理动作有了,现在要做的就是把他们关联起来了。
    这边我们使用jquery进行操作,由于比较菜  就没用prototype去重写ajax 方法了
    修改page.xml  或 catalog.xml  在对应位置 调用jquery库,为了防止js库冲突,建议在page.xml  中最先调用jquery
    修改 产品查看页代码 view.phtml
    添加动作按钮 及 调用相关数据的代码  (样式可自行定义):


    1
    2
    3
    4
    5
    <?php  if($_product->getDiggs()!= ''): ?>
    <span class="diggs"><a id="diggs" href="javascript:;">Diggs</a> (<span id="diggs-qty">
    <?php echo $_product->getDiggs(); ?>
    </span> customers like this)</span><span id="loadimg" style="display: none;background:url(<?php echo $this->getUrl('js/jquery').'opc-ajax-loader.gif'; ?>) no-repeat;float:left;height:16px;width:16px;"></span>
    <?php endif; ?>

    然后就是按钮动作控制的js代码了,样例代码如下:


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <script type="text/javascript">
        jQuery.noConflict();
        jQuery("#diggs").click(function(){
            jQuery("#loadimg").show();
            var diggs = parseInt(jQuery("#diggs-qty").text())+1;
            jQuery.ajax({
            url:"<?php echo Mage::getBaseUrl()?>catalog/product/index",
            dataType:"text",
            data:"id=<?php echo $_product->getId();?>&qty="+diggs,
            success:function(data){
                jQuery("#loadimg").hide();
                if(data){
                    jQuery("#diggs-qty").html(diggs); alert('Thank you!');
                }else{alert('You have already dugg this product.')} }});
        });
    </script>

    这样一整条 逻辑流程 就算走完了, 清理缓存后测试看看吧 :)

click
©2010-2024 Jeen All Rights Reserved.Powered by emlog 京ICP备15058100号-1