MACRO - стотысячная попытка сделать новый PHP шаблонизатор

Frol

Новичок
dark-demon
будь добр, воздержись от высказываний в эту тему.
 

atv

Новичок
Добавил в MACRO экспериментальную возможность
Интересно, насколько сложным получился код, реализующий такую возможность. По идее, не должен быть слишком громоздким...
 

pachanga

Новичок
У тебя всегда есть возможность посмотреть исходники ;) Но в общем да, ничего сложного.
 

CatManZero

Новичок
Автор оригинала: pachanga
Добавил в MACRO экспериментальную возможность использовать "вложенные" шаблоны(чем-то похоже на XSLT), например так:

Код:
{{template name="tpl1"}}
Hello, {$name}
{{/template}}

{{apply template="tpl1 name="Bob"/}}
Если сравнивать с XSLT, как мне кажется, уместнее было вместо {{apply ...}} использовать {{call ...}}, так как в xslt для вызова именованных шаблонов используется <xsl:call-template name="template"/>. <xsl:apply-templates/> используется немножко для другого.
 

dark-demon

d(^-^)b
с другой стороны - нет смысла вводить макрос "звонить", если свободен "применить"..
 

CatManZero

Новичок
Автор оригинала: dark-demon
с другой стороны - нет смысла вводить макрос "звонить", если свободен "применить"..
Когда я писал про замену, я имел ввиду, что, если MACRO и дальше будет противопоставляться XSLT, то использование apply, может ввести знающих XSLT в заблуждение.
 

atv

Новичок
У тебя всегда есть возможность посмотреть исходники
Вот уж ленивый. Мог бы выложить выдержку из кода, так сказать концепцию, я ведь тоже ленивый.
 

pachanga

Новичок
Автор оригинала: atv
Вот уж ленивый. Мог бы выложить выдержку из кода, так сказать концепцию, я ведь тоже ленивый.
Да мне не сложно, просто мусорить не хотел, ну да ладно:

template.tag.php
Код:
class lmbMacroTemplateTag extends lmbMacroTag
{
  function generateContents($code)
  {
    $name = $this->get('name');

    $args = $code->getTempVarRef();
    $code->beginMethod('_template'. $name, array($args . '= array()'));
    $code->writePHP("if($args) extract($args);");
    parent :: generateContents($code);
    $code->endMethod();
  }
}
apply.tag.php
Код:
class lmbMacroApplyTag extends lmbMacroTag
{
  function generateContents($code)
  {
    $name = $this->get('template');

    $args = $this->_attributesIntoArray();

    $arg_str = 'array(';
    foreach($args as $key => $value)
      $arg_str .= "'$key' => $value,";
    $arg_str .= ')';

    $code->writePHP('$this->_template'. $name . '(' . $arg_str . ');');
  }

  protected function _attributesIntoArray()
  {
    $arr = array();
    foreach($this->attributes as $k => $attribute)
      $arr[$k] = $this->getEscaped($k);
    return $arr;
  }
}
Здесь пока нет проверок на необходимые аттрибуты и проч. Но, думаю, идея понятна.
 

atv

Новичок
Ну так смотри, почему бы тебе по такому принципу не сделать поддержку для XSL синтаксиса? Т.е. чтобы XSL шаблоны компилировались в PHP код, с возможностью подсовывать его вместо стандартного XSLT процессора? Потом можно было бы добавить дополнительные возможности, которых не хватает в XSLT. Рулезная была бы штука.
 

pachanga

Новичок
Автор оригинала: atv
Ну так смотри, почему бы тебе по такому принципу не сделать поддержку для XSL синтаксиса? Т.е. чтобы XSL шаблоны компилировались в PHP код, с возможностью подсовывать его вместо стандартного XSLT процессора? Потом можно было бы добавить дополнительные возможности, которых не хватает в XSLT. Рулезная была бы штука.
Не-не, я просто категорически против XML подобного синтаксиса по причинам, которые уже оговаривал где-то вначале треда.
 

dark-demon

d(^-^)b
там же вначале и аргументация... по обоим пунктам...

-~{}~ 23.10.07 21:17:

напомню - это пространства имён для тэгов и классические фигурные скобки для значений аттрибутов.
 

pachanga

Новичок
Там же написаны и причины, почему я против XML подобного синтаксиса. По этому поводу спорить бесполезно, т.к я своего мнения все равно не изменю.
 
Сверху