EDIT :
Что ж, вам не нужно разбираться в этом, либо вы можете просто иметь класс / функцию php, который просто проксирует ob_start / ob_get_clean, а затем сохраняет js где-то и выводит js в другом месте. вам не обязательно поддерживать или интегрировать функциональность библиотеки через php ...
если что-то может быть так просто, как что-то вроде следующего:
class UnobtrusiveJsHelper {
protected static $_instance;
protected $_js = array();
protected $_ready = array();
public static function getInstance()
{
}
public static function setInstance(UnobtrusiveJsHelper $instance)
{
}
public function captureStart($key = null)
{
if(null !== $key)
{
$this->_js[$key] = null;
}
ob_start();
}
public function captureEnd($key = null)
{
if(null !== $key)
{
$this->_js[$key] = ob_get_clean();
return;
}
$this->_js[] = ob_get_clean();
public function __toString()
{
return $this->dumpJs() . $this->_dumpReady();
}
public function dumpJs(array $attributes = null)
{
if(!empty($this->_js))
{
return "<script type=\"text/javascript\">". implode("\n", $this->_js) . "</script>";
}
return null;
}
public function dumpReady(array $attributes = null)
{
if(!empty($this->_js))
{
return '<script type="text/javascript">$(document).ready(function(){'. implode("\n", $this->_js) . '});</script>';
}
return null;
}
}
и затем в вашем контроллере: $js = UnobtrusiveJsHelper::getInstance();
и по вашему мнению:
<?php $js->captureStart(); ?>
var myjsvariable = 0;
<?php $js->captureEnd();
и в вашем макете (допустим двухэтапное представление здесь):
<?php echo isset($js) ? $js : null ?>
Это то, для чего вы используете помощника. Например, в Zend_Framework все эти маленькие onLoad/Ready
фрагменты добавляются в стек. Тогда все они сразу выходят в одно место в голове.
У меня есть специальный помощник, который я использую для jQ, который делает то же самое в Symfony.
Они позволяют такие вещи, как $jq->setVar('myjsvar', 1);
, тогда, когда я дам это, я получу что-то вроде:
var myjsvar = 1;
в теге скрипта в голове.
Посмотрите на ZendX_Jquery и Zend_Dojo и их соответствующие классы помощников вида для хорошего примера функциональности.