在OpenCart中按购物车重量过滤付款方式

作为开发人员,您经常必须面对一个迫使您更改框架核心行为的场景。 如果这是管理用户界面已经提供的或类似的东西,那就太好了! 但是,在复杂的自定义情况下,您将需要的比这更多—您将不得不更改框架代码。

这样做时,您不想直接修改框架文件,因为这被认为是一种坏习惯,而且如果您在不同文件中进行了大量更改,这也会使框架升级成为噩梦。 因此,您必须寻找其他可能的方法来实现它而不修改内核本身。 如今,大多数框架都提供了某种系统,使您可以将其作为可扩展性的一部分。

今天,我们将在OpenCart中讨论类似的情况。 如果您积极参与OpenCart的开发,您可能知道您可以根据最小购物车结帐金额过滤付款方式。 例如,如果结帐总额少于一定数量,您可以选择不列出COD方法。 它是内置的,您可以在从后端配置付款方式时进行设置。

在本教程中,我们将对其进行扩展,并尝试根据购物车的总重量限制付款方式。 如果购物车重量小于某个预定值,我们将讨论如何在结帐时过滤COD方法。 要实现此功能,它需要对代码进行更改,因为它不能从后端本身进行配置。

如前所述,您不得更改框架的任何核心文件,这使我们可以选择OCMOD。 如果您不熟悉它,请不要担心,因为我将在下一部分中介绍它。

我假设您使用的是最新版本的OpenCart,在撰写本文时,它是OpenCart 2.2.0.0。 另外,OCMOD系统仅适用于OpenCart 2.xxx以后的版本,因此,您可以使用另一个原因来安装最新版本。

这样就为我们前进奠定了良好的基础。 我们走吧!

什么是OCMOD?

OCMOD是基于XML的搜索和替换系统,使您可以更改OpenCart框架的核心文件。 您按照OCMOD的约定定义XML文件,其余的工作将由XML文件完成。 如果您听说过OpenCart 1.5.x中的vQmod系统,则它是该系统的后继产品。

让我们列出一些示例以了解其功能:

  • 在文件中的任何特定行之前插入一段代码。
  • 用您的自定义代码块替换代码块。
  • 使用正则表达式在文件中找到一个字符串,然后将其替换为另一个字符串。
  • 更改OpenCart数据库的架构。
  • 还有很多...

尽管接下来的两节将帮助您了解其工作原理,但是您也可以查看OCMOD的深入说明

如果您不熟悉vQmod或OCMOD,我建议您阅读上述文章,因为本教程将介绍OCMOD的用法。

熟悉OCMOD之后,我们将进入下一部分,该部分将构建OCMOD模块以实现上述自定义。

没有OCMOD的外观如何?

让我们快速浏览一下本例中需要更改的文件。 继续并在您喜欢的文本编辑器中打开catalog/controller/checkout/payment_method.php文件,然后在index方法中查找以下代码片段。

$results = $this->model_extension_extension->getExtensions('payment');

它正在从数据库中获取所有有效的付款方式。 在这一行之后,我们可以插入代码,以便在购物车的总重量小于某个特定值时过滤COD方法。 如果我们要直接修改此文件,它应该看起来像这样。

$results = $this->model_extension_extension->getExtensions('payment');

/*** our custom code ***/
$totalCartWeight = $this->cart->getWeight();
$minCodWeight = 100;

if ($totalCartWeight < $minCodWeight) {
    $updated_results = array();

    foreach ($results as $result) {
      if ($result['code'] != 'cod') {
        $updated_results[] = $result;
      }
    }

    $results = $updated_results;
}
/*** our custom code ***/

如您所见,我们的自定义代码包含在注释中。

首先,我们使用Cart对象的getWeight方法获取购物车的总重量。 为简单起见,我们已将COD方法的最低要求权重硬编码为100。当然,您可以制作一个后端配置模块,以便可以从管理端本身对其进行配置。

接下来,有一个if条件,它以最小的COD重量检查购物车的总重量,并基于此条件从$results数组中过滤出COD方法。

因此,就代码修改而言,仅此而已。 在下一节中,我们将通过使用OCMOD来实现它,这就是我在本文开头向您保证的内容!

生成并安装OCMOD模块

构建模块

创建具有以下内容的filter_payment_method.ocmod.xml文件。

<?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>Filtering payment methods based on cart weight</name>
    <code>Code_Tutsplus_Filter_Payment_Methods</code>
    <version>1.0</version>
    <author>Code Tutsplus</author>
    <link>http://code.tutsplus.com</link>
    <file path="catalog/controller/checkout/payment_method.php">
        <operation>
            <search><![CDATA[
            $results = $this->model_extension_extension->getExtensions('payment');
            ]]></search>
            <add position="replace"><![CDATA[
            $results = $this->model_extension_extension->getExtensions('payment');

            /*** our custom code ***/
            $totalCartWeight = $this->cart->getWeight();
            $minCodWeight    = 100;
            
            if ($totalCartWeight < $minCodWeight) {
              $updated_results = array();
                
              foreach ($results as $result) {
                if ($result['code'] != 'cod') {
                  $updated_results[] = $result;
                }
              }

              $results = $updated_results;
            }
            /*** our custom code ***/
            ]]></add>
        </operation>
    </file>
</modification>

如您所见,大多数标签是不言自明的。 最重要的标记是<file> ,它定义将在其上执行操作的文件名。 <search>标记用于搜索我们要查找的代码,最后我们使用<add>标记注入代码。

安装模块

转至后端,然后导航至Extensions> Extension Installer 。 单击上按钮,然后选择我们在上一节中创建的文件。 如果一切顺利,您应该会看到一条成功消息。

导航到Extensions> Modifications ,您应该会在该页面上看到OCMOD扩展名。

修改项

您已经成功安装了扩展程序!

转至前端,然后在购物车中添加几个产品,以使购物车的总重量保持在100以下。现在,开始结帐流程,在“ 付款方式”标签中,您应该注意到没有可用的COD 。 当然,您还应该至少启用一种付款方式,否则OpenCart将抱怨没有可用的付款选项

所以,今天就这样! 这样,您可以继续使用OCMOD系统进行需要更改核心文件的任何自定义。

结论

在本文中,我们学习了如何使用OCMOD系统根据购物车的总重量过滤结帐时的付款方式。 我希望您喜欢它并在OpenCart中学到一些新东西。

不要忘记使用下面的评论提要来分享您的想法和疑问。

翻译自: https://code.tutsplus.com/tutorials/filtering-the-payment-methods-by-cart-weight-in-opencart--cms-26467

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值