2010年6月4日更新:这似乎是MODx v 1.0.3中的一个错误,与内爆函数无关,而是在生成的过滤器子句中与错误匹配的数据类型有关。 Bug已经提交给JIRA:MODX-2035。
嗨,我不能为我的生活弄清楚这一点,也许有人可以提供帮助。
使用MODX,表单采用用户标准来创建过滤器并返回文档列表。表单是一个文本字段和几个复选框。如果同时发布文本字段和复选框数据,则该功能正常;如果仅发布复选框数据,则该功能正常;但如果仅发布文本字段数据,modx会给我以下错误:
错误:implode()[function.implode]:传递的参数无效。
我已经使用平面文件在modx之外测试了这个并且一切正常,导致我假设modx中存在一个bug。但我不相信。这是我的代码:
<?php
$order = array('price ASC'); //default sort order
if(!empty($_POST['tour_finder_duration'])){ //duration submitted
$days = htmlentities($_POST['tour_finder_duration']); //clean up post
array_unshift($order,"duration DESC"); //add duration sort before default
$filter[] = 'duration,'.$days.',4'; //add duration to filter[] (field,criterion,mode)
$criteria[] = 'Number of days: <strong>'.$days.'</strong>'; //displayed on results page
}
if(!empty($_POST['tour_finder_dests'])){ //destination/s submitted
$dests = $_POST['tour_finder_dests'];
foreach($dests as $value){ //iterate through dests array
$filter[] = 'searchDests,'.htmlentities($value).',7'; //add dests to filter[]
$params['docid'] = $value;
$params['field'] = 'pagetitle';
$pagetitle = $modx->runSnippet('GetField',$params);
$dests_array[] = '<a href="[~'.$value.'~]" title="Read more about '.$pagetitle.'" class="tourdestlink">'.$pagetitle.'</a>';
}
$dests_array = implode(', ',$dests_array);
$criteria[] = 'Destinations: '.$dests_array; //displayed on results page
}
if(is_array($filter)){
$filter = implode('|',$filter);//pipe-separated string
}
if(is_array($order)){
$order = implode(',',$order);//comma-separated string
}
if(is_array($criteria)){
$criteria = implode('<br />',$criteria);
}
echo '<br />Order: '.$order.'<br /> Filter: '.$filter.'<br /> Criteria: '.$criteria;
//next: extract docs using $filter and $order, display user's criteria using $criteria...
?>
echo语句显示在MODX错误消息上方,$ filter数组正确内爆。
任何帮助都可以防止我的电脑飞出窗外。
由于
答案 0 :(得分:0)
我认为你的问题在于:
$dests_array = implode(', ',$dests_array);
$dest_array
可能为空,如果$dests
为空,则无法初始化。
答案 1 :(得分:0)
这确实应该发布在MODx论坛上。我喜欢stackoverflow,但MODx更适合利基。