【问题标题】:Cash On Delivery activated Admin Only ( Not Frontend enabled ) - Magento?货到付款激活仅管理员(未启用前端)- Magento?
【发布时间】:2012-12-10 23:15:05
【问题描述】:

我现在正在使用 magento 一段时间。我想知道是否可以启用 货到付款选项 仅供管理员使用。我想把它用作商店取货...

因此,这种方式只能在管理面板中为那些想要商店取货的人创建手动订单。

我不希望它显示在 Magento 前端商店中。

大家能帮帮我吗???

【问题讨论】:

    标签: e-commerce magento-1.7 magento-1.6 magento


    【解决方案1】:

    一种非常简单的方法,但可能不是最干净的方法:

    1. 为商店启用货到付款
    2. 使用 CSS 从前端隐藏它。

    使用 CSS 来实现这一点会向公众隐藏选项,但不会阻止熟悉 CSS 的 Web 开发人员找到它并下达货到付款订单 - 尽管我想不出任何理由有人会故意这样做,因为他们不会通过下订单获得太多。

    编辑:

    要隐藏货到付款,请将其添加到您的 CSS:

    input#p_method_cashondelivery { display: none; }
    label[for=p_method_cashondelivery] { display: none; }
    

    【讨论】:

      【解决方案2】:

      有很多方法可以实现这一点,但它们需要熟悉 Magento 生态系统。我不鼓励使用 CSS 向最终用户隐藏它,因为稍微了解 CSS 的人可以轻松地取消隐藏它并免费获得购买您的产品的权限。

      我还建议不要覆盖核心文件(即使您没有编辑它们),因为这会导致将来出现升级问题。

      实实在在的方式:

      我最喜欢的方法是启用支票/货币订单方法,并为自己创建一个小模块,像这样。前面的任何一个考虑都不会在这里产生任何影响。

      /app/etc/modules/Company_Module.xml

      <?xml version="1.0"?>
      <config>
          <modules>
              <Company_Module>
                  <active>true</active>
                  <codePool>local</codePool>
                  <depends>
                      <Mage_Payment/>
                  </depends>
              </Company_Module>
          </modules>
      </config>
      

      /app/code/local/Company/Module/etc/config.xml

      <?xml version="1.0"?>
      <config>
      <modules>
          <Company_Module>
              <version>0.0.1</version>
          </Company_Module>
      </modules>
      
      <global>
          <models>
              <Company_Module>
                  <class>Company_Module_Model</class>
              </Company_Module>
          </models>
          <events>
              <payment_method_is_active>
                  <observers>
                      <company_module>
                          <type>singleton</type>
                          <class>Company_Module/Observer</class>
                          <method>paymentMethodIsActive</method>
                      </company_module>
                  </observers>
              </payment_method_is_active>
          </events>
      </global>
      
      </config>
      

      /app/code/local/Company/Module/Model/Observer.php

      <?php
      
      class Company_Module_Model_Observer
      {
          public function paymentMethodIsActive($observer)
          {
              $instance = $observer->getMethodInstance();
              $result = $observer->getResult();
      
              if ($instance->getCode() == "checkmo") {
                  if (Mage::app()->getStore()->isAdmin()) {
                      $result->isAvailable = true;
                  } else {
                      $result->isAvailable = false;
                  }
              }
          }
      }
      

      【讨论】:

      • 谢谢@JMax,我也这样做了。但我不太擅长编程部分。这段代码有什么作用??
      • 它检查请求是否来自管理区域,如果是,我们说支付方式是活跃的,否则,我们说支付方式是非活跃的。这是防弹的。
      • 嗨@JMax,我试过了。我激活了这个方法,但问题是我不希望它显示在前端。但它也可以在前端使用。我想隐藏它.. ??有什么建议吗?
      • 使用 $instance->getCode() 代替 $instance->getName()
      • 另外,您可以使用 &lt;frontend&gt; 代替 &lt;global&gt; 事件命名空间,这样您就不必检查事件是在前端还是在 adminhtml 中触发
      【解决方案3】:

      要隐藏在前端,必须设置为false 受保护的 $_canUseCheckout = false;到您的付款方式。

      要在admin端显示,必须设置为true才可以 受保护的 $_canUseInternal = true;到您的付款方式。

      【讨论】:

        猜你喜欢
        • 2011-01-06
        • 2012-12-10
        • 1970-01-01
        • 2014-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-29
        • 2015-05-31
        相关资源
        最近更新 更多