Как получить путь к папке с темой JuiAsset в Yii2?

в , активы jui находятся в следующих путях: web\assets\135efca3\ в котором themes а также ui папки найдены —На самом деле, я не знаю, почему Yii2 создает разные пути или фальшивые пути.-. я думаю что getAssetPath () метод assetManager должен возвращать этот путь, но я не знаю как!

Я попробовал следующий код отладки в actions() метод контроллера:

public function actions()
{
echo Yii::$app->assetManager->getAssetPath(Yii::$app->assetManager->bundles = [
'yii\jui\JuiAsset'], 'themes');
die(); //for debugging
}

Тем не менее, он просто печатает /themes,

Другими словами, я могу спросить, как я мог предоставить первый параметр (объект) getAssetPath()? потому что, я думаю, что это проблема здесь.

редактировать

Я создал следующий помощник —по словам арогачева, ответьте про путь— чтобы получить список тем.

<?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>

Я думаю, что сейчас самое время научиться упаковывать все это в виджет.

0

Решение

jQuery UI (по умолчанию поставляется с framework) папки тем находятся в /vendor/bower/jquery-ui/themes папка.

Вы можете увидеть это, осмотрев $sourcePath анс $css свойства юй \ жуй \ JuiAsset.

Вместо того, чтобы писать полный путь, вы можете использовать псевдоним @bower:

Yii::getAlias('@bower/jquery-ui/themes');

Для перечисления вы можете использовать, например, этот метод:

$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/>";
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]