diff options
Diffstat (limited to 'framework/web/widgets/COutputProcessor.php')
| -rw-r--r-- | framework/web/widgets/COutputProcessor.php | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/framework/web/widgets/COutputProcessor.php b/framework/web/widgets/COutputProcessor.php new file mode 100644 index 0000000..1fc8ffd --- /dev/null +++ b/framework/web/widgets/COutputProcessor.php @@ -0,0 +1,77 @@ +<?php +/** + * COutputProcessor class file. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @link http://www.yiiframework.com/ + * @copyright Copyright © 2008-2011 Yii Software LLC + * @license http://www.yiiframework.com/license/ + */ + +/** + * COutputProcessor transforms the content into a different format. + * + * COutputProcessor captures the output generated by an action or a view fragment + * and passes it to its {@link onProcessOutput} event handlers for further processing. + * + * The event handler may process the output and store it back to the {@link COutputEvent::output} + * property. By setting the {@link CEvent::handled handled} property of the event parameter + * to true, the output will not be echoed anymore. Otherwise (by default), the output will be echoed. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @version $Id: COutputProcessor.php 2799 2011-01-01 19:31:13Z qiang.xue $ + * @package system.web.widgets + * @since 1.0 + */ +class COutputProcessor extends CFilterWidget +{ + /** + * Initializes the widget. + * This method starts the output buffering. + */ + public function init() + { + ob_start(); + ob_implicit_flush(false); + } + + /** + * Executes the widget. + * This method stops output buffering and processes the captured output. + */ + public function run() + { + $output=ob_get_clean(); + $this->processOutput($output); + } + + /** + * Processes the captured output. + * + * The default implementation raises an {@link onProcessOutput} event. + * If the event is not handled by any event handler, the output will be echoed. + * + * @param string $output the captured output to be processed + */ + public function processOutput($output) + { + if($this->hasEventHandler('onProcessOutput')) + { + $event=new COutputEvent($this,$output); + $this->onProcessOutput($event); + if(!$event->handled) + echo $output; + } + else + echo $output; + } + + /** + * Raised when the output has been captured. + * @param COutputEvent $event event parameter + */ + public function onProcessOutput($event) + { + $this->raiseEvent('onProcessOutput',$event); + } +} |
