Index: branches/RC/core/kernel/nparser/ntags.php =================================================================== diff -u -N -r11214 -r11336 --- branches/RC/core/kernel/nparser/ntags.php (.../ntags.php) (revision 11214) +++ branches/RC/core/kernel/nparser/ntags.php (.../ntags.php) (revision 11336) @@ -209,8 +209,8 @@ $code[] = 'return $_output;'; $code[] = '}}'; - $end_pos = $this->Tag['pos'] + $tag['pos'] + strlen($tag['opening']) + strlen($tag['tag']) + strlen($tag['closing']) + TAG_NAMESPACE_LENGTH; - $code[] = "\$_parser->ElementLocations['{$this->Tag['function_name']}'] = Array('file' => '{$this->Tag['file']}', 'start_pos' => {$this->Tag['pos']}, 'end_pos' => {$end_pos});"; + $end_pos = $tag['pos'] + strlen($tag['opening']) + strlen($tag['tag']) + strlen($tag['closing']) + TAG_NAMESPACE_LENGTH; + $code[] = "\$_parser->ElementLocations['{$this->Tag['function_name']}'] = Array('template' => '{$this->Tag['template']}', 'start_pos' => {$this->Tag['pos']}, 'end_pos' => {$end_pos});"; $this->AppendCode($o, $code); return $o; @@ -310,6 +310,49 @@ } } +class _Tag_RenderElements extends _BlockTag { + + function _Tag_RenderElements($tag) + { + parent::_BlockTag($tag); + + $this->_requiredParams = Array ('elements'); + } + + function Open($tag) + { + $o = parent::Open($tag); + + if ($o === false) { + // some required params not passed + return $o; + } + + $element_names = array_map('trim', explode(',', $tag['NP']['elements'])); + unset($tag['NP']['elements']); + + $class = '_Tag_RenderElement'; + $instance = new $class($tag); + /* @var $instance _Tag_RenderElement */ + + $instance->Parser =& $this->Parser; + + $skip_elements = array_key_exists('skip', $tag['NP']) ? array_map('trim', explode(',', $tag['NP']['skip'])) : Array (); + + foreach ($element_names as $element_name) { + if (in_array($element_name, $skip_elements) || !$element_name) { + // empty element name OR element should be excluded + continue; + } + + $tag['NP']['name'] = $element_name; + $o .= $instance->Open($tag); + } + + return $o; + } +} + class _Tag_Param extends _BlockTag { function _Tag_Param($tag)