Страница 1 из 1

CActiveForm & jquery.js & registerPackage

Добавлено: 2021.07.01, 19:12
Maxim Glushko
Виджет CActiveForm тянет за собой регистрацию файлов jquery.js и jquery.yiiactiveform.js

Если подключать через конфиг пакеты:

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

'clientScript' => [
    'packages' => [
        ...
        'ladda' => [
            'baseUrl' => '',
            'css' => [$themeUrl . 'ladda-bootstrap-master/dist/ladda-themeless.min.css'],
            'js' => [
                    $themeUrl . 'ladda-bootstrap-master/dist/spin.min.js',
                    ...
            ],
            'coreScriptPosition' => CClientScript::POS_HEAD,
            'depends' => ['base'],
        ],
    ],
        ...
],
... и потом их вызывать во вьюхе:

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

Yii::app()->clientScript->registerPackage('ladda')
... получается, что jquery.js и jquery.yiiactiveform.js подключаются последними в <head>. И все пакетные скрипты, требующие jquery, перестают работать, даже если подключить ещё раз jquery. На тех страницах, где нет CActiveForm, пакеты отрабатывают нормально.

Как в CActiveForm либо запретить регистрацию jquery.js, либо заставить его подключаться первым из скриптов в <head>?

Re: CActiveForm & jquery.js & registerPackage

Добавлено: 2021.07.02, 02:32
ElisDN
В 'depends' добавить 'jquery'

Re: CActiveForm & jquery.js & registerPackage

Добавлено: 2021.07.02, 09:10
Maxim Glushko
Спасибо!

Также попробовал за это время во вьюхе вставлять registerPackage просто после CActiveForm - сработало.
Но depends, конечно, чётче. Не подумал сразу, что в него можно и паков имена вставлять, и core.

Попутный вопрос: в yii1 можно паки оформить не в конфигах, а как-то изящнее, отдельными классами, как в yii2?

Re: CActiveForm & jquery.js & registerPackage

Добавлено: 2021.07.02, 10:39
ElisDN
Maxim Glushko писал(а): 2021.07.02, 09:10 Попутный вопрос: в yii1 можно паки оформить не в конфигах, а как-то изящнее, отдельными классами, как в yii2?
CClientScript работает только с массивами. Но наверное можно попробовать сделать базовый класс Asset implements ArrayAccess, который будет обращаться к полям через $this->$offset. Тогда в 'packages' прописывать 'ladda' => new LaddaAsset().