这个功能远远超出了 Opencart 的构建目标,但如果你对 PHP/CodeIgniter 有一定的了解,那么你应该能够完成大部分/所有的 mod。了解 SQL 也很不错,但如果您还不了解的话,学习起来也很快。
我会说你的模组分为两部分,每部分都有自己的难度。
我正在使用 OpenCart 建立一个电子商务网站,并且我想提供订阅服务。特别是 3/6/12 个月的订阅。我对定期计费不感兴趣(我知道有 PayPal 和 Authorize.net 的模块)。我希望用户提前支付一次。从配置的角度来看,这是否会转化为 3 个伪产品?我想这是可行的,到目前为止,仅使用产品配置。3 种产品,每种都有一个价格。
棘手的部分来了。对于用户支付的每个月,他们可以在他们的“计费周期”内订购产品,每月只有一次。因此,如果用户在 23/5 支付 3 个月的订阅费用:
he can get one product in the period 23/5-22/6,
one in 23/6-22/7, and
one in 23/7-22/8
我想我会为此做的是为每个订阅长度添加一个产品,并且每个产品都会向他们发放适当的帐户信用,并让这个信用达到每月购买一个产品的订阅时间的完美金额。
为此,我建议在文件 catalog>model>checkout>order.php(或您选择的任何模型)中添加一个函数将资金添加到数据库中的 customer_transaction 字段中,然后调用它并在 catalog>controller>checkout 中添加数据>成功.php。
我认为验证客户是否购买了适当的订阅产品并验证该购买尚未获得信用是很明智的。
为确保他们每月只获得 1 件产品,您需要在 catalog>controller>checkout>checkout.php 的开头编写一个脚本,以便在他们过于频繁地尝试获得产品时将他们重定向到错误消息。
用户每月不能订购超过一种产品,并且在 22/8 之后他也不能获得任何产品,除非他续订订阅。此外,如果我能有一个 cron 工作,检查用户是否在当月使用了他的订阅,并发送“嘿,获取本月的产品”类型的提醒电子邮件,那就太棒了。
我什至不知道从哪里开始,但如果你愿意付钱,你可以发帖寻求帮助,并可能以优惠的价格添加这个功能。
这是我的第一个 OpenCart 项目,我浏览了文档并在 Google 上搜索了很多,我玩过本地安装,我正在尝试在不修改核心代码的情况下弄清楚我的要求是否可行,我想避免这种情况。但是,如果没有其他办法,我知道 OpenCart 是一个 MVC(+L(anguage)) 框架,但是我还没有找到任何关于如何自定义其功能的可靠文档,只有针对特定要求的一些片段。
同样,这超出了 Opencart 的构建目标,需要进行一些修改。至于有关如何使用 Opencart 脚本以及如何自定义它的文档,我也没有找到任何文档。在过去的 2 个月里,要了解我所掌握的知识对我来说是相当困难的,但如果你的问题很简短,你通常可以在需要时让人们一路帮助你。
如果可以的话,我想写下我的想法,如果这听起来不错,请告知:
I would like to add one more entity (object/model) for storing the subscription, the user to which it belongs, start and end date and
是否被利用。基本上,订阅是一个正常的订单,我希望它像一个一样存储,我只需要保留更多的字段。
我会将这些添加为属性,您可以在网站目录>属性、目录>属性组和目录>产品后端的属性选项卡中的管理中执行此操作。
正如我所说,我需要运行两项检查:用户是否使用了当月的订阅?为此,我正在考虑有一个标志“isUsed”字段,每次用户到达他的计费日期时,它可以通过 cron 作业重置。(在我们的示例中为 23/6、23/7)。或者,我可以添加 3 个条目,一个用于每个计费周期并相应地更新它们。订阅是否已过期?我可以检查订阅的到期日期。
我不知道如何做这个 cron 工作,但如果你能弄清楚,你可以在数据库中搜索属性名称和值,然后如果值在你的范围内,则应用你的 cron 工作。
希望这对您的期望有所帮助!
更新
要将数据插入数据库,您可以复制 admin/model/sale/customer.php 中的 addTransaction () 函数之类的内容
public function addTransaction($customer_id, $description = '', $amount = '', $order_id = 0) {
$customer_info = $this->getCustomer($customer_id);
if ($customer_info) {
$this->db->query("INSERT INTO " . DB_PREFIX . "customer_transaction
SET customer_id = '" . (int)$customer_id . "',
order_id = '" . (int)$order_id . "',
description = '" . $this->db->escape($description) . "',
amount = '" . (float)$amount . "',
date_added = NOW()");
}
这在 admin/controller/sale/customer.php
$this->load->model('sale/customer');
if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->user->hasPermission('modify', 'sale/customer')) {
$this->model_sale_customer->addTransaction($this->request->get['customer_id'],
$this->request->post['description'], $this->request->post['amount']);
$this->data['success'] = $this->language->get('text_success');
} else {
$this->data['success'] = '';
}