请选择 进入手机版 | 继续访问电脑版

稻壳CMS(前深喉咙CMS)企业网站建设系统

 找回密码
 立即注册
搜索
查看: 9736|回复: 6

4.2中英双语的简单实现

[复制链接]
发表于 2012-9-22 09:44:48 | 显示全部楼层 |阅读模式
如果您感觉模板不错,请点击右侧的“分享”按钮,分享给您的朋友或者分享到自己的空间收藏
演示:http://lvqing.807.sql.sh.cn
谢谢雅风的模板先
基本思路:
1、拷贝一份模板文件,然后将所有 css、php文件前面加上 en_ 前缀,然后上传到当前模板目录下,呵呵,批量修改文件名的工具应该不少吧
2、在 config/dt-config.php 里面加上
define('Lang_En','en');
与后台有关的修改:
3、修改 admini/models/menu.php 中的函数
        function menu_power_list_SELECT($name,$select=null)
        {
                $part_common_path=ABSPATH.SKINROOT.'/'.STYLENAME.'/common/';
                $temp_arr=rec_listFiles($part_common_path);
                echo '<select name="'.$name.'">';
                echo '<option value="common.php">默认样式</option>';
                if(defined("Lang_En")){
                        //echo '<option value="'.Lang_En.'_common.php">默认英文样式</option>';
                        if( is_file(ABSPATH.SKINROOT.'/'.STYLENAME.'/'.Lang_En.'_common.php') ){
                                $selected=($select==Lang_En.'_common.php')?'selected="selected"':'';
                                echo '<option value="'.Lang_En.'_common.php" '.$selected.'>默认英文样式</option>';
                        }
                }
                foreach ($temp_arr as $v)
                {
                        $selected=($select==$v)?'selected="selected"':'';
                ?>
                <option value="<?php echo $v ?>" <?php echo $selected ?> ><?php echo $v ?></option>
                <?php
                }
                echo '</select>';
        }
呵呵,大家不要奇怪改了那么多,除了跟这个双语相关的改动,还有就是 硬编码 "/skins/" 的替换,完善下这个函数
这样修改后,后台频道和栏目的样式选择就会出现双倍的选项,千万记住,如果选了带 en_ 前缀的,就是英文版!

好了,现在需要让前台干活
4、修改根下的 index.php
在 require_once(ABSPATH.'/inc/function.php'); 后面加
if(empty($_SESSION[TB_PREFIX.'dtLanguage']))
{
        $_SESSION[TB_PREFIX.'dtLanguage']="";
}
这些语句

$loadSkinIndex=$part_path.'index.php';
$loadSkinCommon=$part_path.'common.php';
替换成
if($_SESSION[TB_PREFIX.'dtLanguage'] != ""){
        $loadSkinIndex=$part_path.$_SESSION[TB_PREFIX.'dtLanguage'].'_index.php';
        $loadSkinCommon=$part_path.$_SESSION[TB_PREFIX.'dtLanguage'].'_common.php';
}else{
        $loadSkinIndex=$part_path.'index.php';
        $loadSkinCommon=$part_path.'common.php';
}

修改 function sys_layout_part($style='')
function sys_layout_part($style='')
{
        global $request,$params,$tag,$path,$data;
        
        //如果本次升级影响了parts内sql的执行, 请手动注释destorydb函数体代码,切记不要删除
    //destorydb();
        if(!checkchannel($params['id'])){
                echo '<span style="color:RED"><strong>可能分类栏目或频道语系不对,请检查!</strong></span>';
        }else{
        
                if(!empty($style)) $style = '_'.$style;
                //$part_path=ABSPATH.'/'.SKINROOT.'/'.STYLENAME.'/parts/'.$params['model'].'_'.$params['action'].$style.'.php';
                if($_SESSION[TB_PREFIX.'dtLanguage'] != ""){
                        $part_path=ABSPATH.'/'.SKINROOT.'/'.STYLENAME.'/parts/';
                        $part_path=$part_path.$_SESSION[TB_PREFIX.'dtLanguage']."_".$params['model'].'_'.$params['action'].$style.'.php';
                }else{
                        $part_path=ABSPATH.'/'.SKINROOT.'/'.STYLENAME.'/parts/'.$params['model'].'_'.$params['action'].$style.'.php';
                }
                $content_part_path=ABSPATH.'/content/'.$params['model'].'/parts_'.$params['action'].'.php';
                if(is_file($part_path)){
                        require_once($part_path);
                }elseif(is_file($content_part_path)){
                        require_once($content_part_path);
                }else{
                        echo $part_path."<br />";
                        echo $content_part_path."<br />";
                        echo '<span style="color:RED"><strong>您当前选择的信息所在的分类栏目或频道可能已经被删除或不存在,请检查一下,该信息所在的栏目情况以及栏目是否存在!</strong></span>';
                }
               
                // 如果本次升级影响了parts内sql的执行, 请手动注释如下代码recoverdb函数体代码,切记不要删除
                //recoverdb();
               
                isComments();
        }
}



回复

使用道具 举报

 楼主| 发表于 2012-9-22 09:46:09 | 显示全部楼层
最后增加函数
function checkchannel($id)
{
        global $db;
        if($id==0) return true;
        if($_SESSION[TB_PREFIX.'dtLanguage']){
                $strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
                $sql  = "SELECT * FROM ".TB_PREFIX;
                $sql .= "menu WHERE id=$id and ";
                $sql .= "LCASE(substring(related_common,1,CHARACTER_LENGTH('".$strl."')))=LCASE('".$strl;
                $sql .= "') ";
        }else{
                $strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
                $sql  = "SELECT * FROM ".TB_PREFIX;
                $sql .= "menu WHERE id=$id and ";
                $sql .= "INSTR(related_common,'_') = 0 ";
        }        
        if($db->get_row($sql)){
                return true;
        }else{
                return false;
        }
}
这里的修改主要是判断语系,加载不同的模板文件和提示语系错误,路由调整处理

5、修改 content/index/index.php
增加函数
function changeLanguage(){
        global $request;
        $_SESSION[TB_PREFIX.'dtLanguage']=$request['SITELANGUAGE'];
        if( $_SESSION[TB_PREFIX.'dtLanguage'] == 'cn' ){
                $_SESSION[TB_PREFIX.'dtLanguage'] = '';
        }
        redirect('./');
}
实现语系切换

6、修改  content/index/common_call_label.php
//$menuRoot=$db->get_results("SELECT * FROM ".TB_PREFIX."menu ORDER BY ordering ASC",ARRAY_A);
if($_SESSION[TB_PREFIX.'dtLanguage']){
        $strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
        $sql  = "SELECT * FROM ".TB_PREFIX;
        $sql .= "menu WHERE LCASE(substring(related_common,1,CHARACTER_LENGTH('".$strl."')))=LCASE('".$strl;
        $sql .= "')   ORDER BY ordering ASC";
}else{
        $sql  = "SELECT * FROM ".TB_PREFIX;
        $sql .= "menu WHERE INSTR(related_common,'_') = 0  ORDER BY ordering ASC";
}
$menuRoot=$db->get_results($sql,ARRAY_A);
实现全局 $menuRoot 的导航过滤

7、修改  content/common/common.php
function nav_main($str='<li>||</li>',$select_str='<li class="selected">||</li>',$_style='<span>||</span>')
{
        global $db,$params,$menu_arr;
        //$menu = $db->get_results("SELECT *,'0' hassub  FROM ".TB_PREFIX."menu WHERE deep = 0 and isHidden=0 order by ordering");
        if($_SESSION[TB_PREFIX.'dtLanguage']){
                $strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
                $sql  = "SELECT *,'0' hassub  FROM ".TB_PREFIX;
                $sql .= "menu WHERE deep = 0 and isHidden=0  and ";
                $sql .= "LCASE(substring(related_common,1,CHARACTER_LENGTH('".$strl."')))=LCASE('".$strl;
                $sql .= "')  order by ordering";
        }else{
                $strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
                $sql  = "SELECT *,'0' hassub  FROM ".TB_PREFIX;
                $sql .= "menu WHERE deep = 0 and isHidden=0  and ";
                $sql .= "INSTR(related_common,'_') = 0 order by ordering";
        }
        $menu = $db->get_results($sql);
        if(!empty($str))
        {
                $strarr= explode('||',$str);
                if(empty($select_str))$select_str=$str;
                $select_strarr = explode('||',$select_str);
                if(!empty($_style))$_stylearr=explode('||',$_style);
        }
        if($menu)
        {
                foreach ($menu as $o)
                {
                        menu_links($strarr,$select_strarr,$_stylearr,$params,$menu_arr,$o);        
                }
        }
        else
        echo 'No channel';
}
实现导航标签的过滤
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-22 09:47:07 | 显示全部楼层
8、修改 content/comment/index.php 中的模板文件调用
function view_comment()
{
        global $db;
        global $params;
        global $tag;        // 标签数组
        global $request;
        global $moduleTitle;
        $sql = "SELECT isComment FROM ".TB_PREFIX."menu WHERE id=".$params['id'];
        $isComment = $db->get_var($sql);
        if(($isComment == '1' && $params['action'] == 'view_comment') || ($isComment == '1' && $params['model'] == 'article'))
        {
                $moduleTitle =  getModuleTitle();
               
                $sql="SELECT a.*,b.nickname FROM ".TB_PREFIX."comment a left join  ".TB_PREFIX."user b on a.memberId=b.id WHERE a.channelId=".$params['id']." and a.recordId=".$params['args'];
               
                $username=isset($_SESSION[TB_PREFIX.'user']) ? $_SESSION[TB_PREFIX.'user'] : '';
                $userlevel=isset($_SESSION[TB_PREFIX.'admin_roleId']) ? $_SESSION[TB_PREFIX.'admin_roleId'] : '';
               
                if(COMMENTAUDITING)
                {
                        if(!empty($username) || $userlevel>=8 ){ }else{        $sql.=" and auditing=1 ";  }
                }
                $sb = new sqlbuilder('comment_mdt',$sql,'id desc',$db,6,true,'./','#commentPosition');
                if(!empty($sb->results)){
                        $tag['data.results']=$sb->results;
                        if($sb->totalPageNo()>1)
                        {
                                $tag['pager.cn']=$sb->get_pager_show();
                                $tag['pager.en']=$sb->get_en_pager_show();
                        }
                        $tag['data.other']['username']=$username;
                        $tag['data.other']['userlevel']=$userlevel;
                }
                $sb=null;
                //载入评论模块模版
                        
                //$part_path=ABSPATH.'/'.SKINROOT.'/'.STYLENAME.'/parts/comment_'.$params['action'].'.php';
                if($_SESSION[TB_PREFIX.'dtLanguage'] != ""){
                        $part_path=ABSPATH.'/'.SKINROOT.'/'.STYLENAME.'/parts/';
                        $part_path=$part_path.$_SESSION[TB_PREFIX.'dtLanguage'].'_comment_'.$params['action'].'.php';
                }else{
                        $part_path=ABSPATH.'/'.SKINROOT.'/'.STYLENAME.'/parts/comment_'.$params['action'].'.php';
                }
                $content_part_path=ABSPATH.'/content/comment/parts_'.$params['action'].'.php';
               
                if(is_file($part_path))
                require_once($part_path);
                else
                require_once($content_part_path);
        }else{
                echo 'Comment Forbidden ';
        }
        exit();
}
经过以上修改后,前台语系就能正常控制,切换时的链接写法
<a href="<?php echo $tag['path.root'];?>/?a=changeLanguage&SITELANGUAGE=cn">首页</a>
<a href="<?php echo $tag['path.root'];?>/?a=changeLanguage&SITELANGUAGE=en">Home</a>
此修改方法主要考虑尽可能不动系统原始的数据库结构,然后尽可能修改少

演示版本考虑了调用标签时的语系检查,修改量多些,这个不是必须,如果写模板时能细心些,
保证频道、栏目的调用正确,可以不改。
先要在  content/index/common_call_label.php 中增加语系判断函数
function checktag($id){
        global $db;
        if($id==0) return false;
        //$sql = "SELECT * FROM ".TB_PREFIX."menu WHERE id=$id and dtLanguage = '".$_SESSION[TB_PREFIX.'dtLanguage']."'";
        if($_SESSION[TB_PREFIX.'dtLanguage']){
                $strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
                $sql  = "SELECT * FROM ".TB_PREFIX;
                $sql .= "menu WHERE id=$id and ";
                $sql .= "LCASE(substring(related_common,1,CHARACTER_LENGTH('".$strl."')))=LCASE('".$strl;
                $sql .= "')  order by ordering";
        }else{
                $strl = $_SESSION[TB_PREFIX.'dtLanguage']."_";
                $sql  = "SELECT * FROM ".TB_PREFIX;
                $sql .= "menu WHERE id=$id and ";
                $sql .= "INSTR(related_common,'_') = 0 order by ordering";
        }
        if($db->get_row($sql)){
                return true;
        }else{
                return false;
        }
}
然后修改全部的标签函数,就是 content/index/ 目录下以模组名称命名的php文件。
article.php
calllist.php
download.php
guestbook.php
jobs.php
linkers.php
list.php
mapshow.php
picture.php
poll.php
product.php
rss.php
video.php
webmap.php
以 article.php 中的 function dt_article($channelId,$strcount=0) 为例
        if( checktag($channelId) ){
                $opts=array(
                        'hastag' => false,
                        'fun'=>'dt_article'
                );
                $o=shl_article(  $channelId, $opts );
                echo cnSubstr($o->content,0,$strcount);
        }else{
                echo "dt_article(".$channelId.",".$strcount.")&nbsp;&nbsp;语系错误";
        }
具体效果,演示网站可以看到。
有任何批评和建议,欢迎提出或者交流,qq 673055613
回复 支持 反对

使用道具 举报

发表于 2012-9-24 18:35:27 | 显示全部楼层
似乎有点复杂哦。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.2© 2001-2013 Comsenz Inc. Designed by www.daokecms.com

GMT+8, 2020-8-15 21:35 , Processed in 0.030443 second(s), 18 queries .