In-Portal Developers Guide

This is a wiki-based Developers Guide for In-Portal Open Source CMS. The purpose of this guide is to provide advanced users, web developers and programmers with documentation on how to expand, customize and improve the functionality and the code the In-Portal software. Please consider contributing to our documentation writing effort.

K4:Реорганизация тэгов

From In-Portal Developers Guide

Revision as of 14:54, 25 December 2008 by Alex (Talk)
(diff) ←Older revision | Current revision (diff) | Newer revision→ (diff)
Jump to: navigation, search
Библиотека тэгов Библиотека тэгов
Статьи в этой категории
  • Реорганизация тэгов

На данным момент интерпретатор шаблонов (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');

которая вернёт атрибут, только если он передан. По любым вопросам касательно этого документа обращайтесь к Косте