Yii 有点新。我正在尝试在 View 中发布 Assets 文件夹下的所有文件。
结构是这样的:
/views/test
/views/test/assets
/views/test/assets/css
/views/test/assets/images
现在,我所做的是使用 Yii:app()->getAssetManager()->publish( dirname( __FILE__ ) . '/assets/' );
在 /views/test
目录。
它可以正常发布它们,但现在我必须为 /views/test/assets/css
中包含的所有 css 调用 cs()->registerCssFile
。我该怎么做?
我知道 publish() 方法返回路径。这是否意味着我必须从文件夹中执行 foreach $file,然后使用返回的 Assets 目录调用 cs()->registerCssFile
?
可能有更简单的方法,因此非常感谢您的帮助! :)
最佳答案
我真的找到了答案!同时 registerCssFile()
确实有效,还有一个更优雅的解决方案,Yii 包!
考虑以下文件结构:
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
您可以在 index.php
中像这样声明一个包, 注意使用 Yii 框架的点符号表示 basePath
:
$package = array(
'basePath' => 'application.views.home.assets',
'css' => array( 'styles.css' ),
'js' => array( 'jquery.js', 'functions.js' )
);
然后,使用 Yii 的 clientScript
添加和注册包。
Yii::app()->clientScript()
->addPackage( 'package-name', $package )
->registerPackage( 'package-name' );
接下来要做的是发布ALL basePath
的内容并注册包中指定的CSS和JS文件。例如,styles.css
, custom.css
, 和 print.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' );
Michael 是正确的,反正不会有太多,所以在包声明中指定 css 和 js 文件应该不是什么大问题。
关于Yii 框架 : Register CSS After Publishing Asset Folder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16981757/