ФорумПрограммированиеПыхнуть хотите?F.A.Q. → XTemplate - читаем конфигурацию из шаблона

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

  • Sinkler

    Сообщения: 9658 Репутация: N Группа: в ухо

    Spritz 20 сентября 2010 г. 10:29, спустя 67 дней 10 часов 25 минут

    Представим себе ситуацию: имеем блок, который выводит новости.
    <!– BEGIN:news –>
     <td class=&quot;div_1&quot;>
       <table>
         <tr>
           <td valign=&quot;top&quot; class=&quot;image&quot;><a href=&quot;{news.link}&quot;><img src=&quot;{news.image}&quot; alt=&quot;&quot; /></a></td>
           <td valign=&quot;top&quot;>
             <span>{news.date}</span>
             <p>{news.title}</p>
             <img src=&quot;{config.path.img}icon_str.gif&quot; alt=&quot;&quot; /><a href=&quot;{news.link}&quot;>Подробнее</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] = &#39;&#39;;
    }

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

    Ну а дальше в контроллере считываем это количество и сбрасываем этот блок:
    $xtpl->parse(&#39;count&#39;);
    $count = $xtpl->text(&#39;count&#39;);
    $xtpl->reset(&#39;count&#39;);

    Для удобства можем создать метод с произвольным названием, чтобы каждый раз не писать эти три строчки:
    class SinklerXTemlate extends XTemplate {
       public function __construct($file, $tpldir = &#39;&#39;, $files = null, $mainblock = &#39;main&#39;, $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(&#39;count&#39;);


    http://sinkler.ru/posts/read_configuration_from_xtemplate
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 14 июля 2010 г. 14:27, спустя 3 часа 58 минут 37 секунд

    а в чем вопрос собственно говоря? {+++47+++} и да, xtemplate отстой по сравнению с Twig&#39;ом ^^
  • Sinkler

    Сообщения: 9658 Репутация: N Группа: в ухо

    Spritz 14 июля 2010 г. 14:28, спустя 58 секунд

    а в чем вопрос собственно говоря?


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

  • Sinkler

    Сообщения: 9658 Репутация: N Группа: в ухо

    Spritz 14 июля 2010 г. 15:15, спустя 46 минут 18 секунд

    и да, xtemplate отстой по сравнению с Twig&#39;ом ^^

    мы стараемся как можно больше ущемить верстальщиков в их возможностях)))
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 15 июля 2010 г. 0:03, спустя 8 часов 48 минут 31 секунду

    для этого в Twig&#39;е &quot;искаропки&quot; есть расширение Sandbox. + ессно можно настроить какие теги/фильтры разрешены

Пожалуйста, авторизуйтесь, чтобы написать комментарий!