$this->head() и $this->endBody()

всем привет

помогите разобраться с подключением своих CSS и JS файлов

в основном шаблоне есть два вызовы, которые не совсем понятны


<?php $this->beginBody() ?>

<?php $this->head() ?>

<?php $this->endBody() ?>

$this->head(), видимо, отвечает за подключение css-файлов после title


<link href="/assets/32ef74af/css/bootstrap.css" rel="stylesheet">

<link href="/css/site.css" rel="stylesheet"></head>

а $this->endBody(), видимо, за подключение js-файлов перед </body>


<script src="/assets/91f715a2/jquery.js"></script>

<script src="/assets/75b54071/yii.js"></script>

<script src="/assets/32ef74af/js/bootstrap.js"></script>

вопрос: как манипулировать подключаемыми css и js файлами?

например:

  • как подключить свой bootstrap.css вместо родного используя $this->head()

  • как подключать свои js-файлы используя $this->endBody()

ай нид ё хэлп

В yii2 это все делается через ассеты.

http://www.yiiframework.com/doc-2.0/guide-structure-assets.html

Ну собственно как у меня например:




//layout

<?php

    use yii\helpers\Html;

    use app\assets\MainAsset;

    /**

     * @var \yii\web\View $this

     * @var string $content

     */

    MainAsset::register($this);

?>

<?php $this->beginPage() ?>

...


//asset

<?php

    namespace app\assets;


    use yii\web\AssetBundle;


    class MainAsset extends AssetBundle

    {

        public $basePath = '@webroot';

        public $baseUrl = '@web';


        public $css = [

            ...

        ];


        public $js = [];


        public $depends = [

            'yii\web\YiiAsset',

            'yii\bootstrap\BootstrapAsset',

        ];


        public function init(){

            if (YII_ENV_DEV){

                $this->js = [

                    ...

                ];

            } else {

                $this->js = [

                    ...

                ];

            }

            parent::init();

        }

    }



P.S. как то у меня не получилось автоматом разделить dev и прод скрипты, может кто подскажет. Собственно на фронтенде ангулар, скрипты через bower.

спасибо

сейчас попробую

все оказалось еще проще - в корне уже есть директория assets

в которой лежит класс AppAsset

там можно подключить все…

но вот тема НЕ подключения родных css и js

и очередность отображения js в подвале

все равно не ясна

  1. Насчет родных:



public $depends = [

            'yii\web\YiiAsset',

            'yii\bootstrap\BootstrapAsset',

        ];



У вас какраз и есть подключение родных скриптов.

  1. Очередность такая как указана в массиве (у меня так).

А вообще интересен вопрос еще насчет dev - prod, если найдете или кто сможет помочь буду рад, так как мой костыль выглядит жутко на самом деле (40+ скриптов все таки).

чую, что подключенные в рукопашную файлы куда управляемее…

без


<?php $this->beginBody() ?>

<?php $this->head() ?>

<?php $this->endBody() ?>

да будет так!




<?php $this->beginBody() ?>

<?php $this->head() ?>

<?php $this->endBody() ?>



Нужны, для вывода по позиции и прочего. Но вот систему бандлов и ассетов я счел не совсем удобной.

Например у меня есть 50+ скриптов для дев и 40+ для прода.

По сути нужно сделать 2 файла, подключить их в конфиге как




'assetManager' => [

            'bundles' => require(__DIR__ . '/' . (YII_ENV_PROD ? 'assets-prod.php' : 'assets-dev.php')),  

        ],



и затем уже в самом ассете делать depends на бандл.

Ну да ладно, мысли вслух.

сорри за оффтоп - с виджетами разобрался

По дефолту путь к вьюшкам будет WidgetPath/views, тоесть если рендерите из widgets/views - то сам класс виджета должен лежать в widgets.