문제

다음을 사용하여 자바스크립트 파일을 추가하는 데 문제가 있습니다. headScript()->appendFile('file name') 젠드와 함께.레이아웃 설정은 다음과 같습니다.

    <?= $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') );

?>

그런 다음 내 컨트롤러에서 다음과 같이 이 페이지에만 추가 js 파일을 추가하려고 합니다.

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

이 파일은 레이아웃에 이미 설정된 파일에 추가되어야 합니다.하지만 이 파일이 추가됩니다. ~ 전에 다른 'appendFile' 파일.나도 시도해 봤어

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

그러나 이것은 여전히 ​​다른 파일보다 먼저 파일을 추가합니다.이는 특히 offsetSetFile 메서드를 사용할 때 이것이 작동할 것으로 예상하는 방식이 아닙니다.이 파일을 어떻게 추가하나요? ~ 후에 다른 파일은?감사해요.

도움이 되었습니까?

해결책

대답은 사용하는 것입니다 headScript()->prependFile 레이아웃.phtml 및 headScript()->appendFile 보기에.

다른 팁

답변이 늦었다는 건 알지만!

AppendFile을 수행하거나 AppendScript는 사용 가능한 다음 인덱스를 사용합니다.따라서

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

는 다음과 같습니다

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

또한 컨트롤러 코드가 보기/레이아웃 코드보다 먼저 실행된다는 점에 유의하는 것이 중요합니다.따라서 귀하의 경우 추가 사항은 실제로 ID의 1000과 1001을 사용하고 있습니다.이에 대한 빠른 수정은 모든 추가에 대해 offsetSetFile을 명시적으로 사용하는 것입니다.따라서 레이아웃의 코드는 다음과 같습니다.

<?= 
   $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') );
?>

이것이 미래의 Google 직원에게 도움이 되기를 바랍니다.

레이아웃의 모든 파일을 '앞에 추가'하면 컨트롤러에서appendFile을 사용할 수 있으며 파일 뒤에 표시됩니다.불행히도 레이아웃에서 모든 JS 파일을 역순으로 나열해야 합니다(파일 자체가 앞에 추가되므로).나는 모든 것을 순서대로 유지하고 레이아웃 스택에 추가할 수 있기를 정말로 원합니다.

레이아웃 파일에 미리 추가하는 것만으로는 충분하지 않은 경우 뷰를 설정할 때 부트스트랩에 파일을 포함하거나 로드되는 모듈에 따라 미리 추가해야 하는 경우 컨트롤러 플러그인을 설정할 수 있습니다.

// 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');
        }
    }
}

실제로 ZF가 이미 baseUrl을 수행하고 있으므로 baseUrl을 얻을 필요가 없습니다.당신은 당신의 길에주의를 기울이면됩니다.첫 번째 슬래시를 사용하지 마십시오!그렇지 않으면 ZF는 원격 주소를 반환합니다.

그냥 사용 '$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

마지막 주석은 훌륭한 솔루션을 제공합니다. 먼저 상단의 레이아웃에 포함시킨 다음 필요할 때 인쇄하면 이렇게 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top