2010-05-31 11 views
0

Mise à jour 4-juin-2010: Cela semble être un bug dans MODx v 1.0.3, qui n'a rien à voir avec la fonction implosée mais plutôt un problème de mésaventure. les types de données correspondants dans la clause de filtre résultante. Le bug a été classé avec JIRA: MODX-2035.Fonction d'erreur d'analyse MODX implode (est-ce moi ou modx?)

Salut, je ne peux pas pour la vie de moi comprendre cela, peut-être que quelqu'un peut aider. En utilisant MODX, un formulaire prend des critères utilisateur pour créer un filtre et retourner une liste de documents. Le formulaire est un champ de texte et quelques cases à cocher. Si le champ de texte et les données de case à cocher sont affichés, la fonction fonctionne correctement; si seulement les données de case à cocher sont affichées la fonction fonctionne bien; mais si seulement les données du champ de texte est affiché, modx me donne l'erreur suivante:

Error: implode() [function.implode]: Invalid arguments passed.

Je l'ai testé ce en dehors de modx avec des fichiers plats et tout fonctionne bien me conduire à assumer un bogue existe dans modx. Mais je ne suis pas convaincu. Voici mon code:

<?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... 
?> 

L'instruction echo est affiché au-dessus du message d'erreur MODX et le réseau de filtres $ est correctement implosé.

Toute aide permettra à mon ordinateur de ne pas voler par la fenêtre.

Merci

+0

"modx" comme dans http://www.modxcms.de/? – VolkerK

+0

Oui, le CMS/Framework PHP. – Ian

+0

Et le message d'erreur contient-il un emplacement comme 'foo.php: 23'? Lequel des quatre implode() dans l'extrait de code provoque l'erreur? – VolkerK

Répondre

0

Je pense que votre problème est ici:

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

$dest_array peut être vide et même pas initialisé si $dests est vide.

+0

Salut @Arkh, même que ci-dessus ... a ajouté la vérification, mais cet appel n'est exécuté que si $ dests a été posté. – Ian

0

Cela devrait vraiment être publié sur les forums MODx. J'aime stackoverflow, mais MODx est plus niche.