шаблонизатор в CodeIgniter в том числе парсер языка

Я не вижу никакого механизма для ссылки на 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); 

мне это кажется довольно глупым. Я подумайте, что класс анализатора шаблонов должен автоматически поддерживать расширение любого определенного language_keys. Возможно, используя второй набор разделителей:

[register]
[userid]
[password] 

или, возможно, с помощью определенного индикатора, такого как подчеркивание:

{_register}
{_userid}
{_password} 

или, возможно, стиль GetText:

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

может кто-нибудь сказать мне, если функциональность, которую я ищу, действительно доступна, и я просто пропустил ее? В противном случае мои предложения кажутся разумными или, возможно, есть даже лучшая альтернативная идея?

1 ответов


к сожалению, встроенный в класс синтаксического анализатора шаблонов CI не имеет этой функции. Вы можете посмотреть вокруг в каталог Спаркс, есть несколько искр, которые интегрируют многочисленные движки шаблонов, такие как 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, $data, TRUE);
        $template = $this->replace_lang_keys($template);

        return $this->_parse($template, $data, $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]);
    }
}

Это заменить {_ password} как части с тем, что $this->lang->line('password') будет. Картина может быть оптимальной для вашей любимой версии.

поставив под application/libraries/MY_Parser.php и CI должен забрать его, код контроллера не должен быть изменен, как описано в Расширение Собственных Библиотек часть.