Dr.CustUmz
03-30-2022, 03:34 AM
in vb4 we can use <vb:each> as a foreach within templates. This is actually a very cool feature.
I am trying to port it to vb3 but am having some difficulty.
Looking into the files I have found 3 that correspond to this feature.
class_template_parser.php
adminfunctions_template.php
template_tag_defs.php
for creating vb3 if conditions the only file I could come up with that was responsible for them was.
adminfunctions_template.php
how could I go about adding this into vb3 so I could use for each's within templates?
The complete class is:
class vB_TemplateParser_TagEach extends vB_TemplateParser_Tag
{
public static function validate(vB_DomNode $main_node, vB_TemplateParser $parser)
{
$errors = array();
if (strpos(implode('',$main_node->attributes),'(') !== false)
{
throw new vB_Exception_TemplateFatalError('template_text_not _safe');
}
if(!parent::validateVar($main_node->attributes['from']))
{
$errors[] = 'invalid_each_from';
}
if(!parent::validateVar($main_node->attributes['value'], false))
{
$errors[] = 'invalid_each_value';
}
if (isset($main_node->attributes['key']))
{
if(!parent::validateVar($main_node->attributes['key'], false))
{
$errors[] = 'invalid_each_key';
}
}
return $errors;
}
public static function compile(vB_DomNode $main_node, vB_TemplateParser $parser)
{
$key = '';
if (isset($main_node->attributes['key']))
{
$key = parent::compileVar($main_node->attributes['key']);
}
$from = parent::compileVar($main_node->attributes['from']);
$value = parent::compileVar($main_node->attributes['value']);
$children = $parser->_parse_nodes($main_node->childNodes());
return "''" . '; if (is_array(' . $from . ') || ' . $from . ' instanceof ArrayAccess) { foreach (' . $from . ' AS ' . ($key ? $key . ' => ' : '') . $value . ') {' . $parser->outputVar . " .= '" . $children . "'; } }" . $parser->outputVar . " .= ''";
}
}
I am trying to port it to vb3 but am having some difficulty.
Looking into the files I have found 3 that correspond to this feature.
class_template_parser.php
adminfunctions_template.php
template_tag_defs.php
for creating vb3 if conditions the only file I could come up with that was responsible for them was.
adminfunctions_template.php
how could I go about adding this into vb3 so I could use for each's within templates?
The complete class is:
class vB_TemplateParser_TagEach extends vB_TemplateParser_Tag
{
public static function validate(vB_DomNode $main_node, vB_TemplateParser $parser)
{
$errors = array();
if (strpos(implode('',$main_node->attributes),'(') !== false)
{
throw new vB_Exception_TemplateFatalError('template_text_not _safe');
}
if(!parent::validateVar($main_node->attributes['from']))
{
$errors[] = 'invalid_each_from';
}
if(!parent::validateVar($main_node->attributes['value'], false))
{
$errors[] = 'invalid_each_value';
}
if (isset($main_node->attributes['key']))
{
if(!parent::validateVar($main_node->attributes['key'], false))
{
$errors[] = 'invalid_each_key';
}
}
return $errors;
}
public static function compile(vB_DomNode $main_node, vB_TemplateParser $parser)
{
$key = '';
if (isset($main_node->attributes['key']))
{
$key = parent::compileVar($main_node->attributes['key']);
}
$from = parent::compileVar($main_node->attributes['from']);
$value = parent::compileVar($main_node->attributes['value']);
$children = $parser->_parse_nodes($main_node->childNodes());
return "''" . '; if (is_array(' . $from . ') || ' . $from . ' instanceof ArrayAccess) { foreach (' . $from . ' AS ' . ($key ? $key . ' => ' : '') . $value . ') {' . $parser->outputVar . " .= '" . $children . "'; } }" . $parser->outputVar . " .= ''";
}
}