Суть в том, что вы действительно не хотите вводить дескрипторы макетов таким образом. Это становится довольно сложным (достаточно сложным, так что я не могу достаточно быстро проследить его вниз для ответа на переполнение стека), но
Если вы добавите свой дескриптор перед вызовом $ this-> loadLayout () из контроллера, это слишком рано.
Если вы добавите свой дескриптор после вызова $ this-> loadLayout (), будет слишком поздно.
Вот эксперимент, попробуйте изменить метод loadLayout в базовом контроллере действий
File: app/code/core/Mage/Core/Controller/Varien/Action.php
public function loadLayout($handles=null, $generateBlocks=true, $generateXml=true)
{
// if handles were specified in arguments load them first
if (false!==$handles && ''!==$handles) {
$this->getLayout()->getUpdate()->addHandle($handles ? $handles : 'default');
}
//YOUR NEW CALL HERE
$this->getLayout()->getUpdate()->addHandle('myhandle');
...
Это должно сработать и применить ваш макет. Теперь, делать это в производстве было бы плохой идеей, я упомяну это только для того, чтобы показать вам, что маркеры нужно добавлять в очень специфический процесс визуализации макета времени. Как конечный программист, вставлять дескрипторы макетов на самом деле не ваша задача.
Система макетов предназначена для того, чтобы быть слоем, который находится между дизайнерами и необработанным системным кодом PHP. Поскольку вы явно можете писать PHP-код, я бы просто посмотрел, как напрямую внедрить ваш javascript в блок pre-render блока head.
//from a controller, but could be modified to be used elsewhere
//also pseudo code
$this->getLayout()->getBlock('header')->append(
$this->getLayout()
->createBlock('core/text', 'some-unique-name')
->setText('<script type="text/javascript" src="/foo/baz/bar.js"></script>')
);