{"id":2440,"date":"2024-07-04T11:13:27","date_gmt":"2024-07-04T11:13:27","guid":{"rendered":"https:\/\/www.rcvtechnologies.com\/blog\/?p=2440"},"modified":"2024-09-13T12:09:32","modified_gmt":"2024-09-13T12:09:32","slug":"how-to-create-a-module-in-opencart-4","status":"publish","type":"post","link":"https:\/\/www.rcvtechnologies.com\/blog\/how-to-create-a-module-in-opencart-4\/","title":{"rendered":"How to create a module in Opencart 4"},"content":{"rendered":"<h2><b>Module in Opencart 4<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">We have our <a href=\"https:\/\/www.rcvtechnologies.com\/blog\/opencart-4-extension-module-development-guide-for-beginners\/\">folder structure<\/a> in place. Let\u2019s start creating an extension.<\/span><\/p>\n<p>First we have to crate language file.<\/p>\n<h3><b>Language<\/b><\/h3>\n<p><strong>admin\/language\/en-gb\/module\/itmindslab_module.php<\/strong><\/p>\n<p><span style=\"font-weight: 400;\">In this file, we assign the language of the indexes of an array. The array\u2019s name is $_, the language that will be necessary for creating the module.<\/span><\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#000;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<pre class=\"dm-pre-admin-side\">&lt;?php\r\n\r\n$_['heading_title']     = 'Itmindslab Module';\r\n$_['entry_status']      = 'Status';\r\n\r\n$_['text_extension']    = 'Extension';\r\n$_['text_edit']         = 'Edit Module';\r\n$_['text_success']\t\t= 'Success: You have modified module!';\r\n\r\n$_['help_status']\t\t= 'Enable or disable the module';\r\n\r\n$_['error_permission']\t= 'Warning: You do not have permission to modify this module!';<\/pre>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<h3><b>Controller<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">After creating the language, we will head towards the controller. So, we will create a file named itmindslab_module.php in admin-&gt;controller-&gt;module folder.<\/span><\/p>\n<p><strong>admin\/controller\/module\/itmindslab_module.php<\/strong><\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#000;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<pre class=\"dm-pre-admin-side\">&lt;?php\r\n\r\nnamespace Opencart\\Admin\\Controller\\Extension\\Itmindslabmodule\\Module;\r\n\r\nclass Itmindslabmodule extends \\Opencart\\System\\Engine\\Controller{\r\n    public function index(){\r\n        $this-&gt;load-&gt;language('extension\/itmindslab_module\/module\/itmindslab_module');\r\n\r\n        $this-&gt;document-&gt;setTitle($this-&gt;language-&gt;get('heading_title'));\r\n\r\n        $data['breadcrumbs'] = [];\r\n\r\n        $data['breadcrumbs'][] =[\r\n            'text' =&gt; $this-&gt;language-&gt;get('text_home'),\r\n            'href' =&gt; $this-&gt;url-&gt;link('common\/dashbord', 'user_token=' .$this-&gt;session-&gt;data['user_token'])\r\n        ];\r\n\r\n        $data['breadcrumbs'][] = [\r\n            'text' =&gt;$this-&gt;language-&gt;get('text_extension'),\r\n            'href' =&gt; $this-&gt;url-&gt;link('marketplace\/extension', 'user_token=' .$this-&gt;session-&gt;data['user_token'] . '&amp;type=module')\r\n        ];\r\n\r\n        $data['breadcrumbs'][] = [\r\n            'text' =&gt; $this-&gt;language-&gt;get('heading_title'),\r\n            'href' =&gt; $this-&gt;url-&gt;link('extension\/itmindslab_module\/module\/itmindslab_module', 'user_token=' .$this-&gt;session-&gt;data['user_token'])\r\n        ];\r\n\r\n        $data['save'] = $this-&gt;url-&gt;link('extension\/itmindslab_module\/module\/itmindslab_module.save', 'user_token=' . $this-&gt;session-&gt;data['user_token']);\r\n\r\n        $data['back'] = $this-&gt;url-&gt;link('marketplace\/extension', 'user_token=' . $this-&gt;session-&gt;data['user_token'] . '&amp;type=module');\r\n\r\n        $data['module_itmindslab_module_status'] = $this-&gt;config-&gt;get('module_itmindslab_module_status');\r\n\r\n        $data['header'] = $this-&gt;load-&gt;controller('common\/header');\r\n        $data['column_left'] = $this-&gt;load-&gt;controller('common\/column_left');\r\n        $data['footer'] = $this-&gt;load-&gt;view('common\/footer');\r\n\r\n        $this-&gt;response-&gt;setOutput($this-&gt;load-&gt;view('extension\/itmindslab_module\/module\/itmindslab_module', $data));\r\n    }\r\n\r\n    public function save(){\r\n        $this-&gt;load-&gt;language('extension\/itmindslab_module\/module\/itmindslab_module');\r\n\r\n        $json = [];\r\n\r\n        if(!$this-&gt;user-&gt;hasPermission('modify','extension\/itmindslab_module\/module\/itmindslab_module')){\r\n            $json['error'] = $this-&gt;language-&gt;get('error_permission');\r\n        }\r\n\r\n        if(!$json){\r\n            $this-&gt;load-&gt;model('setting\/setting');\r\n            $this-&gt;model_setting_setting-&gt;editSetting('module_itmindslab_module', $this-&gt;request-&gt;post);\r\n            $json['success'] = $this-&gt;language-&gt;get('text_success');\r\n        }\r\n        $this-&gt;response-&gt;addHEader('content-Type: application\/json');\r\n        $this-&gt;response-&gt;setOutput(json_encode($json));\r\n    }\r\n}<\/pre>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<h3><b>View<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">After the controller, we have to go for the view file. So, we will create a file named itmindslab_module.twig in admin-&gt;view-&gt;template-&gt;module folder.<\/span><\/p>\n<p><strong>admin\/view\/template\/module\/itmindslab_module.twig<\/strong><\/p>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#000;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<pre class=\"dm-pre-admin-side\">{{ header }}{{ column_left }}\r\n&lt;div id=\"content\"&gt;\r\n    &lt;div class=\"page-header\"&gt;\r\n        &lt;div class=\"container-fluid\"&gt;\r\n            &lt;div class=\"float-end\"&gt;\r\n                &lt;button type=\"submit\" form=\"form-module\" data-bs-toggle=\"tooltip\" title=\"{{ button_save }}\" class=\"btn btn-primary\"&gt;&lt;i class=\"fa-solid fa-save\"&gt;&lt;\/i&gt;&lt;\/button&gt;\r\n                &lt;a href=\"{{ back }}\" data-bs-toggle=\"tooltip\" title=\"{{ button_back }}\" class=\"btn btn-light\"&gt;&lt;i class=\"fa-solid fa-reply\"&gt;&lt;\/i&gt;&lt;\/a&gt;&lt;\/div&gt;\r\n                &lt;h1&gt;{{ heading_title }}&lt;\/h1&gt;\r\n                &lt;ol class=\"breadcrumb\"&gt;\r\n                    {% for breadcrumb in breadcrumbs %}\r\n\t\t\t            &lt;li class=\"breadcrumb-item\"&gt;\r\n                            &lt;a href=\"{{ breadcrumb.href }}\"&gt;{{ breadcrumb.text }}&lt;\/a&gt;\r\n                        &lt;\/li&gt;\r\n\t\t            {% endfor %}\r\n                &lt;\/ol&gt;\r\n            &lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n    &lt;div class=\"container-fluid\"&gt;\r\n        &lt;div class=\"card\"&gt;\r\n            &lt;div class=\"card-header\"&gt;&lt;i class=\"fa-solid fa-pencil\"&gt;&lt;\/i&gt; {{ text_edit }}\r\n            &lt;\/div&gt;\r\n            &lt;div class=\"card-body\"&gt;\r\n                &lt;form id=\"form-module\" action=\"{{ save }}\" method=\"post\" data-oc-toggle=\"ajax\"&gt;\r\n                    &lt;div class=\"row mb-3\"&gt;\r\n                        &lt;label class=\"col-sm-2 col-form-label\"&gt;{{ entry_status }}&lt;\/label&gt;\r\n                        &lt;div class=\"col-sm-10\"&gt;\r\n                            &lt;div class=\"form-check form-switch form-switch-lg\"&gt;\r\n                                &lt;input type=\"hidden\" name=\"module_itmindslab_module_status\" value=\"0\"\/&gt;\r\n                                &lt;input type=\"checkbox\" name=\"module_itmindslab_module_status\" value=\"1\" id=\"input-status\" class=\"form-check-input\"{% if module_itmindslab_module_status %} checked{% endif %}\/&gt;\r\n                            &lt;\/div&gt;\r\n                        &lt;\/div&gt;\r\n                    &lt;\/div&gt;\r\n                &lt;\/form&gt;\r\n            &lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n    &lt;\/div&gt;\r\n&lt;\/div&gt;\r\n{{ footer }}<\/pre>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<p><span style=\"font-weight: 400;\">Once you have created the extension, you will need to include some information within the module\u2019s <strong>\u201cinstall.json\u201d<\/strong> file. This file supports the following keys: name, code, version, author, and link.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>Inastall.json<\/strong> file will create inside the module folder.<\/span><\/p>\n<h3><b>Install.json<\/b><\/h3>\n<div class=\"dm-code-snippet dark default  dm-normal-version\" style=\"background-color:#000;\" snippet-height=\"\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Copy Code<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"no-line-numbers\"><code id=\"dm-code-raw\" class=\"no-wrap language-php\"><\/p>\n<pre class=\"dm-pre-admin-side\">{\r\n    \"name\": \"Itmindslab Module\",\r\n    \"code\": \"itmindslab_module\",\r\n    \"version\": \"1.0\",\r\n    \"author\": \"itmindslab\",\r\n    \"link\":\"https:\/\/www.itmindslab.com\/\"\r\n}<\/pre>\n<p><\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n<p><span style=\"font-weight: 400;\">Once install.json is inside the directory, you can zip it and name it that ends with .ocmod.zip, then upload it from the Opencart extension installer.<\/span><\/p>\n<h3>Steps to Install and Configure The Module<\/h3>\n<h4><strong>Upload &amp; Install Zip<\/strong><\/h4>\n<p>Go to Opencart&#8217;s Admin panel -&gt; Extension -&gt; Installer.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-2458\" src=\"https:\/\/www.rcvtechnologies.com\/blog\/wp-content\/uploads\/2024\/05\/install.png\" alt=\"\" width=\"100%\" \/><\/p>\n<h3><strong>Configure<\/strong><\/h3>\n<p>1:- Admin panel -&gt; Extensions -&gt; Extensions -&gt; Modules.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-2456\" src=\"https:\/\/www.rcvtechnologies.com\/blog\/wp-content\/uploads\/2024\/05\/extension.png\" alt=\"\" width=\"100%\" \/><\/p>\n<h2><\/h2>\n<p>2:- Install and edit the module.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-2455\" src=\"https:\/\/www.rcvtechnologies.com\/blog\/wp-content\/uploads\/2024\/05\/exte.png\" alt=\"\" width=\"100%\" \/><\/p>\n<h2><\/h2>\n<p>3:- Enable the status of the module.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-2457\" src=\"https:\/\/www.rcvtechnologies.com\/blog\/wp-content\/uploads\/2024\/05\/extlast.png\" alt=\"\" width=\"100%\" \/><\/p>\n<p><span style=\"font-weight: 400;\">So, here we complete the module installation and configuration part.<\/span><\/p>\n<h3><strong>Now Allow Permissions<\/strong><\/h3>\n<p>1:- Admin panel -&gt; System -&gt; Users -&gt; User Groups.<\/p>\n<p>Select user group for allow permissions<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-2499 size-full\" src=\"https:\/\/www.rcvtechnologies.com\/blog\/wp-content\/uploads\/2024\/07\/screenshot-localhost-2024.07.png\" alt=\"\" width=\"1680\" height=\"889\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>2:- Select check box to allow permissions and save.<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-2498 size-full\" src=\"https:\/\/www.rcvtechnologies.com\/blog\/wp-content\/uploads\/2024\/07\/screenshot-localhost-2024.07-1.png\" alt=\"\" width=\"1680\" height=\"889\" \/><\/p>\n<p><span style=\"font-weight: 400;\">This is all about admin side module Code, its installation, configuration and permissions. I hope you learn something from this blog.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Keep following our blog, to know more about <a href=\"https:\/\/www.opencart.com\/blog\/opencart-4-0-is-officially-released-here-s-what-s-new\" target=\"_blank\" rel=\"nofollow noopener\"><strong>Opencart Version 4<\/strong><\/a>.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Module in Opencart 4 We have our folder structure in place. Let\u2019s start creating an extension. First we have to crate language file. Language admin\/language\/en-gb\/module\/itmindslab_module.php In this file, we assign the language of the indexes of an array. The array\u2019s name is $_, the language that will be necessary for creating the module. Controller After [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":3491,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[136],"tags":[138,140,139],"class_list":["post-2440","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-opencart","tag-opencart-4","tag-php","tag-software-development"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.rcvtechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/2440","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rcvtechnologies.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rcvtechnologies.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rcvtechnologies.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rcvtechnologies.com\/blog\/wp-json\/wp\/v2\/comments?post=2440"}],"version-history":[{"count":43,"href":"https:\/\/www.rcvtechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/2440\/revisions"}],"predecessor-version":[{"id":3583,"href":"https:\/\/www.rcvtechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/2440\/revisions\/3583"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.rcvtechnologies.com\/blog\/wp-json\/wp\/v2\/media\/3491"}],"wp:attachment":[{"href":"https:\/\/www.rcvtechnologies.com\/blog\/wp-json\/wp\/v2\/media?parent=2440"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rcvtechnologies.com\/blog\/wp-json\/wp\/v2\/categories?post=2440"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rcvtechnologies.com\/blog\/wp-json\/wp\/v2\/tags?post=2440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}