开机自检请求在使用Opencart的控制器中无法识别



我的代码有问题。在我的设置中,我创建了一个用于语言选择的页面。我在语言模板和控制器上复制了一些 opencart 的代码。但我的问题是在传递我的表单后,动作控制器没有从我的表单中获取任何 POST 数据。

<form action="{{ action }}" method="POST" enctype="multipart/form-data" id="form-language">
<div class="col-lg-4">
<div class="border_index_in">
<div class="holder">
<h3>ENGLISH</h3>
<button class="language-select btn btn-green" type="button" name="en-gb">Choose</button>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="border_index_in">
<div class="holder">
<h3>日本語</h3>
<button class="language-select btn btn-green" type="button" name="jap">選択</button>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="border_index_in">
<div class="holder">
<h3>中文</h3>
<button class="language-select btn btn-green" type="button" name="zh-hk">选择</button>
</div>
</div>
</div>
</form>

.JS:

// Language
$('#form-language .language-select').on('click', function(e) {
e.preventDefault();
$('#form-language input[name='code']').val($(this).attr('name'));
$('#form-language').submit();
});

用于显示我的语言选择页的控制器

public function language_switch() {
$this->load->model('setting/extension');
$this->document->setTitle($this->config->get('config_meta_title'));
$this->document->setDescription($this->config->get('config_meta_description'));
$this->document->setKeywords($this->config->get('config_meta_keyword'));
if (isset($this->request->get['route'])) {
$this->document->addLink($this->config->get('config_url'), 'canonical');
}
$data['action'] = $this->url->link('common/language/language');
$data['code'] = $this->session->data['language'];
$styles_array = array(
'catalog/view/theme/onemidorie/stylesheet/style.css'
);
$scripts_array = array(
);
foreach($styles_array as $st) {
$this->document->addStyle($st);
}
foreach($scripts_array as $sc) {
$this->document->addScript($sc);
}
$data['styles'] = $this->document->getStyles();
$data['scripts'] = $this->document->getScripts();
$data['footer'] = $this->load->controller('common/footer');
$data['header'] = $this->load->controller('common/header');
$this->response->setOutput($this->load->view('common/language_selection', $data));
}

应接受我的表单中的 POST 数据的控制器:

public function language() {
print_r($this->request->post['code']); //Notice: Undefined index: code 
die;
if (isset($this->request->post['code'])) {
$this->session->data['language'] = $this->request->post['code'];
}
if (isset($this->request->post['redirect'])) {
$this->response->redirect($this->request->post['redirect']);
} else {
$this->response->redirect($this->url->link('common/home'));
}
}

你能帮我这个吗?

你应该使用 print_r($this->请求->帖子(; 死;

然后你会得到一些帖子数据。

因为您定义的名称是"en-GB"、"jap"和"zh-hk"。因此,请使用上面的代码,然后您可以获得解决方案。

您没有发布任何数据 - 您只是显示一个按钮。 使用更像的东西

<input type="submit" value="english" name="lang"/>
<input type="submit" value="japanese" name="lang"/>

等等,然后看看

$_POST['lang'] 

看看是英语、日语还是其他什么。

您可以在/catalog/controller/startup/startup.php 中找到 opencart 如何设置语言:

// Overwrite the default language object
$language = new Language($code);
$language->load($code);
$this->registry->set('language', $language);

因此,在控制器中应该接受POST数据的内容,您应该在加载语言之前对此代码进行配音:

// $this->request->post['code'] = 'en-gb' or 'ru-ru' or whatever.
$language = new Language($this->request->post['code']);
$language->load($this->request->post['code']);
$this->registry->set('language', $language);
// now opencart use new language and you can use it too:
$this->load->language('common/header');
$text_home = $this->language->get('text_home');

这在开车 2 中对我有用

最新更新