Вопрос по – Лучший способ глобальной регистрации ClientScript?

4

Я хочу зарегистрировать пользовательский скрипт по всему миру, чтобы он был доступен по всему сайту. Теперь я вставляю в каждое действие в моих контроллерах:

<code>Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
</code>

Но на самом деле я понимаю, что это не очень хорошо ...

Ваш Ответ

4   ответа
6

я бы поместил некоторые CSS и скрипты в файл макета (views/layouts/my-layout-file.php). Потому что, если вы меняете тему, вы будете использовать другой CSS, а иногда и другие сценарии, поэтому вы не захотите смешивать их вместе.

Но некоторые основные CSS и сценарии, которые не меняются по темам, я бы сказал в основномController (Защищенный / компоненты / Controller.php) И все остальные контроллеры (/ protected / controllers /) будут расширять этот класс Controller

class PageController extends Controller {

И поэтому, если все ваши контроллеры используют родительский класс, вы можете отредактировать только родительский класс и добавить что-то вроде этого

public function beforeRender( $view ) {
    ...
    Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
    ...
    return true;
}

И все ваши действия теперь будут выполняться по одному и тому же сценарию.

EDIT: @realtebo (в комментариях) указал на использование & apos;beforeRender& APOS; not 'beforeAction'.

Узнать больше:Понимание процесса визуализации представления

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

1. создать приватный атрибут $ _assetsUrl; 2. затем в модуль или контроллер

public function getAssetsUrl()
{
    if ($this->_assetsUrl===null)
    {
        $assetsPath = $this->basePath.DIRECTORY_SEPARATOR.'assets';
        $this->_assetsUrl = Yii::app()->assetManager->publish($assetsPath,false,-1,YII_DEBUG);
        if (Yii::app()->theme!==null && is_dir($assetsPath.DIRECTORY_SEPARATOR.Yii::app()->theme->name))
            $this->_assetsUrl .= DIRECTORY_SEPARATOR.Yii::app()->theme->name;
    }
    return $this->_assetsUrl;
}

Надеюсь, что это было полезно, см. Также эту ссылкуhttp://www.yiiframework.com/wiki/148/understanding-assets/

2

инициировать функцию init в базовом классе контроллера, имеющего защищенный путь / components / controller.php

public function init()
{
  Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js'); 
  parent::init();
}
2

что лучший способ зарегистрировать глобальные файлы js и css - это зарегистрировать их в методе beforeRender () (а не в beforeAction () - потому что если вы рендерите json или xml, это может разрушить вашу структуру) некоторого BaseController.

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