2012-03-09 64 views
1

所以我使用Codeignitor,我试图找出最佳方式与我的JavaScript以一种整洁可维护的方式共享我的常量。在Javascript中实现PHP常量的最佳方式

1)在视图中,我可以附和我的变量,就像我的页脚(yuuuck!) 2)我可以解析其中包含一个模板的javascript的局部视图和注入,在我看来(也许?) 3 )我可以动态创建一个像myJavascript.js.php这样的javascript文件,并将其包含在我的头文件中。

在MVC框架中将PHP实现成JS的最佳可维护方法是什么?

回答

2

为了保持我的变量很好地包裹着我使用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

+1 json_encode是为这个完美的。 – 2012-03-10 01:43:07

+0

很高兴知道谢谢! – 2012-03-13 16:07:50

1

在脚本标记中回显变量似乎没有任何问题。事实上,像BackboneJS这样的框架是encouraging,你需要将这些数据传递给客户端代码。

1

您可以使用短标签是这样的:

例如: 您想使用JS $ ABC变量,那么你就需要在JS

var abc = <?=$abc?>; 
+0

即使普通的PHP代码和回声会工作......而它在OP的问题 – 2012-03-09 17:50:45

+0

选项1),将工作,但我更喜欢这种方式的更得心应手地使用 – emphaticsunshine 2012-03-09 18:45:01

1

您可以创建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 
} 
0

我知道,在编程技巧方面,它不是最好的,但最后它是我用的,它的工作。简而言之:我将所有常量放在一个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; 
} 
?> 
+0

格式化时出错:So xml: user3161536 2014-01-09 19:44:09

相关问题