prestashop模块的时候,后台设置有可能需要用到多语言支持功能(不是翻译,而是根据当前浏览者的语言状态来切换),
就像我们在增加prestashop产品名时,输入框后面会有一个切换语言的功能。非常简单:
1、在使用helperForm时,加一个'lang'=>true进去,like this:
PHP
$fields_form = array(
'form' => array(
'legend' => array(
'title' => $this->l('运费到付设置') . ',技术支持<a target=blank href=tencent://message/?uin=43412512&Site=售后支持&Menu=yes><img border="0" SRC=http://wpa.qq.com/pa?p=1:43412512:1 alt="点击这里给我发消息"></a>'
),
'input' => array(
array(
'type' => 'textarea',
'label' => $this->l('申明信息,支持富文本'),
'name' => 'declare',
'cols' => '20',
'rows' => 50,
'autoload_rte' => true,
'lang' => true
)
),
'submit' => array(
'title' => $this->l('保存'),
'class' => 'button'
)
),
);
注意到上面的textarea中有一行'lang'=>true了吗?
接着在赋值时要加两个值:
PHP
$helper->tpl_vars = array(
'fields_value' => $this->getConfigFieldsValues(),
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id
);
请注意languages和id_language的赋值。
接下来要注意的是getContent()方法中的取值及写入值的方法:
PHP
public function getContent()
{
if (Tools::isSubmit('submit' . $this->name)) {
$languages = Language::getLanguages(false);
$vaules = array();
foreach ($languages as $lang) {
$vaules['declare'][$lang['id_lang']] = Tools::getValue('declare_' . $lang['id_lang']);
Configuration::updateValue('FREIGHT_COLLECT_DECLARE', $vaules['declare'], true);
}
}
return $this->displayForm();
}
请注意Tools:getValue('')这一句,结合使用helperform那一段代码,我给textarea的name='declare',为什么在getVaule时变成了'declare_'.$lang['id_lang'],只要你看生成后的输入框源码就知道了。
最后要注意的是从数据库中取值时要注意的:
PHP
public function getConfigFieldsValues()
{
$languages = Language::getLanguages(false);
$fields = array();
foreach ($languages as $lang) {
$fields['declare'][$lang['id_lang']] = Configuration::get('FREIGHT_COLLECT_DECLARE', $lang['id_lang']);
}
return $fields;
}
因为我是把信息写入到ps_configuration中,所以我是用Configuration::get()来取值的。
prestashop基本方法就是这样了,其它的多语言支持也差不多。
(责任编辑:好模板) |