Yii2中如何获取JuiAsset的主题文件夹路径?
How to get the theme folder path of JuiAsset in Yii2?
在assetManager的yii2-advanced-app, the jui assets are found in paths like: web\assets5efca3\
in which themes
and ui
folders are found -Indeed, I don't know why Yii2 makes a varied path segment or fake path-. I think that getAssetPath()方法中应该return那个路径,但我不知道怎么办!
我在控制器的actions()
方法中尝试了如下调试代码:
public function actions()
{
echo Yii::$app->assetManager->getAssetPath(Yii::$app->assetManager->bundles = [
'yii\jui\JuiAsset'], 'themes');
die(); //for debugging
}
然而,它只打印 /themes
。
换句话说,我可以问,我怎么能提供getAssetPath()
的第一个参数(对象)?因为,我认为这是这里的问题。
编辑
我创建了以下助手 -根据 arogachev 关于路径的回答- 来获取主题列表。
<?php
namespace common\libs;
use yii;
use yii\web\Controller;
class JuithemeHelpers
{
public static function getThemesList()
{
$themesPath = dirname(Yii::$app->basePath).DIRECTORY_SEPARATOR."vendor".DIRECTORY_SEPARATOR."bower".DIRECTORY_SEPARATOR."jquery-ui".DIRECTORY_SEPARATOR."themes";
$output = [];
foreach (scandir($themesPath) as $item){
if (is_dir($themesPath.DIRECTORY_SEPARATOR.$item) && ($item != '.' && $item !='..')) $output[] = $item;
}
return $output;
}
}
然后在视图中我做了以下内容:
...
<?= $form->field($model, 'birthdate')->widget(DatePicker::className(), ['clientOptions' => ['dateFormat' => 'yy-mm-dd', 'changeYear' => true, 'yearRange' => sprintf('%s:%s', date('Y')-100,date('Y')-16)],]) ?>
<select onchange="changeTheme(this.value)">
<?php foreach (JuithemeHelpers::getThemesList() as $item): ?>
<option value="<?= $item ?>"><?= $item ?></option>
<?php endforeach; ?>
</select>
<?= $form->field($model, 'gender_id')->dropDownList($model->getGenderList(), ['prompt' => 'Please Select one...']) ?>
...
......
<script>
function changeTheme(n){
s = document.getElementsByTagName('link');
o = ''
re = /\/themes\/(.*)\/jquery-ui.css/gi;
for (i = 0; i < s.length; i++){
if (s[i].href.match(re)){
o = s[i].href.replace(re.exec(s[i].href)[1],n);
s[i].href=o;
}
}
}
</script>
我认为现在是学习如何将所有这些打包到一个小部件中的时候了。
jQuery UI
(框架默认自带)主题文件夹位于/vendor/bower/jquery-ui/themes
文件夹中。
您可以通过检查 yii\jui\JuiAsset.
的 $sourcePath
和 $css
属性来查看它
您可以使用别名 @bower
:
而不是写完整路径
Yii::getAlias('@bower/jquery-ui/themes');
对于清单,您可以使用例如 method:
$themesPath = Yii::getAlias('@bower/jquery-ui/themes');
$results = scandir($themesPath);
foreach ($results as $result) {
if ($result === '.' || $result === '..' || !is_dir($themesPath . '/' . $result)) {
continue;
}
echo $result . "<br/>";
}
在assetManager的yii2-advanced-app, the jui assets are found in paths like: web\assets5efca3\
in which themes
and ui
folders are found -Indeed, I don't know why Yii2 makes a varied path segment or fake path-. I think that getAssetPath()方法中应该return那个路径,但我不知道怎么办!
我在控制器的actions()
方法中尝试了如下调试代码:
public function actions()
{
echo Yii::$app->assetManager->getAssetPath(Yii::$app->assetManager->bundles = [
'yii\jui\JuiAsset'], 'themes');
die(); //for debugging
}
然而,它只打印 /themes
。
换句话说,我可以问,我怎么能提供getAssetPath()
的第一个参数(对象)?因为,我认为这是这里的问题。
编辑
我创建了以下助手 -根据 arogachev 关于路径的回答- 来获取主题列表。
<?php
namespace common\libs;
use yii;
use yii\web\Controller;
class JuithemeHelpers
{
public static function getThemesList()
{
$themesPath = dirname(Yii::$app->basePath).DIRECTORY_SEPARATOR."vendor".DIRECTORY_SEPARATOR."bower".DIRECTORY_SEPARATOR."jquery-ui".DIRECTORY_SEPARATOR."themes";
$output = [];
foreach (scandir($themesPath) as $item){
if (is_dir($themesPath.DIRECTORY_SEPARATOR.$item) && ($item != '.' && $item !='..')) $output[] = $item;
}
return $output;
}
}
然后在视图中我做了以下内容:
...
<?= $form->field($model, 'birthdate')->widget(DatePicker::className(), ['clientOptions' => ['dateFormat' => 'yy-mm-dd', 'changeYear' => true, 'yearRange' => sprintf('%s:%s', date('Y')-100,date('Y')-16)],]) ?>
<select onchange="changeTheme(this.value)">
<?php foreach (JuithemeHelpers::getThemesList() as $item): ?>
<option value="<?= $item ?>"><?= $item ?></option>
<?php endforeach; ?>
</select>
<?= $form->field($model, 'gender_id')->dropDownList($model->getGenderList(), ['prompt' => 'Please Select one...']) ?>
...
......
<script>
function changeTheme(n){
s = document.getElementsByTagName('link');
o = ''
re = /\/themes\/(.*)\/jquery-ui.css/gi;
for (i = 0; i < s.length; i++){
if (s[i].href.match(re)){
o = s[i].href.replace(re.exec(s[i].href)[1],n);
s[i].href=o;
}
}
}
</script>
我认为现在是学习如何将所有这些打包到一个小部件中的时候了。
jQuery UI
(框架默认自带)主题文件夹位于/vendor/bower/jquery-ui/themes
文件夹中。
您可以通过检查 yii\jui\JuiAsset.
的$sourcePath
和 $css
属性来查看它
您可以使用别名 @bower
:
Yii::getAlias('@bower/jquery-ui/themes');
对于清单,您可以使用例如 method:
$themesPath = Yii::getAlias('@bower/jquery-ui/themes');
$results = scandir($themesPath);
foreach ($results as $result) {
if ($result === '.' || $result === '..' || !is_dir($themesPath . '/' . $result)) {
continue;
}
echo $result . "<br/>";
}