PHP в JavaScrpt

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
mitaichik
Сообщения: 512
Зарегистрирован: 2010.09.24, 21:18
Откуда: Россия, Санкт-Петербург

PHP в JavaScrpt

Сообщение mitaichik »

Всем привет) Вопрос такой: довольно часто приходиться в JavaScript вставлять код PHP, например для создания url аякс запросов.

Когда это делаешь в странице, никаких вопросов не возникает, но как быть, если его необходимо вынести в JS файл?

Есть ли в Yii какие-нить встроенные возможности по решению подобных проблем?
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: PHP в JavaScrpt

Сообщение pirrat »

1) можно вынести переменные в глобальную область, например в 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;
}
 
3) можно воспользоватся средствами yii для размещения в head глобальных переменных, и как в первом случае использовать их где надо:

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

       $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

Сообщение Svyatov »

pirrat, хохо... 2 и 3 - отличные варианты, возьму себе на заметку, спасибо!
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: PHP в JavaScrpt

Сообщение pirrat »

Ну и в добавок к 3 способу: можно расширить CClientScript:

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

    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')); 
в итоге в head получим:

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

<script type="text/javascript">
/*<![CDATA[*/
var var1 = "varValue1";
var var2 = ["arr1","arr2"];

/*]]>*/
</script>


derelict
Сообщения: 52
Зарегистрирован: 2010.09.15, 11:46
Откуда: Украина, Ильичевск

Re: PHP в JavaScrpt

Сообщение derelict »

Используй ООП, посмотри для примера как это реализовано, допустим в jquery.yiiactiveform.js.
Ответить