шаблонизатор в 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 должен забрать его, код контроллера не должен быть изменен, как описано в Расширение Собственных Библиотек часть.