MODX разбирает функцию разбора ошибки (это я или modx?) - PullRequest
0 голосов
/ 31 мая 2010

Обновление от 4 июня 2010 года: похоже, что это ошибка в MODx v 1.0.3, не связанная с функцией выгрузки, а скорее проблема с несовпадающими типами данных в результирующем предложении фильтра. Ошибка была подана в JIRA: MODX-2035.

Привет, я не могу понять, возможно, кто-то может помочь.

При использовании MODX форма использует пользовательские критерии для создания фильтра и возврата списка документов. Форма представляет собой одно текстовое поле и несколько флажков. Если и текстовое поле и данные флажка размещены, функция работает нормально; если установлены только данные флажка, функция работает нормально; но если опубликованы только данные текстового поля, modx выдаст мне следующую ошибку:

Ошибка: implode () [function.implode]: переданы неверные аргументы.

Я проверил это за пределами modx с плоскими файлами, и все это прекрасно работает, заставляя меня предположить, что в modx существует ошибка. Но я не убежден. Вот мой код:

<?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 корректно развернут.

Любая помощь спасет мой компьютер от вылетания из окна.

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

Это действительно должно быть опубликовано на форумах MODx. Я люблю stackoverflow, но MODx больше нишу.

0 голосов
/ 31 мая 2010

Я думаю, что ваша проблема лежит здесь:

$dests_array = implode(', ',$dests_array); 

$dest_array может быть пустым и даже не инициализироваться, если $dests пусто.

...