Лучший способ реализовать константы PHP в Javascript - PullRequest
1 голос
/ 09 марта 2012

Итак, я использую Codeignitor и пытаюсь найти лучший способ поделиться своими константами с моим javascript аккуратным и понятным способом.

1) в представлении я мог бы выводить на экран мои переменные как мой нижний колонтитул (yuuuck!) 2) Я мог бы разобрать частичное представление, которое содержит шаблон для javascript, и вставить это на мой взгляд (возможно?) 3) Я мог бы динамически создать файл javascript, такой как myJavascript.js.php, и включить его в свой заголовок.

Каков наилучший поддерживаемый способ внедрения PHP в JS в среде MVC?

Ответы [ 5 ]

2 голосов
/ 09 марта 2012

Для того, чтобы мои переменные были аккуратно упакованы, я использую объект JSON - таким образом я не буду сталкиваться с проблемами с кодировкой, косой чертой, необходимостью вручную обновлять JavaScript для каждой добавляемой мной переменной ...

$variables_to_view['js_variables']['var_name'] = $var_name;

затем передайте его на просмотр

php_variables = <?php echo json_encode($js_variables) ?>;
alert(php_variables.var_name);
1 голос
/ 09 марта 2012

Вы можете использовать короткий тег, например:

Например: вы хотите использовать переменную $ abc в js, тогда вам нужно будет написать это в js

var abc = <?=$abc?>;
1 голос
/ 09 марта 2012

Вы можете создать php файл. Что-то вроде script.js.php? Outfor = 1;

 <?php
  header("Content-type:text/javascript"); //can be application/javascript.
 ?>

 ABC = <?php echo $abc?>
 CBA = <?php echo $cba?>
 BAC = <?php echo $bac?> //and so on.

Некоторая дополнительная информация. Если вы используете «var» в функции, эта переменная будет видна только в этой функции, а без «var» означает глобальный.

Итак.

function abc() 
{
  var a = 1; //only in abc()
  b=2;  //global
}
1 голос
/ 09 марта 2012

Кажется, нет ничего плохого в отображении ваших переменных в теге script. Фактически, фреймворки, такие как BackboneJS, поощряют делать это для данных, которые необходимо передать в свой код на стороне клиента.

0 голосов
/ 09 января 2014

Я знаю, что с точки зрения навыков программирования это не самое лучшее, но, наконец, это то, что я использую, и это работает. Короче говоря: я поместил все свои константы в XML-файл, и у меня есть этот маленький скрипт, который генерирует два отдельных файла с одинаковым содержимым, но разным синтаксисом. Я просто вставляю код со своими значениями. Если это кому-нибудь пригодится, я буду очень рад помочь. XML является самым простым из возможных; значение

<?php
define("GECOXML_PATH","../xml/geco.xml");
define("PHP_GECO_FN","../.includes/geco.php");
define("JS_GECO_FN","../js/geco.js");
echo "********   GECO (GEnerate COnstants files for PHP and JS) **********<br>";
echo "<br>";
echo "         input xml file: ". GECOXML_PATH."<br>";
echo "         output php file: ". PHP_GECO_FN."<br>";
echo "         output js file: ". JS_GECO_FN."<br>";
echo "********************************************************************<br>";

$geco = (object)xmlParse(GECOXML_PATH);
echo "<br>";
echo "<br>";
echo "************ PHP GECO ************* <br>";
echo "<br>";
$PHP =  gecoPHP($geco);
echo "<br>";
echo "<br>";
echo "************** JS GECO ************<br>";
echo "<br>";
$JS = gecoJS($geco);
writeFiles($PHP, $JS);

//****** Functions *********

function xmlParse ($url) {
        $fileContents= file_get_contents($url);
        $fileContents = str_replace(array("\n", "\r", "\t"), '', $fileContents);
        $fileContents = trim(str_replace('"', "'", $fileContents));
        return simplexml_load_string($fileContents);
    }

function writeFiles($PHPcontent, $JScontent)
{
            echo "<br> PhP ok:". file_put_contents(PHP_GECO_FN, $PHPcontent)  . "<br>";
            echo "<br> JS ok:" . file_put_contents(JS_GECO_FN, $JScontent) . "<br>";
}

function gecoPHP($gecoOBJ)
{
    foreach ($gecoOBJ as $key => $value)
    {
        if (is_numeric(str_replace(" ","",$value)))
            {
                $line = "define(\"" . $key . "\",". intval($value) .  ");\n";
            }
            else
            {
                $line = "define(\"" . $key . "\",\"". $value .  "\");\n";
            }
        $phpContent = $phpContent . $line;
     echo $line."<br>";
    }
   return "<?php\n"$phpContent."?>";
}

function gecoJS($gecoOBJ)
{
    foreach ($gecoOBJ as $key => $value)
    {
        if (is_numeric(str_replace(" ","",$value)))
            {
                $line = "var " . $key . "=". $value . ";\n";
            }
            else
            {
                $line = "var " . $key . "=\"". $value . "\";\n";
            }
        $JSContent =  $JSContent . $line;
    echo $line."<br>";
    }
   return $JSContent;
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...