OpenCart 3自定义支付扩展无法显示及自动启用问题求助
Let's break down your problem and get this sorted step by step—first we'll fix why your extension won't enable, then set it to auto-enable right after installation.
1. What's Wrong With Your Current Code
That private $info_status = true; line isn't doing anything useful here. It's just a standalone variable that doesn't connect to OpenCart's config system or database, so it won't affect whether your extension is enabled. To set a default enabled state, we need to hook into OpenCart's extension installation process, not just define a variable in the controller.
2. Add Auto-Enable Functionality via the Install Method
OpenCart runs an install() method automatically when you install an extension through the admin panel. We'll add this method to your controller to set the extension's status to enabled by default.
Update your admin/controller/extension/mycustom.php file with this code:
<?php class ControllerExtensionMycustom extends Controller { // Keep your existing index, validate, and other methods here // Add this install method to auto-enable the extension public function install() { // Save the enabled status (1 = enabled) to OpenCart's settings $this->model_setting_setting->editSetting('gtpayment', [ 'gtpayment_status' => 1 ]); } // Optional: Add an uninstall method to clean up settings when removing the extension public function uninstall() { $this->model_setting_setting->deleteSetting('gtpayment'); } // Your existing form handling logic (make sure this is inside the class) if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { $this->model_setting_setting->editSetting('gtpayment', $this->request->post); $this->session->data['success'] = $this->language->get('text_success'); $this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true)); } // Your existing status value logic if (isset($this->request->post['gtpayment_status'])) { $data['gtpayment_status'] = $this->request->post['gtpayment_status']; } else { $data['gtpayment_status'] = $this->config->get('gtpayment_status'); } }
3. Fix Manual Enable Functionality
If you still can't toggle the extension on manually, check these quick things:
- Validate method errors: Your
validate()method might be silently failing. Add a debug line likevar_dump($this->error);inside the method to see if there are hidden issues blocking form submission. - Template input: Make sure your extension's template file (e.g.,
admin/view/template/extension/mycustom.tpl) has the status checkbox correctly rendered:<div class="form-group"> <label class="col-sm-2 control-label" for="input-gtpayment-status"><?php echo $entry_status; ?></label> <div class="col-sm-10"> <input type="checkbox" name="gtpayment_status" value="1" <?php if ($gtpayment_status) echo 'checked'; ?> /> </div> </div> - Language keys: Confirm your language file has the
text_successkey defined—if it's missing, you won't get a success message when saving settings, which can make it seem like nothing's working.
4. How It All Works
- When you install the extension via the OpenCart admin, the
install()method runs and savesgtpayment_status = 1(enabled) to the database. - Your existing form logic will now pull this default value, and you can toggle it on/off manually through the extension's settings page without issues.
内容的提问来源于stack exchange,提问作者Kabiru Wahab

