Всем привет) Вопрос такой: довольно часто приходиться в JavaScript вставлять код PHP, например для создания url аякс запросов.
Когда это делаешь в странице, никаких вопросов не возникает, но как быть, если его необходимо вынести в JS файл?
Есть ли в Yii какие-нить встроенные возможности по решению подобных проблем?
PHP в JavaScrpt
Re: PHP в JavaScrpt
1) можно вынести переменные в глобальную область, например в head прописать
и затем в своих скриптах пользоваться этими переменными.
2) можно написать js функции, например для формирования url:
3) можно воспользоватся средствами yii для размещения в head глобальных переменных, и как в первом случае использовать их где надо:
Код: Выделить всё
<script type='text/javascript'>
var var1 = '<?php echo $var1?>';
var var2 = '<?php echo $var2?>';
</script>
2) можно написать js функции, например для формирования url:
Код: Выделить всё
window.baseUrl = '/';
function createUrl(action, params)
{
var url = window.baseUrl+'?r='+action;
if(params && params.length> 0)
url+= '&'+jQuery.param(params);
return url;
}
Код: Выделить всё
$var1 = 'myVar';
$script = "var var1='$var1';";
Yii::app()->getClientScript()->registerScript('globalVars',$script,CClientScript::POS_HEAD);
- Svyatov
- Сообщения: 459
- Зарегистрирован: 2010.08.12, 14:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: PHP в JavaScrpt
pirrat, хохо... 2 и 3 - отличные варианты, возьму себе на заметку, спасибо!
Re: PHP в JavaScrpt
Ну и в добавок к 3 способу: можно расширить CClientScript:
а в контроллерах и вьюхаха вызывать так:
в итоге в head получим:
Код: Выделить всё
protected $globalJsVars = array();
public function registerGlobalVar($var, $value)
{
$this->globalJsVars[$var] = $value;
$this->registerGlobalVarsScript();
}
protected function registerGlobalVarsScript()
{
$script = '';
foreach ($this->globalJsVars as $key=>$value)
{
$val = CJavaScript::jsonEncode($value);
$script .= "var $key = $val;\n";
}
$this->registerScript('globalVars',$script,self::POS_HEAD);
}
Код: Выделить всё
Yii::app()->getClientScript()->registerGlobalVar('var1','varValue1');
Yii::app()->getClientScript()->registerGlobalVar('var2',array('arr1','arr2'));
Код: Выделить всё
<script type="text/javascript">
/*<![CDATA[*/
var var1 = "varValue1";
var var2 = ["arr1","arr2"];
/*]]>*/
</script>
Re: PHP в JavaScrpt
Используй ООП, посмотри для примера как это реализовано, допустим в jquery.yiiactiveform.js.