Задать вопрос
@sanex3339

Yii2. Ассеты и неправильные пути в коде js файлов. Как починить?

Появилась проблема. Есть yii2 модульное приложение.
Есть модуль layout (путь @rootfolder/vendor/sanex/layout), в котором находятся папки assets (в папке файл LayoutAssets.php, в котором прописаны js и css файлы), js, css, img и прочие.
В папке js есть обычный скрипт на jquery, в котором мы обычным способом меняем background-image на другую, например вот так.
$('.blablabla').css({'background-image' : 'url("img/test.jpg")'});

На выходе, получается ссылка на бэкграунд вида http://yii2/img/test.jpg, которая не работает, т.к. картинки находятся в папке с ассетами.

Как получить на выходе ссылку вида http://yii2/assets/28f6aca1/img/test.jpg?

Вряд ли это делается в js коде, т.к. плагин "Pixp" тоже не работает из за этого.

Все остальные пути правильные, т.е. при загрузке страницы все стили и скрипты подцепляются верно, проблема только в путях, которые указаны в коде js файлов.

Мой файл LayoutAssets.php

<?php
namespace sanex\layout\site\assets;
use yii\web\AssetBundle;

class LayoutAsset extends AssetBundle
{
    public $sourcePath = '@sanex/layout/site';

    public $css = [
        'css/bootstrap.css',
        'css/normalize.css',
        'css/main.css',
        'css/gridinator.css',
        'css/style.css',
    ];

    public $js = [
        'js/vendor/modernizr-2.6.2.min.js',
        'js/vendor/jquery-1.10.2.min.js',
        'js/plugins.js',
        'js/main.js',
        //'http://jek-fdrv.16mb.com/pixp/pixp.js',
    ];

    public $depends = [
        'yii\web\YiiAsset',
    ];
}
  • Вопрос задан
  • 4602 просмотра
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
fornit1917
@fornit1917
> В php получить путь до папки легко, а как в js непонятно.
При рендеринге страницы на стороне пхп "встройте" в тело страницы глобальную яваскрипт-переменную, в которой будете хранить путь к папке. Что-то типо того:
<script>
var g_AssetsPath = '<?php echo getPath() ?>';
</script>


Потом из яваскрипта можно будет к g_AssetsPath обратиться.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
reffy
@reffy
Я молодец.
Имя папки в assets -- это её хэш. Можно в js так и написать
$('.blablabla').css({'background-image' : 'url("/assets/28f6aca1/img/test.jpg")'});
Ответ написан
@sanex3339 Автор вопроса
В общем ответили мне следующее:
I am afraid we can not analyze JS searching for possible image URL usage. This is simply too risky.
You should reconsider your code, allowing to pass images base path into js via configuration or something.


Ну, тогда буду использовать это решение с правкой js кода -(
yiiframework.ru/forum/viewtopic.php?f=19&t=20187#p...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы