Assets в widget

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
shkarbatov
Сообщения: 423
Зарегистрирован: 2012.12.10, 14:19
Откуда: Россия

Assets в widget

Сообщение shkarbatov »

Всем привет, подключаю assets в widget.

Но скрипты почему-то не грузятся.

Asset

Код: Выделить всё

<?php
namespace app\modules\confirm\assets;

use yii\web\AssetBundle;

class IvrAsset extends AssetBundle
{
    public $sourcePath = '@webroot';

    public $js = [
        'ivr.js'
    ];

    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];
}
widget view

Код: Выделить всё

<?php
use app\modules\confirm\assets\IvrAsset;
IvrAsset::register($this);
?>

<div>Test</div>
Widget

Код: Выделить всё

namespace app\modules\confirm\widgets\confirm;

use Yii;
use yii\base\Widget;

class ConfirmWidget extends Widget
{
    public $phone;

    public $operation;

    public function run()
    {
        return $this->render(
            'ivr',
            ['phone' => $this->phone, 'operation' => $this->operation]
        );
    }
Есть идеи в чем может быть проблема?
Последний раз редактировалось shkarbatov 2016.05.10, 19:19, всего редактировалось 1 раз.
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Assets в widget

Сообщение Onotole »

что значит не грузятся?
shkarbatov
Сообщения: 423
Зарегистрирован: 2012.12.10, 14:19
Откуда: Россия

Re: Assets в widget

Сообщение shkarbatov »

При рендеринге view - их нет.
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Assets в widget

Сообщение Onotole »

где именно нет? Вы определили, что их нет по тому, что они не работают, или по тому, что их нет в исходном коде страницы?
shkarbatov
Сообщения: 423
Зарегистрирован: 2012.12.10, 14:19
Откуда: Россия

Re: Assets в widget

Сообщение shkarbatov »

Код: Выделить всё

    $this->render(
        'ivr',
        ['phone' => $this->phone, 'operation' => $this->operation]
    );
Возвращает - <div>Test</div>
Подключаемых скриптов в нем нет.

Хотя в бандле ассетов они есть.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Assets в widget

Сообщение ElisDN »

Скрипты в layout после jquery.js грузятся, а не в render виджета.
shkarbatov
Сообщения: 423
Зарегистрирован: 2012.12.10, 14:19
Откуда: Россия

Re: Assets в widget

Сообщение shkarbatov »

Тогда, судя по тому, что у меня в контроллере формируется ряд views, и один из них виджет, а потом делается renderPartial, то я так понимаю layout~а не будет?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Assets в widget

Сообщение maleks »

да вас спрашивают на странице есть этот скрипт подключенный или нет?
Исходный код => Ctrl+F => 'ivr.js'
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Assets в widget

Сообщение maleks »

ну и сразу вдогонку, моменты:
1) вы в виеве виджета пишете:

Код: Выделить всё

IvrAsset::register($this); 
Тут сходу неуверен, но $this в шаблоне виджета, это что - виджет или виев? Если виджет, то может тогда - $this->view. Вот из доков:
If you are registering an asset bundle in other places, you should provide the needed view object. For example, to register an asset bundle in a widget class, you can get the view object by $this->view.
2) У вас:

Код: Выделить всё

public $sourcePath = '@webroot'; 
А в доках:

Код: Выделить всё

sourcePath: specifies the root directory that contains the asset files in this bundle. This property should be set if the root directory is not Web accessible. Otherwise, you should set the basePath property and baseUrl, instead. Path aliases can be used here. 
Т.е. вам вместо soursePath надо писать:

Код: Выделить всё

    public $basePath = '@webroot';
    public $baseUrl = '@web'; 
shkarbatov
Сообщения: 423
Зарегистрирован: 2012.12.10, 14:19
Откуда: Россия

Re: Assets в widget

Сообщение shkarbatov »

maleks писал(а):да вас спрашивают на странице есть этот скрипт подключенный или нет?
Исходный код => Ctrl+F => 'ivr.js'
shkarbatov писал(а):Возвращает - <div>Test</div>
Подключаемых скриптов в нем нет.
maleks писал(а):ну и сразу вдогонку, моменты:
1) вы в виеве виджета пишете:
IvrAsset::register($this);

Тут сходу неуверен, но $this в шаблоне виджета, это что - виджет или виев? Если виджет, то может тогда - $this->view. Вот из доков:
If you are registering an asset bundle in other places, you should provide the needed view object. For example, to register an asset bundle in a widget class, you can get the view object by $this->view.
$this в виджете - инстанс yii\web\View, так что тут все ок.
maleks писал(а):2) У вас:
public $sourcePath = '@webroot';

А в доках:
sourcePath: specifies the root directory that contains the asset files in this bundle. This property should be set if the root directory is not Web accessible. Otherwise, you should set the basePath property and baseUrl, instead. Path aliases can be used here.

Т.е. вам вместо soursePath надо писать:
public $basePath = '@webroot';
public $baseUrl = '@web';
Тут Вы правы - поправил. Но проблему это не решит.

Как я понял, ассеты подключаются в layout, а у меня render_partial, то есть layout~а - нет
shkarbatov
Сообщения: 423
Зарегистрирован: 2012.12.10, 14:19
Откуда: Россия

Re: Assets в widget

Сообщение shkarbatov »

Пробовал через registerJsFile, но тоже скрипт не подключается.

Код: Выделить всё

$this->registerJsFile('@webroot/otp.js', ['position' => yii\web\View::POS_END]); 
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Assets в widget

Сообщение maleks »

Возвращает - <div>Test</div>
Подключаемых скриптов в нем нет.
Так это что - весь контент страницы? Или какой нибудь аякс ответ?
shkarbatov
Сообщения: 423
Зарегистрирован: 2012.12.10, 14:19
Откуда: Россия

Re: Assets в widget

Сообщение shkarbatov »

Да, это тест.

В контроллере я делаю вот так:

Код: Выделить всё

$views = ConfirmWidget::widget(['phone' => $phone, 'operation' => 'payment']);
return ['status' => 'ok', 'views' => $views]; 
Вот код из виджета:

Код: Выделить всё

namespace app\modules\confirm\widgets\confirm;

use Yii;
use yii\base\Widget;
use app\modules\confirm\assets\IvrAsset;

class ConfirmWidget extends Widget
{
    public $phone;
    public $operation;

    public function run()
    {
        return $this->render(
            'ivr',
            ['phone' => $this->phone, 'operation' => $this->operation]
        );
    } 
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Assets в widget

Сообщение maleks »

shkarbatov писал(а):Да, это тест.
Это был ответ на какой из вопросов? :lol:
maleks писал(а):Так это что - весь контент страницы? Или какой нибудь аякс ответ?
p.s. renderAjax, не?
shkarbatov
Сообщения: 423
Зарегистрирован: 2012.12.10, 14:19
Откуда: Россия

Re: Assets в widget

Сообщение shkarbatov »

maleks писал(а):p.s. renderAjax, не?
В виджете?
maleks писал(а):Это был ответ на какой из вопросов? :lol:
maleks писал(а):Так это что - весь контент страницы? Или какой нибудь аякс ответ?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Assets в widget

Сообщение maleks »

я умываю руки пытаться понять что вам надо, на вопросы вы не отвечаете или отвечаете какую то ерунду.
shkarbatov
Сообщения: 423
Зарегистрирован: 2012.12.10, 14:19
Откуда: Россия

Re: Assets в widget

Сообщение shkarbatov »

maleks писал(а):я умываю руки пытаться понять что вам надо, на вопросы вы не отвечаете или отвечаете какую то ерунду.
Простите, но на какой вопрос я не ответил, или кинул ерунду?
maleks писал(а):Так это что - весь контент страницы? Или какой нибудь аякс ответ?
Я ответил, что это весь ответ, так как шаблон тестовый. Я указал в нем только один div и пытаюсь подключить скрипты.
Виджет возвращает view в контроллер.
maleks писал(а):p.s. renderAjax, не?
Я переспросил, где именно использовать, в виджете или контроллере проекта?
Если что, у меня виджет возвращает view в контроллер, который в свою очередь добавляет к нему другие view и все это выводится в формате json на клиента.

Я думал, что ответил на Ваши вопросы.
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Assets в widget

Сообщение Onotole »

Выводить нужно весь layout
shkarbatov
Сообщения: 423
Зарегистрирован: 2012.12.10, 14:19
Откуда: Россия

Re: Assets в widget

Сообщение shkarbatov »

Что для виджета является всем layout?
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Assets в widget

Сообщение Onotole »

shkarbatov писал(а):

Код: Выделить всё

namespace app\modules\confirm\widgets\confirm;

use Yii;
use yii\base\Widget;

class ConfirmWidget extends Widget
{
    public $phone;

    public $operation;

    public function run()
    {
        return $this->render(
            'ivr',
            ['phone' => $this->phone, 'operation' => $this->operation]
        );
    }
 
А где тут вообще ваш ExerciseAsset?
Закрыто