2013-06-07 1 views
3

Yii의 새로운 기능. 보기에서 자산 폴더 아래의 모든 파일을 게시하려고합니다.Yii Framework : 자산 폴더 게시 후 CSS 등록

구조는 다음과 같이이다 : 이제

/views/test

/views/test/assets

/views/test/assets/css

/views/test/assets/images

, 내가 한 일은 자산이 /views/test 디렉토리에 Yii:app()->getAssetManager()->publish(dirname(__FILE__) . '/assets/');를 사용하여 폴더에 게시했다 .

그것은 모두 괜찮지 만, 지금은 /views/test/assets/css에 들어있는 모든 CSS에 대해 cs()->registerCssFile으로 전화해야합니다. 어떻게해야합니까?

publish() 메서드가 경로를 반환한다는 것을 알고 있습니다. 그렇다면 폴더에서 foreach $ 파일을 실행 한 다음 반환 된 자산 디렉토리를 사용하여 cs()->registerCssFile을 호출해야합니까?

더 쉬운 방법이있을 수 있으므로 도움이 될 것입니다. :)

답변

4

실제로 답변을 찾았습니다! registerCssFile()가 작동하는 동안, Yii 패키지보다 훨씬 우아한 솔루션이 있습니다! basePath의 YII 프레임 워크의 점 표기법을 사용하도록주의하면서, 당신은 index.php 년과 같이 패키지를 선언 할 것

protected 
\---views 
    |---home 
    | \---assets 
    |  |---css 
    |  | |---styles.css 
    |  | |---custom.css 
    |  | \---print.css 
    |  |---js 
    |  | |---functions.js 
    |  | |---jquery.js 
    |  | \---ajax.js 
    |  |---images 
    |  |---img1.png 
    |  |---imgn.png 
    |  \---imgX.png 
    \---index.php 

:

는 다음과 같은 파일 구조를 고려

$package = array(
    'basePath' => 'application.views.home.assets', 
    'css'   => array('styles.css'), 
    'js'   => array('jquery.js', 'functions.js') 
); 

을 그리고, Yii의 clientScript을 사용하여 패키지를 추가하고 등록하십시오. 이 다음이다 basePath모든 내용을 게시하고 패키지에 지정된 CSS와 JS 파일을 등록 무엇을 할 것 인

Yii::app()->clientScript() 
      ->addPackage('package-name', $package) 
      ->registerPackage('package-name'); 

. 예를 들어, styles.css, custom.cssprint.css은 모두 게시되지만 styles.css만이 <head>에 추가됩니다.

는 사용하지 않고 이것을 고려 :

$assetFolder = Yii::app()->assetManager->publish(dirname(__FILE__) . '/assets'); 
Yii::app()->clientScript->registerCssFile($assetFolder . 'styles.css'); 
Yii::app()->clientScript->registerScriptFile($assetFolder . 'jquery.js'); 
Yii::app()->clientScript->registerScriptFile($assetFolder . 'function.js'); 

마이클 어쨌든 너무 너무 많은 문제가 안된다 패키지 선언의 CSS와 JS 파일을 지정 너무 많은 없을 것 맞습니다.

+0

실제로. 또한 Yii II가 자산 패키지를 둘러싼 것처럼 보입니다. –

+0

문제가 있습니다. – Abudayah

1

귀하의 가정은 맞습니다. Yii는 해당 디렉토리의 파일을 보지 않습니다. 전체 디렉토리 만 게시합니다. 필요한 모든 파일을 등록하는 것이 귀하의 임무입니다. PHP에서 디렉토리를 열고 디렉토리 내용을 읽을 수 있습니다. 그러나 막대한 양의 사이트에서이를 피할 수 있습니다 - 비용이 귀중한 CPU주기입니다.

각 파일에 대해 registerCssFile()을 수동으로 호출하기 만하면됩니다. 어쨌든 너무 많아서는 안됩니다. 그리고이 방법으로 어떤 파일이로드되는지 더 잘 제어 할 수 있습니다.