我的代码中存在问题。在我的设置中,我创建了一个用于语言选择的单页。我将一些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'));
}
}
你能帮帮我吗?
答案 0 :(得分:0)
你应该使用 的print_r($这 - &GT;请求 - &GT;交); 死;
然后你会得到一些发布数据。
因为您将名称定义为&#34; en-gb&#34;,&#34; jap&#34;和&#34; zh-hk&#34;。所以请使用上面的代码,然后就可以得到解决方案了。
答案 1 :(得分:0)
您没有发布任何数据 - 您只是显示一个按钮。使用更像
的东西<input type="submit" value="english" name="lang"/>
<input type="submit" value="japanese" name="lang"/>
等。然后看看
$_POST['lang']
看看它是英文,日文还是其他什么。
答案 2 :(得分:0)
您可以在 /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');
这在 opencart 2 中对我有用