最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【基本解决】ddblock Advance Slideshow error:warning: Invalid argument supplied for foreach() in XXXddblock-cycle-block-content-upright20.tpl.php on line 47

Drupal crifan 1680浏览 0评论

【基本解决】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.看到这里:

http://drupal.org/node/515520

说,诡异的是,删除掉那个ddblock,结果却又能显示了。

而我这里试了试,发现也是同样的诡异的事情,把我刚刚按照教程去建立的那个ddblock删除掉,然后果然就能正确显示了。。日啊。。。

和之前这个:

【已解决】Drupal:ddblock(Dynamic Display Block)的图片显示不出来

遇到的问题基本类似,也是折腾了N年,都无法显示,但是删除掉之后,却能显示了。。。

5.像

http://drupal.org/node/515520

中的“

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.像:

http://drupal.org/node/515520

中说的:

#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) {
drupal_set_message(‘<pre>’ . var_export($vars[‘settings’][‘view_name’], true) . ‘</pre>’);
drupal_set_message(‘<pre>’ . var_export($vars[‘content’][0], true) . ‘</pre>’);

  if ($vars[‘output_type’] == ‘view_fields’) {
    $content = array();

。。。。

   结果去清除缓存后,结果那个ddblock就可以显示了:

【部分解决】ddblock Advance Slideshow error:warning: Invalid argument supplied for foreach() in XXXddblock-cycle-block-content-upright20.tpl.php on line 47 - carifan - work and job

 

  同时,页面最上面,也显示出对应的debug信息了:

【未解决】ddblock Advance Slideshow error:warning: Invalid argument supplied for foreach() in XXXddblock-cycle-block-content-upright20.tpl.php on line 47 - carifan - work and job

但是还是很诡异和搞笑的是,还是不知道具体何种原因,导致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) {
drupal_set_message(‘<pre>’ . var_export($vars[‘settings’][‘view_name’], true) . ‘</pre>’);
drupal_set_message(‘<pre>’ . var_export($vars[‘content’][0], true) . ‘</pre>’);

if ($vars[‘output_type’] == ‘view_fields’) {
$content = array();

。。。。

然后,的确就如

http://drupal.org/node/515520

中的 #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' =&gt; '444444444444444',     'node_data_field_pager_item_text_field_pager_item_text_value' =&gt; '4444444444',     'node_type' =&gt; 'ddblock_news_item',     'nid' =&gt; '29',     'node_vid' =&gt; '29',     'node_data_field_pager_item_text_field_slide_text_value' =&gt; '444444444444',     'node_data_field_pager_item_text_field_image_fid' =&gt; '7',     'node_data_field_pager_item_text_field_image_list' =&gt; '1',     'node_data_field_pager_item_text_field_image_data' =&gt; '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' =&gt; '444444444444444444444444',     'node_revisions_format' =&gt; '2',     'node_created' =&gt; '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输出的是类似于这样的信息:

    【未解决】ddblock Advance Slideshow error:warning: Invalid argument supplied for foreach() in XXXddblock-cycle-block-content-upright20.tpl.php on line 47 - carifan - work and job

    drupal_set_message输出的是类似于这样的信息:

    【基本解决】ddblock Advance Slideshow error:warning: Invalid argument supplied for foreach() in XXXddblock-cycle-block-content-upright20.tpl.php on line 47 - carifan - work and job

     

    另外,经过尝试发现,对于输出的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

    发表我的评论
    取消评论

    表情

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址
    81 queries in 0.168 seconds, using 22.01MB memory