K4:Реорганизация тэгов
From In-Portal Developers Guide
| ||
---|---|---|
Статьи в этой категории | ||
|
На данным момент интерпретатор шаблонов (template parser) поддерживает 2 набора тэгов:
- совместимые с XML правилами
- не совместимые с XML правилами
Отныне настоятельно рекомендуется использовать XML совместимые тэги, т.к. в последствии просто будет выключена поддержка всех остальных тэгов. Ниже приведена таблица совместимости между тэгами старого образца и нового:
тэги старого образца | тэги нового образца |
---|---|
<inp2:m_block name="some_elem"/> element content <inp2:m_blockend/> |
<inp2:m_DefineElement name="some_elem"> element content </inp2:m_DefineElement> |
<inp2:m_if prefix="prefix" function="Tag" param1="1" param2="2"/> true case <inp2:m_else/> false case <inp2:m_endif/> |
<inp2:m_if check="prefix_Tag" param1="1" param2="2"> true case <inp2:m_else/> false case </inp2:m_if> |
<inp2:m_ParseBlock name="..."/> |
<inp2:m_RenderElement name="..."/> |
Для того, чтобы заменить подавляющее большинство тэгов нужно в корне проекта выполнить команду:
find ./ -type f -name "*.tpl" | xargs \ sed -i -e "s/<inp2:m_blockend[^\/>]*[\/]*>/<\/inp2:m_DefineElement>/g" \ -e "s/<inp2:m_block \(.*\)\/>/<inp2:m_DefineElement \1>/g" \ -e "s/<inp2:m_if\(.*\)prefix=\"\(.*\)\"\(.*\)function=\"\(.*\)\"\([^\/>]*\)[\/]*>/<inp2:m_if\1check=\"\2_\4\"\3\5>/g" \ -e "s/<inp2:m_endif[ ]*\/>/<\/inp2:m_if>/g" \ -e "s/<inp2:m_ParseBlock\([^>]*\)>/<inp2:m_RenderElement\1>/g" \ -e "s/\(<inp2:[^>]*\)\$PrefixSpecial_\([^\"]*\)/\1{\$PrefixSpecial}_\2/g" \ -e "s/\(<inp2:[^>]*\)\$prefix_\([^\"]*\)/\1{\$prefix}_\2/g"
После это может потребоваться руками заменить тэги вида:
-
<inp2:m_if ... />
на<inp2:m_if>
-
<inp2:m_DefineElement />
на<inp2:m_DefineElement>
Для атрибутов тэгов требуется выполнять следующие преобразования:
атрибуты старого образца | атрибуты нового образца |
---|---|
block | render_as |
block_* | *_render_as |
*_block | *_render_as |
XML совместимые тэги так-же улучшают читабельность шаблона, например:
<inp2:p_ListProducts render_as="product_elem" row_start_render_as="row_start_elem" />
Эта конструкция проста и понятна, т.к. сразу ястно что здесь происходит. А из названия тэга DefineElement понятно, что это только декларация и результат не будет виден здесь, а будет использоваться в другом месте.
As for IF we should use:
Пожалуйста начинайте пересматривать код в ваших шаблонах. Лучше не заменять название атрибутов совсем, а пользоваться следующей конструкцией:
$param_value = $this->SelectParam($params, 'new_attribute_name,old_attribute_name,other_attribute_name');
которая вернёт атрибут, только если он передан. По любым вопросам касательно этого документа обращайтесь к Косте