此功能远远超出了 Opencart 的构建目的,但如果您对 PHP/CodeIgniter 有一定的了解,那么您应该能够完成大多数/所有的 mods。了解 SQL 也很有好处,但如果您还不了解,那么学习起来会很快。
我想说你的模组分为两部分,每个部分都有自己的难度级别。
我正在使用 OpenCart 建立一个电子商务网站,我想提供
订阅。特别是 3/6/12 个月的订阅。我不是
对定期计费感兴趣(我知道有一些模块
PayPal 和 Authorize.net)。我希望用户提前付款一次。做
从配置点来看,这转化为 3 个伪产品
看法?我想到目前为止,仅通过产品这是可行的
配置。 3 个产品,每个产品一个价格。
棘手的部分来了。用户每月支付的费用
每月只能在他们的范围内订购一次产品
“结算周期”。因此,如果用户支付 3 个月的订阅费
23/5:
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 个产品,您需要在目录>控制器>结账>checkout.php 的开头编写一个脚本,以便在他们尝试过于频繁地获取产品时将他们重定向到错误消息。
用户每月不能订购超过一种产品,
并且他在 22/8 之后也不应该能够获得任何产品,除非
他续订了他的订阅。此外,如果我可以的话那就太棒了
有一个 cron 作业,检查用户是否已使用他的订阅
当月,并发送“嘿,获取本月的产品”
一种提醒电子邮件。
我什至不知道从哪里开始,但如果您愿意付费,您可以发帖寻求帮助,并且可能会以优惠的价格添加此功能。
这是我的第一个 OpenCart 项目,我经历了
文档和谷歌搜索了很多,我和当地人一起玩过
安装,我想弄清楚我要问的是
在不修改核心代码的情况下可行,我想避免这种情况。
但是,如果没有其他办法,我明白 OpenCart 是一个
MVC(+L(anguage))框架,但我还没有找到任何可靠的
有关如何自定义其功能的文档,仅位 ans
满足特定要求的件。
同样,这超出了 Opencart 的初衷,需要进行多次修改。至于有关 Opencart 脚本如何工作以及如何自定义它的文档,我也没有找到。在过去的两个月里,我学习知识对我来说是相当困难的,但如果你的问题很短,你通常可以在需要时让人们一路帮助你。
如果可以的话,我想写下我的想法,请,
如果这听起来不错,请建议:
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 作业。
希望这对您的期望有所帮助!
UPDATE
要将数据插入数据库,您可以复制 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'] = '';
}