The OPT attributes are redirected to the processAttribute() method, which you have to extend in order to capture them. The method takes one parameter: the object of optBlock class with the attribute data.
Example 5.10. Handling OPT attributes
<?php
class optFirst extends optInstruction // 1
{
public function configure()
{
return array( // 2
// processor name
0 => 'first',
// instructions
'first' => OPT_MASTER,
'/first' => OPT_ENDER,
'attribute' => OPT_ATTRIBUTE,
'attr2' => OPT_ATTRIBUTE
);
} // end configure();
public function instructionNodeProcess(ioptNode $node)
{
foreach($node as $block) // 3
{
switch($block -> getName()) // 4
{
case 'first':
$this -> firstBegin($block-> getAttributes());
$this -> defaultTreeProcess($block); // 5
break;
case '/first':
$this -> firstEnd();
break;
}
}
} // end process();
private function firstBegin($attributes)
{
$this -> compiler -> out('Beginning tag<br/>', true); // 6
} // end firstBegin();
private function firstEnd()
{
$this -> compiler -> out('Ending tag<br/>', true);
} // end firstEnd();
public function processAttribute(optBlock $block)
{
switch($block -> getName())
{
case 'attribute':
$this -> compiler -> out(' echo \'Im an attribute!\'; ');
break;
case 'attr2':
$this -> compiler -> out(' echo \'Im another attribute!\'; ');
break;
}
} // end processAttribute();
}
?>The attributes are first registered in the configure() method and then we choose, what to do with them, with a simple switch statement. The method must generate some PHP code for the compiler.