XTemplate - читаем конфигурацию из шаблона
17/09/2010

Представим себе ситуацию: имеем блок, который выводит новости.

<!-- BEGIN:news -->
  <td class="div_1">
    <table>
      <tr>
        <td valign="top" class="image"><a href="{news.link}"><img src="{news.image}" alt="" /></a></td>
        <td valign="top">
          <span>{news.date}</span>
          <p>{news.title}</p>
          <img src="{config.path.img}icon_str.gif" alt="" /><a href="{news.link}">Подробнее</a>
        </td>
      </tr>
    </table>
  </td>
<!-- END:news -->


Блок используется на всех страницах сайта. Естественно, логично будет вынести парсинг этого блока куда-нибудь в бифор-каллбек контроллера, чтобы каждый раз не определять его вручную. А теперь представим, что злыдни-дизайнеры решили выводить на разных страницах разное количество новостей и при этом не говорят нам какое, а сами хотят определять это число.

К нашему великому счастью, класс XTemplate обладает волшебным методом reset:

/**
     * resets the parsed text
     *
     * @access public
     * @param string $bname Block to reset
     */
    public function reset ($bname) {

        $this->parsed_blocks[$bname] = '';
    }


Как его можно применить в нашей ситуации? Всё очень даже примитивно: создадим специальный конфигурационный блок, в котором версталы будут писать число - количество новостей, которое нужно выводить.

<!-- BEGIN:count -->3<!-- END:count -->


Ну а дальше в контроллере считываем это количество и сбрасываем этот блок:

$xtpl->parse('count');
$count = $xtpl->text('count');
$xtpl->reset('count');


Для удобства можем создать метод с произвольным названием, чтобы каждый раз не писать эти три строчки:

class SinklerXTemlate extends XTemplate {
    public function __construct($file, $tpldir = '', $files = null, $mainblock = 'main', $autosetup = true) {
        parent::__construct($file, $tpldir, $files, $mainblock, $autosetup);
    }
    public function read_cfg($bname) {
        $this->parse($bname);
        $cfg = $this->text($bname);
        $this->reset($bname);
        return $cfg;
    }
}
$count = $xtpl->read_cfg('count');

 

Опубликовано в категории PHP | Теги: PHP, Шаблонизаторы, XTemplate

Добавить комментарий