OpenCart教程:自定义配送方式(第一部分)

虽然 opencart 的核心本身提供了许多有用的运输方法,但您总有可能需要创建自己的运输方法。另一方面,作为一名 web 开发人员,您将始终尝试探索您选择的框架,以了解如何创建您自己的自定义内容!

在本系列中,我们将在 OpenCart 中创建自定义运输方法模块。这将是一个由两部分组成的系列,在第一部分中,我们将为自定义运输方法创建一个后端配置表单。

要在 OpenCart 中创建新的自定义运输方法,需要按照 OpenCart 的约定实施文件。在后端,您需要提供一个配置表单,允许管理员配置价格、地理区域以及与运输方式相关的其他参数。在前端,您将实现所需的文件,以便在结账时选择您的自定义送货方式!

今天,我们将完成后端设置。我假设您使用的是最新版本的 OpenCart。在第二部分中,我们将探索前端对应部分,其中我们将看到前端文件设置和前端演示。

后端文件设置概览

让我们从后端所需的文件列表开始。我们将使用“custom”作为自定义送货方式的名称。

admin/controller/shipping/custom.php:这是一个控制器文件,我们将在其中设置配置表单所需的所有内容。admin/language/english/shipping/custom.php:这是一个语言文件,我们将在其中定义表单的标签。admin/view/template/shipping/custom.tpl:这是一个视图模板文件,其中包含我们的配置表单的 HTML 代码。

这就是后端设置的情况。

文件设置

让我们从控制器设置开始。

创建控制器文件

创建文件 admin/controller/shipping/custom.php 并将以下内容粘贴到该文件中。

load->language('shipping/custom');    $this->document->setTitle($this->language->get('heading_title'));    $this->load->model('setting/setting');    if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {      $this->model_setting_setting->editSetting('custom', $this->request->post);      $this->session->data['success'] = $this->language->get('text_success');      $this->response->redirect($this->url->link('extension/shipping', 'token=' . $this->session->data['token'], 'SSL'));    }    $data['heading_title'] = $this->language->get('heading_title');        $data['text_edit'] = $this->language->get('text_edit');    $data['text_enabled'] = $this->language->get('text_enabled');    $data['text_disabled'] = $this->language->get('text_disabled');    $data['text_all_zones'] = $this->language->get('text_all_zones');    $data['text_none'] = $this->language->get('text_none');    $data['entry_cost'] = $this->language->get('entry_cost');    $data['entry_tax_class'] = $this->language->get('entry_tax_class');    $data['entry_geo_zone'] = $this->language->get('entry_geo_zone');    $data['entry_status'] = $this->language->get('entry_status');    $data['entry_sort_order'] = $this->language->get('entry_sort_order');    $data['button_save'] = $this->language->get('button_save');    $data['button_cancel'] = $this->language->get('button_cancel');    if (isset($this->error['warning'])) {      $data['error_warning'] = $this->error['warning'];    } else {      $data['error_warning'] = '';    }    $data['breadcrumbs'] = array();    $data['breadcrumbs'][] = array(      'text' => $this->language->get('text_home'),      'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')    );    $data['breadcrumbs'][] = array(      'text' => $this->language->get('text_shipping'),      'href' => $this->url->link('extension/shipping', 'token=' . $this->session->data['token'], 'SSL')    );    $data['breadcrumbs'][] = array(      'text' => $this->language->get('heading_title'),      'href' => $this->url->link('shipping/custom', 'token=' . $this->session->data['token'], 'SSL')    );    $data['action'] = $this->url->link('shipping/custom', 'token=' . $this->session->data['token'], 'SSL');    $data['cancel'] = $this->url->link('extension/shipping', 'token=' . $this->session->data['token'], 'SSL');    if (isset($this->request->post['custom_cost'])) {      $data['custom_cost'] = $this->request->post['custom_cost'];    } else {      $data['custom_cost'] = $this->config->get('custom_cost');    }    if (isset($this->request->post['custom_tax_class_id'])) {      $data['custom_tax_class_id'] = $this->request->post['custom_tax_class_id'];    } else {      $data['custom_tax_class_id'] = $this->config->get('custom_tax_class_id');    }    if (isset($this->request->post['custom_geo_zone_id'])) {      $data['custom_geo_zone_id'] = $this->request->post['custom_geo_zone_id'];    } else {      $data['custom_geo_zone_id'] = $this->config->get('custom_geo_zone_id');    }    if (isset($this->request->post['custom_status'])) {      $data['custom_status'] = $this->request->post['custom_status'];    } else {      $data['custom_status'] = $this->config->get('custom_status');    }    if (isset($this->request->post['custom_sort_order'])) {      $data['custom_sort_order'] = $this->request->post['custom_sort_order'];    } else {      $data['custom_sort_order'] = $this->config->get('custom_sort_order');    }    $this->load->model('localisation/tax_class');    $data['tax_classes'] = $this->model_localisation_tax_class->getTaxClasses();    $this->load->model('localisation/geo_zone');    $data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones();    $data['header'] = $this->load->controller('common/header');    $data['column_left'] = $this->load->controller('common/column_left');    $data['footer'] = $this->load->controller('common/footer');    $this->response->setOutput($this->load->view('shipping/custom.tpl', $data));  }  protected function validate() {    if (!$this->user->hasPermission('modify', 'shipping/custom')) {      $this->error['warning'] = $this->language->get('error_permission');    }    return !$this->error;  }}

这是一个重要的文件,定义了后端配置表单的大部分逻辑。我们将浏览控制器的 index 方法中的重要片段。根据约定,您需要定义类名 ControllerShippingCustom

index 方法中,我们首先加载语言文件并设置页面标题。

接下来,我们加载 setting 模型并将设置保存到数据库中,作为配置表单的 POST 数据。在保存数据之前,我们使用该文件中定义的 validate 方法验证表单。

$this->load->model('setting/setting');if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {  $this->model_setting_setting->editSetting('custom', $this->request->post);  $this->session->data['success'] = $this->language->get('text_success');  $this->response->redirect($this->url->link('extension/shipping', 'token=' . $this->session->data['token'], 'SSL'));}

之后,我们将语言标签分配到 $data 数组中,以便我们可以在视图模板文件中访问这些标签。

接下来,有一个标准片段可以设置正确的面包屑链接。

$data['breadcrumbs'] = array();$data['breadcrumbs'][] = array(  'text' => $this->language->get('text_home'),  'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL'));$data['breadcrumbs'][] = array(  'text' => $this->language->get('text_shipping'),  'href' => $this->url->link('extension/shipping', 'token=' . $this->session->data['token'], 'SSL'));$data['breadcrumbs'][] = array(  'text' => $this->language->get('heading_title'),  'href' => $this->url->link('shipping/custom', 'token=' . $this->session->data['token'], 'SSL'));

接下来,我们设置 action 变量,以确保表单提交到我们的 index 方法。同样,如果用户点击 取消 按钮,就会返回送货方式列表。

$data['action'] = $this->url->link('shipping/custom', 'token=' . $this->session->data['token'], 'SSL');$data['cancel'] = $this->url->link('extension/shipping', 'token=' . $this->session->data['token'], 'SSL');

此外,还有代码可以在添加或编辑模式下填充配置表单字段的默认值。

if (isset($this->request->post['custom_cost'])) {  $data['custom_cost'] = $this->request->post['custom_cost'];} else {  $data['custom_cost'] = $this->config->get('custom_cost');}if (isset($this->request->post['custom_tax_class_id'])) {  $data['custom_tax_class_id'] = $this->request->post['custom_tax_class_id'];} else {  $data['custom_tax_class_id'] = $this->config->get('custom_tax_class_id');}if (isset($this->request->post['custom_geo_zone_id'])) {  $data['custom_geo_zone_id'] = $this->request->post['custom_geo_zone_id'];} else {  $data['custom_geo_zone_id'] = $this->config->get('custom_geo_zone_id');}if (isset($this->request->post['custom_status'])) {  $data['custom_status'] = $this->request->post['custom_status'];} else {  $data['custom_status'] = $this->config->get('custom_status');}if (isset($this->request->post['custom_sort_order'])) {  $data['custom_sort_order'] = $this->request->post['custom_sort_order'];} else {  $data['custom_sort_order'] = $this->config->get('custom_sort_order');}

在下一部分中,我们从数据库加载税级和地理区域,这些数据将用作配置表单中的下拉选项。

$this->load->model('localisation/tax_class');$data['tax_classes'] = $this->model_localisation_tax_class->getTaxClasses();$this->load->model('localisation/geo_zone');$data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones();

最后,我们分配视图的子模板和主模板。

$data['header'] = $this->load->controller('common/header');$data['column_left'] = $this->load->controller('common/column_left');$data['footer'] = $this->load->controller('common/footer');$this->response->setOutput($this->load->view('shipping/custom.tpl', $data));

创建语言文件

创建文件 admin/language/english/shipping/custom.php 并将以下内容粘贴到该文件中。

<?php// Heading$_['heading_title']    = 'Custom Rate';// Text$_['text_shipping']    = 'Shipping';$_['text_success']     = 'Success: You have modified custom rate shipping!';$_['text_edit']        = 'Edit Custom Rate Shipping';// Entry$_['entry_cost']       = 'Cost';$_['entry_tax_class']  = 'Tax Class';$_['entry_geo_zone']   = 'Geo Zone';$_['entry_status']     = 'Status';$_['entry_sort_order'] = 'Sort Order';// Error$_['error_permission'] = 'Warning: You do not have permission to modify custom rate shipping!';

文件的内容应该是不言自明的!

创建视图文件

创建文件 admin/view/template/shipping/custom. 并将以下内容粘贴到该文件中。

<form action="" method="post" enctype="multipart/form-data" id="form-custom" class="form-horizontal">
<input type="text" name="custom_cost" value="" placeholder="" id="input-cost" class="form-control" />
<option value="" selected="selected"> <option value="">
<option value="" selected="selected"> <option value="">
<input type="text" name="custom_sort_order" value="" placeholder="" id="input-sort-order" class="form-control" />

同样,这应该很容易理解。此模板文件的目的是为我们的自定义运输方法提供配置表单。它使用我们之前在控制器文件中设置的变量。

因此,就我们的自定义运输方法而言,后端文件设置就是这样。在下一节中,我们将了解如何启用自定义运输方式以及自定义配置表单的外观!

启用自定义运送方式

前往管理部分,然后转至 扩展 > 运送。您应该会看到我们的自定义送货方式被列为自定义费率。点击+符号安装我们的自定义送货方式。安装后,您应该能够看到编辑链接来打开配置表单。点击编辑链接,表单应如以下屏幕截图所示。

OpenCart教程:自定义配送方式(第一部分)

上述表单中的重要字段是税级地理区域强>。

如果您除了成本字段中定义的金额之外还需要征收任何其他税款,则可以通过税级字段选择适当的选项。我们现在选择应税商品

通过地理区域字段,您可以选择此方法适用的区域;为了简单起见,选择所有区域。另外,请确保将状态设置为已启用,否则不会在前端结账中列出。

填写完必要的数据后,点击保存按钮就可以了。今天的文章就到此为止,我将很快在下一部分中给您回复,其中将解释前端文件设置。

结论

今天,我们开始了一系列关于如何在 OpenCart 中创建自定义送货方式的系列。在第一部分中,我们浏览了后端部分并探讨了如何设置配置表单。如果有任何疑问和建议,请留言!

以上就是OpenCart教程自定义配送方式(第一部分)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1551513.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 21:48:16
下一篇 2025年12月21日 21:48:25

相关推荐

  • CSS动画教程:手把手教你实现脉冲特效

    CSS动画教程:手把手教你实现脉冲特效,需要具体代码示例 引言:CSS动画是网页设计中常用的一种效果,它可以为网页增添活力和视觉吸引力。本篇文章将带您深入了解如何利用CSS实现脉冲特效,并提供具体的代码示例教您一步步完成。 一、了解脉冲特效脉冲特效是一种循环变化的动画效果,通常用在按钮、图标或其他元…

    2025年12月24日
    000
  • CSS动画教程:手把手教你实现流水流光特效

    CSS动画教程:手把手教你实现流水流光特效,需要具体代码示例 前言:CSS动画是网页设计中常用的技术,它使得网页更生动有趣,吸引用户的注意力。在这篇教程中,我们将会学习如何使用CSS实现一个流水流光的特效,并提供具体的代码示例。让我们开始吧! 第一步:HTML结构首先,我们需要创建一个基本的HTML…

    2025年12月24日
    000
  • word-wrap怎么自动换行?css强行自动换行教程

    本篇文章给大家带来的内容是关于word-wrap怎么自动换行?css强行自动换行教程,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 word-wrap介绍 word-wrap是设置对象内文字遇到对象顶边时是否采取换行排版布局。 1、语法 立即学习“前端免费学习笔记(深入)”; wo…

    2025年12月24日
    000
  • 用CSS实现网站变黑白色

    这篇文章主要介绍了关于用css实现网站变黑白色,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 以下为全站CSS代码.  html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); } 使用方法:这段…

    好文分享 2025年12月24日
    000
  • 详解css加载会造成阻塞吗_CSS教程_CSS_网页制作

    这次给大家带来详解css加载会造成阻塞吗,css加载造成阻塞的注意事项有哪些,下面就是实战案例,一起来看一下。 终于考试完了,今天突然想起来前阵子找实习的时候,今日头条面试官问我,js执行会阻塞DOM树的解析和渲染,那么css加载会阻塞DOM树的解析和渲染吗?所以,接下来我就来对css加载对DOM树…

    2025年12月24日 好文分享
    000
  • 关于CSS3中选择符的实例详解

    英文原文: www.456bereastreet.com/archive/200601/css_3_selectors_explained/中文翻译: www.dudo.org/article.asp?id=197注:本文写于2006年1月,当时IE7、IE8和Firefox3还未发行,文中所有说的…

    好文分享 2025年12月23日
    000
  • 阐述什么是CSS3?

    网页制作Webjx文章简介:CSS3不是新事物,更不是只是围绕border-radius属性实现的圆角。它正耐心的坐在那里,已经准备好了首次登场,呷着咖啡,等着浏览器来铺上红地毯。            CSS3不是新事物,更不是只是围绕border-radius属性实现              …

    好文分享 2025年12月23日
    000
  • CSS教程(三)伪类——动态链接

    伪类可以看做是一种特殊的类选择符,是能被支持css的浏览器自动所识别的特殊选择符。它的最大的用处就是可以对链接在不同状态下定义不同的样式效果。 1.  语法 伪类的语法是在原有的语法里加上一个伪类(pseudo-class):selector:pseudo-class {property: valu…

    2025年12月23日
    000
  • CSS教程(四)如何在网页中插入CSS

    前两章我们了解了css的语法,但要想在浏览器中显示出效果,就要让浏览器识别并调用。当浏览器读取样式表时,要依照文本格式来读,这里介绍四种在页面中插入样式表的方法:链入外部样式表、内部样式表、导入外表样式表和内嵌样式。   链入外部样式表 链入外部样式表是把样式表保存为一个样式表文件,然后在页面中?l…

    2025年12月23日
    000
  • CSS教程(五)如何使用DW4创建CSS

    1. css styles面板 通过前面几章的学习,相信大家对css有了一定的了解,这一章我们来讲解如何利用dreamweaver4来创建css。首先运行dreamweaver4,启动后,选择菜单下的windows->css styles(或按shitf+f11),系统弹出css styles…

    2025年12月23日
    000
  • CSS教程(六) DW4中CSS属性详解

    在dreamweaver4的css样式里包含了w3c规范定义的所有css1的属性,dreamweaver4把这些属性分为type(类型)、background(背景)、block(块)、box(盒子)、border(边框)、 list(列表)、positioning(定位)、extensions(扩…

    2025年12月23日
    000
  • CSS教程(七) 滤镜

    css提供了一些内置的多媒体滤镜特效,使用这种技术可以把可视化的滤镜和转换效果添加到一个标准的html元素上,例如图片、文本容器、以及其他一些对象。dreamweaver4提供了16种滤镜可供选择,如下图: 下面,我们就来看看在dreamweaver4里如何方便的使用这些css滤镜。 建立一个自定义…

    2025年12月23日
    000
  • CSS教程(八) 简单介绍CSS结合JS的运用

    八、 简单介绍css结合js的运用(针对事件动作) 利用css配合javascript的可以做很多更酷的动态页面效果,在本教程的最后给大家简单介绍一下css配合js的应用。首先,我们要搞清楚事件和动作的概念。在客户端脚本中,javascript 通过对事件进行响应来获得与用户的交互。例如,当用户单击…

    2025年12月23日
    000
  • CSS教程(一)初识CSS

    css教程(一)认识css     dreamweaver4是现今最好的网站编辑工具之一,用它来给制作网页的css样式表会更简单、更方便。本教程教你如何利用dreamweaver4在页面中加入css,你不用死记硬背的记代码标记,也不用去看很厚的css手册,你就可以轻松自如的在网页中运用css。不过首…

    2025年12月23日
    000
  • 记事本写完代码后怎么运行html_记事本代码运行html步骤【教程】

    将记事本编写的HTML代码保存为.html格式文件,通过“另存为”选择“所有文件”并添加.html扩展名;2. 双击或右键用浏览器打开该文件即可查看网页效果;3. 也可直接将文件拖拽至浏览器窗口快速预览;4. 熟悉命令行者可用cmd进入文件目录后输入start 文件名.html运行。 如果您已经使用…

    2025年12月23日
    000
  • 记事本的html代码怎么运行_记事本运html代码方法【教程】

    首先用记事本编写HTML代码,输入基础结构如标题和段落;接着在“另存为”时选择保存类型为“所有文件”,文件名设为myweb.html并采用UTF-8编码;然后双击保存的.html文件,浏览器将自动打开显示网页内容;若需修改,右键用记事本重新编辑并保存后刷新浏览器即可。 用记事本写好的HTML代码想要…

    2025年12月23日
    000
  • studio怎么运行html文件_studio运行html文件方法【教程】

    Android Studio 非运行 HTML 理想工具,可通过安装 HTML Preview 插件实现预览;2. 最简单方式是右键文件在资源管理器中打开并用浏览器直接运行;3. 对于需 HTTP 服务的功能,推荐使用 Node.js 搭建本地服务器,通过 npx http-server 启动并在 …

    2025年12月23日
    000
  • html界面要怎么创建并运行_创建并运行html界面步骤【教程】

    首先创建HTML文件并用浏览器打开,具体步骤为:1. 用记事本编写HTML代码并保存为index.html;2. 双击文件或右键选择浏览器打开;3. 推荐使用VS Code等编辑器提升开发体验;4. 对于复杂项目需通过Node.js运行http-server在本地服务器预览。 如果您希望在本地计算机…

    2025年12月23日
    000
  • 新建文本文档怎么运行html_新建文本文档运行html步骤【教程】

    1、将文本文档另存为.html格式,选择“所有文件”类型避免保存为.txt;2、双击HTML文件或右键用浏览器打开可查看效果;3、修改代码后保存并刷新浏览器即可实时预览更新内容。 如果您使用文本文档编写了HTML代码,想要在浏览器中查看效果,需要将文本文件转换为可运行的HTML文件。以下是实现这一目…

    2025年12月23日
    000
  • 记事本写html代码怎么运行_记事本写html代码运行法【教程】

    答案:用记事本写HTML只需编写代码、保存为.html文件并用浏览器打开。1. 在记事本输入HTML代码;2. 另存为hello.html,类型选“所有文件”,编码为UTF-8;3. 双击文件用浏览器运行;4. 修改时右键编辑并刷新页面。关键点是正确设置文件后缀与保存类型。 用记事本写HTML代码并…

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信