Pregunta

Estoy teniendo un problema tratando de anexar un archivo javascript usando headScript()->appendFile('file name') con Zend. Tengo mi configuración diseño como esto:

    <?= $this->headScript()
    ->prependScript( 'BASE_URL = "' . $this->baseUrl() . '";' )
    ->appendFile( $this->baseUrl('js/lib/jquery/jquery-1.4.2.min.js') )
    ->appendFile( $this->baseUrl('js/admin.js') );

?>

A continuación, en mi controlador que estoy tratando de anexar un archivo js adicional sólo para esta página, por ejemplo:

    $this->view->headScript()->appendFile( 'another/js/file.js' );

Este archivo debe ser añadido a lo que ya está configurado en el diseño. Sin embargo, este archivo se agrega antes los otros archivos 'appendfile'. También he intentado

$this->headScript()->offsetSetFile(999, '/js/myfuncs.js');

Pero esto todavía añade el archivo antes de que los otros archivos. Esto no es como yo esperaría que esto funcione, especialmente cuando se utiliza el método offsetSetFile. ¿Cómo puedo añadir este archivo después los otros archivos? Gracias.

¿Fue útil?

Solución

La respuesta es utilizar headScript()->prependFile en layout.phtml y headScript()->appendFile en una vista.

Otros consejos

Sé que es una respuesta tardía pero!

Si lo hace appendfile o appendScript IS utiliza el siguiente índice disponible. Por lo tanto

$this->headScript()->offsetSetFile(50, 'file');
$this->headScript()->appendFile('file2');

es equivalente a

$this->headScript()->offsetSetFile(50, 'file');
$this->headScript()->offsetSetFile(51, 'file2');

También es fundamental tener en cuenta que el código de controlador de conseguir ejecuta en primer lugar antes de que el código de la vista / diseño. Así, en su caso sus APPENDs en realidad están utilizando el id de 1000 y 1001. Una solución rápida para esto es sólo para utilizar explícitamente offsetSetFile para todas sus APPENDs. Por lo que su código en su diseño se vería así:

<?= 
   $this->headScript()
      ->prependScript( 'BASE_URL = "' . $this->baseUrl() . '";' )
      ->offsetSetFile(500, $this->baseUrl('js/lib/jquery/jquery-1.4.2.min.js') )
      ->offsetSetFile(501, $this->baseUrl('js/admin.js') );
?>

Espero que esto ayude futuro de googler

Me he dado cuenta de que si yo Prepend 'todos los archivos en el diseño, entonces me puedo usar en mi appendfile controlador y aparecerá después de ellos. Por desgracia, entonces tengo que enumerar todos mis archivos JS en el orden inverso en el diseño (ya que anteponer a sí mismos). Realmente me gusta mantener las cosas en orden y sólo ser capaz de añadir a mi pila de diseño.

Si anteponiendo en el archivo de diseño no es lo suficientemente bueno, puede incluir los archivos en su archivo de arranque al configurar su punto de vista o podría configurar un plugin controlador si es necesario anteponer la base de lo módulo está siendo cargado.

// in your bootstrap
protected function _initHeadScript()
{
    $this->bootstrap('view');
    $view = $this->getResource('view');

    $view->headScript()->appendFile('another/js/file.js');
}

// as a plugin
class My_Plugin_HeadScriptPlugin extends Zend_Controller_Plugin_Abstract
{
    public function routeStartup(Zend_Controller_Request_Abstract $request)
    {
        $view = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->view;

        if($request->getModuleName() == 'foo')
        {
            $view->headScript()->appendFile('another/js/file.js');
        }
    }
}

En realidad, no es necesario obtener la causa baseUrl' ZF ya lo hace por usted. Sólo hay que prestar atención a su trayectoria. No utilice la primera barra! de lo contrario ZF devolverá la dirección remota.

Sólo tiene que utilizar '$this->_view->headLink()->appendStylesheet('css/main.css'); '

http://zendframework.com/issues/browse/ZF-3282?focusedCommentId=23552&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-23552

el último comentario le da una excelente solución, en primer lugar incluir en el diseño en la parte superior, a continuación, imprimir cuando lo necesite, de esta manera va a trabajar

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top