葛老师,我在模块中有下面的语句 $opts = array( 'absolute' => true ); $json_url = url('philquotes.json', $opts); // drupal_add_js('var json_path = "' . $json_url . '";', 'inline'); drupal_add_js(array('philquotes' => array('json_url' => $json_url) ),'setting'); 但结果 <script type="text/javascript"> <!--//--><![CDATA[//><!-- jQuery.extend(Drupal.settings, null); //--><!]]> </script> 就是说setting失败,结果是null。
但是把上面的inline那条语句的注释去掉: $opts = array( 'absolute' => true ); $json_url = url('philquotes.json', $opts); drupal_add_js('var json_path = "' . $json_url . '";', 'inline'); drupal_add_js(array('philquotes' => array('json_url' => $json_url) ),'setting'); 结果inline方式执行正确: <script type="text/javascript"> <!--//--><![CDATA[//><!-- var json_path = "http://localhost/gofangke/philquotes.json"; //--><!]]> 不知怎么回事?
页面还出现警告: warning: array_merge_recursive() [function.array-merge-recursive]: Argument #5 is not an array in F:\wamp\www\gofangke\includes\common.inc on line 2279. 请葛老师诊断。
1,drupal_add_js
1,drupal_add_js ,如果所加的JS不是以文件的形式存在,比如:
drupal_add_js("
$(#hiddendivid).css('display','none');
",
'inline'
)
此时使用inline.
2,通常情况下,我们不使用inline的形式,如果有JS代码,那么就把它放在JS文件中。Inline适用于JS代码片断特别短的情况。但是即便是特别短的JS代码,最好也放在JS文件中,后者管理方便。
3,Argument #5 is not an array in 。这种情况很常见,比如现在的Drupal6网站,运行在php5.3的环境下,就会报这样的错误。潜在的原因很多,先排查一下PHP版本的兼容性。
4,向JS中设置变量,这个我还真没有在项目中用过,Drupal.settings。你再看看相关资料,
问题解决了
原来是在程序文档最开头插入的语句有错
<?php
global $base_path;
drupal_add_js('nid->$nid', 'setting');
?>
把drupal_add_js语句删除就没有警告提示了,而且Drupal.settings结果不是null了,而是有很多值的正常结果:
这里跟大家分享一个排错的方法,当找不到错误的时候,先把程序文件备份。然后,一大段一大段地删除程序块,精简代码,看看什么时候错误消失(注意,修改程序后,保存刷新,有时要刷新两次才生效,特别是在有警告错误的时候),然后,倒转回来,恢复程序代码,看看警告错误在什么地方会出现,这样就可以定位错误出现的位置了。
谢谢葛老师,谢谢大家。
我还没有研究那么深入呢,继续学习了大众物流
我还没有研究那么深入呢,继续学习了
大众物流