【基本解决】ddblock Advance Slideshow error:warning: Invalid argument supplied for foreach() in XXXddblock-cycle-block-content-upright20.tpl.php on line 47
【问题背景】
ddblock的基本版本,即简单的图片轮播,已经可以work了。
现在在按照教程:
http://summapro.com/drupal-tutorials/ddblock-advance-slideshow-tutorial-an-alternative-guide
或者
http://edshadi.com/tutorial-create-advanced-ddblock/
来尝试高级版本的ddblock,结果所有的都按照教程做了之后,在将ddblock-News item slideshow的block放到footer之后,结果出错:
warning: Invalid argument supplied for foreach() in E:DrupalApache_rootApache Software FoundationApache2.2htdocsdrupal6themesgarlandcustommodulesddblockddblock-cycle-block-content-upright20.tpl.php on line 47.
【解决过程】
1.去这里:
http://ddblock.myalbums.biz/node/769
看到解释说是,原因是,node节点需要至少2个。但是我此处已经按照教程做了3个node的啊。
2。去清除了cache后,还是不行。
3.记不清某个地方说的了,是试了去把“Cycleblock”换成“default”后,结果那些news items就可以一个个显示出来了,但是是文字版的,从上到下排列的,而不是我们所期望的动态的效果。
4.看到这里:
说,诡异的是,删除掉那个ddblock,结果却又能显示了。
而我这里试了试,发现也是同样的诡异的事情,把我刚刚按照教程去建立的那个ddblock删除掉,然后果然就能正确显示了。。日啊。。。
和之前这个:
【已解决】Drupal:ddblock(Dynamic Display Block)的图片显示不出来
遇到的问题基本类似,也是折腾了N年,都无法显示,但是删除掉之后,却能显示了。。。
5.像
中的“
SOLUTION:
Just solved the problem!!!
When I import the Content type, by default the Nodes created are
unpublished. When I published the nodes it is ok.”
去将admin/content/types的News item中Workflow settings中“Default options”的设置为“ Published ”,然后重新新建几个news items,结果还是不行。只有删除掉,然后才可以显示。。。
6.像:
中说的:
#11中说的,将:
drupal_set_message(‘<pre>’ . var_export($vars[‘settings’][‘view_name’], true) . ‘</pre>’);
drupal_set_message(‘<pre>’ . var_export($vars[‘content’][0], true) . ‘</pre>’);
拷贝到preprocess函数中,变成这样的:
。。。 function garland_preprocess_ddblock_cycle_block_content(&$vars) { if ($vars[‘output_type’] == ‘view_fields’) { 。。。。 |
结果去清除缓存后,结果那个ddblock就可以显示了:
同时,页面最上面,也显示出对应的debug信息了:
但是还是很诡异和搞笑的是,还是不知道具体何种原因,导致ddblock不正常,以及debug信息无法显示出来的。
这里看起来还是很碰巧,无意间,就又正常了。。。杯具。。。
而且,及时去把上面两行drupal_set_message注释掉,重新清除所有cache,结果还是,不论打开哪个页面,都还是始终显示那个debug的信息,很是无语。
后来终于发现原因了,是由于我前面那会,参考这个帖子:
http://tiger-fish.com/blog/drupal-6-debugging-php-windows-eclipse-and-xdebug
去折腾了一下关于如何debug drupal,然后下载了对应的dll,即php_xdebug-2.1.1-5.2-vc6.dll放到了对应php的ext文件夹下,然后在php.ini中加入了下面这段代码:
zend_extension_ts = E:DrupalPHP_zipextphp_xdebug-2.1.1-5.2-vc6.dll xdebug.remote_enable=true xdebug.remote_host=127.0.0.1 ; if debugging on remote server, put client IP here xdebug.remote_port=9000 xdebug.remote_handler=dbgp |
所以,会一直有上面那个debug信息。
所以,重启apache服务,然后注释掉php.ini中上面xdebug的这段,即不启用xdebug,然后对应的debug信息就没有了。
但是为何之前此处高级图片轮播为何不工作,而此处先是开启了debug然后又关闭debug,结果高级图片轮播却又可以工作了,具体的根本原因,还是没找到啊。。。。汗。。。
【总结】
我也不知道如何解决的,只是折腾了一下如果去debug drupal,然后再关闭该debug,结果就可以工作了,很是诡异。。。。
【后记】
后来又试了试,在那个preprocess中添加对应的调试代码,变成这样:
。。。 function garland_preprocess_ddblock_cycle_block_content(&$vars) { if ($vars[‘output_type’] == ‘view_fields’) { 。。。。 |
然后,的确就如
中的 #11中说的,就可以显示对应的debug信息了,我的显示的信息是:
<font color="#008000">NULL</font> <font color="#008000">'sites/default/imgages/ddblock/3.jpg'</font> <font color="#008000">'news_items'</font> <font color="#008000">stdClass::__set_state(array( 'node_title' => '444444444444444', 'node_data_field_pager_item_text_field_pager_item_text_value' => '4444444444', 'node_type' => 'ddblock_news_item', 'nid' => '29', 'node_vid' => '29', 'node_data_field_pager_item_text_field_slide_text_value' => '444444444444', 'node_data_field_pager_item_text_field_image_fid' => '7', 'node_data_field_pager_item_text_field_image_list' => '1', 'node_data_field_pager_item_text_field_image_data' => 'a:12:{s:3:"fid";s:1:"7";s:5:"width";i:478;s:6:"height";i:303;s:8:"duration";i:0;s:12:"audio_format";s:0:"";s:17:"audio_sample_rate";i:0;s:18:"audio_channel_mode";s:0:"";s:13:"audio_bitrate";i:0;s:18:"audio_bitrate_mode";s:0:"";s:4:"tags";a:0:{}s:3:"alt";s:0:"";s:5:"title";s:0:"";}', 'node_revisions_body' => '444444444444444444444444', 'node_revisions_format' => '2', 'node_created' => '1306165000', ))</font> |
然后,又看了下代码,才明白其中的部分逻辑,其实就是,原先那些debug代码,都是放在garland_preprocess_ddblock_cycle_block_content中的if判断语句之后的,而我们遇到问题的人的网站中,遇到的问题估计都是,该if语句判断出错,所以,if中的dsm或者drupal_set_message,都无法运行了,所以,直接将drupal_set_message加到garland_preprocess_ddblock_cycle_block_content函数的最开始,直接执行,所以,只要此函数被运行了,那么肯定可以执行对应的drupal_set_message函数,打印我们所要的调试信息了。
还要提示一句的是,我这里也是启用了devel模块,但是drupal_set_message,仍然是可以正常使用输出信息的。
【总结】
看懂代码的逻辑,是解决问题的前提。
此处即直接向garland_preprocess_ddblock_cycle_block_content最开始,添加:
drupal_set_message(‘<pre>’ . var_export($vars[‘settings’][‘view_name’], true) . ‘</pre>’); drupal_set_message(‘<pre>’ . var_export($vars[‘content’][0], true) . ‘</pre>’); |
即可输出对应的debug信息。
这样的话,即使我们的高级图片轮播的功能运行出错,那么有了调试信息,自己看不懂,也可以贴出来给其他高手看,然后就很可能帮忙我们找到问题所在,就可以解决问题,以使得高级图片轮播可以正常运行了。
因此,即使功能运行不正常也不要紧,最关键的一点是,debug信息可以正常使用就好,就容易解决问题。
【小提示】
后来又去试了试debug信息的事情,才知道:
dsm输出的是类似于这样的信息:
drupal_set_message输出的是类似于这样的信息:
另外,经过尝试发现,对于输出的debug信息的话,即使去clear cache,也是无法清除的,必须冲洗apache服务器,才可以清除。
转载请注明:在路上 » 【基本解决】ddblock Advance Slideshow error:warning: Invalid argument supplied for foreach() in XXXddblock-cycle-block-content-upright20.tpl.php on line 47