有人用CI做过多语种网站吗?我遇到个问题
1. 我想做一个多语种网站,语言文件都能正常引入。我把语言文件中的变量直接放到视图php文件中的。比如这种格式的 <?=$movie?>2. 但是在用js+json生成二级分类的时候,遇到问题了。发现无法按照要求生成上面格式的html结果代码,代码如下:
3. 因为js在拼接的时候,一旦出现'<?', 标签就会被PHP解析
原始html代码
<select name="father" class="category"></select>
<select name="child" class="sub-category"></select>
<!--
如何在CI框架中,只用js的情况下,把json数据变成下面的代码?
var data = '{"movie":["cam","dvd"],"music":["lossless","mp3"]}';
-->
结果代码
<select name="father" class="category">
<option value="movie"><?=$movie?></option>
<option value="music"><?=$music?></option>
</select>
<select name="child" class="sub-category">
<option value="cam"><?=$cam?></option>
<option value="dvd"><?=$dvd?></option>
</select>
4. JS代码如下
<script type="text/javascript">
// 声明初始化函数
function initialize(data){
var father = ""; // 预先声明
var child = ""; //
var times = 0 ; // 初始化的时候,子类只显示json第一个对象的第一组数据,这个是记录each执行的次数
$.each(data,function(oneKey,oneVal){
times++;
// 父类菜单的拼接
father += ('<option value="'+oneKey+'">'+'<?=$'+oneKey+'?>'+'</option>');
if(times<=1){
$.each(oneVal,function(twoKey,twoVal){
// 初始化时子类菜单的拼接
child += ('<option value="'+twoVal+'">'+'<?=$'+twoVal+'?>'+'</option>');
});
}
});
$('select.category').append(father); // 最后完成父菜单节点插入
$('select.sub-category').append(child); // 最后完成子菜单节点插入
}
// 声明二级菜单json格式的数据
var data = '{"movie":["cam","dvd"],"music":["lossless","mp3"]}';
// 解析json数据
var temp = $.parseJSON(data);
// 调用初始化函数
initialize(temp);
</script>
世云哥 发表于 2014-12-9 11:32
JS也分服务器和客户端的吧?可以指定是在服务器端运行的。不过既然php了何必还要js服务器端?
不过这样 ...
1. 如果用PHP来输出option的话,我觉得比较麻烦,因为我现在做是一个二级联动菜单。用户选择的时候,就需要ajax请求php获取对应的子分类,不如用你说的第二种方法
2. 不同的json语言的话,我试了一下,因为我对json不精通,写出来的json格式有点繁琐,导致jquery解析的时候用到3个$.each来解析,麻烦您帮看一下,js代码如下:
// 声明初始化函数
function initialize(data){
var father = ""; // 预先声明
var child = ""; //
var times = 0 ; // 初始化的时候,子类只显示json第一个对象的第一组数据,这个是记录each执行的次数
$.each(data,function(oneKey,oneVal){
times++;
// 父类菜单的一次拼接
father += ('<option value="'+oneKey+'">');
$.each(oneVal,function(twoKey,twoVal){
// 父类菜单的二次拼接
father += (twoKey+"</option>");
if(times<=1){
$.each(twoVal,function(threeKey,threeVal){
// 子类菜单的拼接
child += ('<option value="'+threeKey+'">'+threeVal+'</option>');
});
}
})
});
$('select.category').append(father); // 最后完成父菜单节点插入
$('select.sub-category').append(child); // 最后完成子菜单节点插入
}
// 声明二级菜单json格式的数据
var data = '{ "movie":{ "<?=$movie?>": { "cam":"<?=$cam?>","dvd":"<?=$dvd?>","hdtv":"<?=$hdtv?>","seven_p":"<?=$seven_p?>","eight_p":"<?=$eight_p?>"}} ,"music": {"<?=$music?>":{"lossless":"<?=$lossless?>" , "mp3":"<?=$mp3?>"}}}';
// 解析json数据
var temp = $.parseJSON(data);
// 调用初始化函数
initialize(temp);
JSON数据为:
// 声明二级菜单json格式的数据
var data = '{ "movie":{ "<?=$movie?>": { "cam":"<?=$cam?>","dvd":"<?=$dvd?>","hdtv":"<?=$hdtv?>","seven_p":"<?=$seven_p?>","eight_p":"<?=$eight_p?>"}} ,"music": {"<?=$music?>":{"lossless":"<?=$lossless?>" , "mp3":"<?=$mp3?>"}}}';
3. 语言变量我是直接存到php文件中的,也就是手册里面的方法,把语言文件存到/application/language/chinese/language.php。定义session后就可以指定全站的界面语言。因为我对js不了解,所以没敢用js存到array的方法
综上所说,麻烦你能看一看,第二项里面如何简化js代码及json数据格式
json我也不太懂。。帮不了你什么。。看看这样写行不
{ "En":
{
"movie":
{....
} ,
"music":
{....
}
},
"Zh":
{
"movie":
{ ...
} ,
"music":
{...
}
},
}
c710999999 发表于 2014-12-9 10:00
这种php+js的代码是不行的,一个服务器语言 一个客户端语言 别混一起使用
你用ajax异步读数据吧。
JS也分服务器和客户端的吧?可以指定是在服务器端运行的。不过既然php了何必还要js服务器端?
不过这样的应用可以有多种类似的方法呢。
1. 如果你只是几个常量的不同语言版本,你可以load一个配置文件,直接php输出option,不用js来append。
2.产生不同语言的json,这个就简单了。
3.你把语音变量用js存到一个array。或者object。然后js不要再输出php语句了,直接用判断语句输出相应的语言字符。如c710999999 所说,js在客户端解释后没有环境来解释php
本帖最后由 世云哥 于 2014-12-8 17:14 编辑
按语言产生不同的json源不就行了?,你把字符串用变量替换,带入。
prechar=”<?=$“; endchar=“?>”; father += ('<option value="'+oneKey+'">'+'<?=$'+oneKey+'?>'+'</option>');
你这几个地方很奇怪, PHP是服务端语言,js是客户端语言。
世云哥 发表于 2014-12-8 17:31
prechar=””;
这段代码是在JS中使用吗?如果是js中的话,我试过了,不行 c710999999 发表于 2014-12-8 17:55
father += (''+''+'');
你这几个地方很奇怪, PHP是服务端语言,js是客户端语言。
这样做的原因是要生成结果代码 NingerJohn 发表于 2014-12-9 08:09
这样做的原因是要生成结果代码
<?=$'+oneKey+'?>
这种php+js的代码是不行的,一个服务器语言 一个客户端语言 别混一起使用
你用ajax异步读数据吧。
NingerJohn 发表于 2014-12-9 13:48
1. 如果用PHP来输出option的话,我觉得比较麻烦,因为我现在做是一个二级联动菜单。用户选择的时候,就需 ...
首先,看起来你 json是固定内容的?只有语言的差别,Chinese和Eng?没有其他的内容,比如数据名称,连接等
把它放到两个个文件里,然后用jquery getjson()来加载这个文件。根据不同的语言,加载不同的文件。
具体实现和测试请参考
http://www.w3school.com.cn/jquery/jquery_ref_ajax.asp
jquery有很大现成的库,你直接使用就可以了。
页:
[1]
2