Поиск по блогу

вторник, 8 декабря 2015 г.

Вариант подключения JavaScript в представлениях Yii

Стандартно в представление можно подключать как JavaScript файл так и JavaScript код. Используя внедрение JavaScript кода в представление можно очень просто внедрять PHP переменные. Однако сам код воспринимается редактором как обычный текст к которому, как он считает, нет смысла применять подсветку синтаксиса. Это досадное недоразумение можно легко обойти.

Напомню, стандартное подключение JS выглядит так:

$js = "
   $('.field').val('".Yii::t('main', 'Это поле ввода')."');
";

Yii::app()->clientScript->registerScript('my-script', $js, CClientScript::POS_END);

или так

Yii::app()->clientScript->registerScript('my-script', "
 
 $('.field').val('".Yii::t('main', 'Это поле ввода')."');
 
 ", CClientScript::POS_END);

Повторюсь: в данном случае JavaScript код по сути есть текст и подсветка синтаксиса к нему не применяется. Но, как уже отмечалось ранее, здесь есть одно неоспоримое преимущество - это простое внедрение PHP кода в JavaScript .
А для того, чтобы редактор подсвечивал синтаксис JS достаточно поместить его в файл .js.  При этом внедрение PHP переменных становится затруднительным.
Идея заключается в том, чтобы объединить оба условия и сделать так, чтобы была подсветка кода и несложная передача данных из PHP.

JavaScript код мы переносим в .js файл и подключаем в представлении, а перед подключением файла подключаем текст JavaScript и определяем в нем передаваемые из PHP переменные:

// Определяем переменные
$forlogin = "
   var php_myfield = '".Yii::t('main', 'Это поле ввода')."';
";
// Подключаем JavaScrpt код
Yii::app()->clientScript->registerScript('to-login', $forlogin, CClientScript::POS_END);
// Подключаем JavaScript файл
Yii::app()->clientScript->registerScriptFile(Yii::app()->theme->baseUrl . '/js/site/login.js', CClientScript::POS_END);

Содержимое файла login.js
$('.field').val(php_myfield);

Мы располагаем файл login.js не в каталоге themes/mytheme/assets/js, а в отдельном каталоге themes/mytheme/js. Этот код будет использоваться только с данным конкретным представлением и по этому будет подгружаться только во время вывода представления.
Для удобства можно повторить структуру каталогов view, как это принято и расположть наш файл login.js в каталоге themes/mytheme/js/sites, если соответствующее представление находится в каталоге themes/mytheme/view/sites

Комментариев нет :

Отправить комментарий

Есть что сказать - скажи