加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – codeigniter模板引擎,包括语言解析器

发布时间:2020-12-13 18:02:31 所属栏目:PHP教程 来源:网络整理
导读:我没有看到任何机制来引用视图中的一个将被模板分析器重写的language_key.现在,我的视图包含如下字符串: {register}{userid}{password} 我希望这些替换为语言定义中的匹配字符串,就好像我在视图中这样做了: ?=$this-lang-line('register')? ?=$this-lang-l
我没有看到任何机制来引用视图中的一个将被模板分析器重写的language_key.现在,我的视图包含如下字符串:
{register}
{userid}
{password}

我希望这些替换为语言定义中的匹配字符串,就好像我在视图中这样做了:

<?=$this->lang->line('register')?>
   <?=$this->lang->line('userid')?>
   <?=$this->lang->line('password')?>

但是,我没有看到任何自动支持此功能的机制.所以,我在控制器中这样做:

$data = array(
'userid' => $this->lang->line('userid'),'password' => $this->lang->line('password'),'register' => $this->lang->line('register')
);
$this->parser->parse('register',$data);

这对我来说似乎很愚蠢.我认为Template Parser类应该自动支持扩展任何已定义的language_keys.也许通过使用第二组分隔符:

[register]
[userid]
[password]

或者也许使用像下划线这样的指标:

{_register}
{_userid}
{_password}

或者也许是GetText风格:

_(register)
_(userid)
_(password)

有人可以告诉我,我正在寻找的功能是否实际可用,我只是错过了它?否则,我的建议看起来是否合理,或者是否有更好的替代想法?

不幸的是,CI内置的模板解析器类没有此功能.你可以在 sparks directory中环顾四周,有多个火花集成了许多模板引擎,如smarty或twig,可以通过调整来创建这样的东西.

此外,您可以尝试扩展CI_Parser类来为您执行此操作,如下所示:

<?php

class MY_Parser extends CI_Parser {

    const LANG_REPLACE_REGEXP = '!{_s*(?<key>[^}]+)}!';
    public $CI = null;

    public function parse($template,$data,$return = FALSE) {
        $this->CI = get_instance();
        $template = $this->CI->load->view($template,TRUE);
        $template = $this->replace_lang_keys($template);

        return $this->_parse($template,$return);
    }

    protected function replace_lang_keys($template) {
        return preg_replace_callback(self::LANG_REPLACE_REGEXP,array($this,'replace_lang_key'),$template);
    }

    protected function replace_lang_key($key) {
        return $this->CI->lang->line($key[1]);
    }
}

这将使用$this-> lang-> line(‘password’)替换{_ password}之类的部分.可以针对您喜欢的版本调整模式.

将其置于application / libraries / MY_Parser.php和CI之下应该选择它,不需要更改控制器代码,如Extending Native Libraries部分所述.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读