From fea43457e081bd87c21f10caf5cd44d20b7dd07d Mon Sep 17 00:00:00 2001 From: Josh Gulledge Date: Thu, 21 Jan 2016 14:10:03 -0500 Subject: [PATCH 01/10] fixes #26, add basic debug option --- .../snippets/simplesearch.snippet.php | 67 +++++++++++++++++-- 1 file changed, 63 insertions(+), 4 deletions(-) diff --git a/core/components/simplesearch/elements/snippets/simplesearch.snippet.php b/core/components/simplesearch/elements/snippets/simplesearch.snippet.php index 37be7b7..1280fd6 100755 --- a/core/components/simplesearch/elements/snippets/simplesearch.snippet.php +++ b/core/components/simplesearch/elements/snippets/simplesearch.snippet.php @@ -38,20 +38,30 @@ $searchIndex = $modx->getOption('searchIndex',$scriptProperties,'search'); $toPlaceholder = $modx->getOption('toPlaceholder',$scriptProperties,false); $noResultsTpl = $modx->getOption('noResultsTpl',$scriptProperties,'SearchNoResults'); +$debug = (bool)$modx->getOption('debug', $scriptProperties, false); +$debug_output = ''; /* get search string */ if (empty($_REQUEST[$searchIndex])) { $output = $search->getChunk($noResultsTpl,array( 'query' => '', )); - return $search->output($output,$toPlaceholder); + + if ( $debug ) { + $debug_output .= '
No search in the URL request for searchIndex: '.$searchIndex; + } + return $debug_output.$search->output($output,$toPlaceholder); } $searchString = $search->parseSearchString($_REQUEST[$searchIndex]); if (!$searchString) { $output = $search->getChunk($noResultsTpl,array( 'query' => $searchString, )); - return $search->output($output,$toPlaceholder); + + if ( $debug ) { + $debug_output .= '
Search string was empty after parsing & sanitizing for searchIndex: '.$searchIndex; + } + return $debug_output.$search->output($output,$toPlaceholder); } /* setup default properties */ @@ -85,9 +95,15 @@ $placeholders = array('query' => $searchString); $resultsTpl = array('default' => array('results' => array(),'total' => $response['total'])); if (!empty($response['results'])) { + if ( $debug ) { + $debug_output .= '
Begin iterate through search results'; + } /* iterate through search results */ foreach ($response['results'] as $resourceArray) { $resourceArray['idx'] = $idx; + if ( $debug ) { + $debug_output .= '
Search found resource ID: '.$resourceArray['id']; + } if (empty($resourceArray['link'])) { $ctx = !empty($resourceArray['context_key']) ? $resourceArray['context_key'] : $modx->context->get('key'); $args = ''; @@ -113,10 +129,17 @@ $resultsTpl['default']['results'][] = $search->getChunk($tpl,$resourceArray); $idx++; } +} else { + if ( $debug ) { + $debug_output .= '
No search results for search term'; + } } /* load postHooks to get faceted results */ if (!empty($postHooks)) { + if ($debug) { + $debug_output .= '
Post hooks found'; + } $limit = !empty($facetLimit) ? $facetLimit : $perPage; $search->loadHooks('post'); $search->postHooks->loadMultiple($postHooks,$response['results'],array( @@ -128,16 +151,29 @@ )); if (!empty($search->postHooks->facets)) { foreach ($search->postHooks->facets as $facetKey => $facetResults) { + + if ($debug) { + $debug_output .= '
Facet key: '.$facetKey; + } if (empty($resultsTpl[$facetKey])) { $resultsTpl[$facetKey] = array(); $resultsTpl[$facetKey]['total'] = $facetResults['total']; $resultsTpl[$facetKey]['results'] = array(); + if ($debug) { + $debug_output .= ' - results have not yet been added'; + } } else { - $resultsTpl[$facetKey]['total'] = $resultsTpl[$facetKey]['total'] = $facetResults['total']; + $resultsTpl[$facetKey]['total'] = $facetResults['total']; + if ($debug) { + $debug_output .= ' - results have already been added: '.$resultsTpl[$facetKey]['total']; + } } $idx = !empty($resultsTpl[$facetKey]) ? count($resultsTpl[$facetKey]['results'])+1 : 1; foreach ($facetResults['results'] as $r) { + if ($debug) { + $debug_output .= '
'.$facetKey.' results # '.$idx; + } $r['idx'] = $idx; $fTpl = !empty($scriptProperties['tpl'.$facetKey]) ? $scriptProperties['tpl'.$facetKey] : $tpl; $resultsTpl[$facetKey]['results'][] = $search->getChunk($fTpl,$r); @@ -145,6 +181,10 @@ } } } +} else { + if ($debug) { + $debug_output .= '
No post hooks found'; + } } /* set faceted results to placeholders for easy result positioning */ @@ -155,12 +195,21 @@ $placeholders[$facetKey.'.total'] = !empty($facetResults['total']) ? $facetResults['total'] : 0; $placeholders[$facetKey.'.key'] = $facetKey; } +if ($debug) { + $debug_output .= '
Active facet: '.$activeFacet; +} $placeholders['results'] = $placeholders[$activeFacet.'.results']; /* set active facet results */ $placeholders['total'] = !empty($resultsTpl[$activeFacet]['total']) ? $resultsTpl[$activeFacet]['total'] : 0; $placeholders['page'] = isset($_REQUEST[$offsetIndex]) ? ceil(intval($_REQUEST[$offsetIndex]) / $perPage) + 1 : 1; $placeholders['pageCount'] = !empty($resultsTpl[$activeFacet]['total']) ? ceil($resultsTpl[$activeFacet]['total'] / $perPage) : 1; +if ($debug) { + $debug_output .= '
Active facet total: '.$placeholders['total'].' Page: '.$placeholders['page'].' Page count: '.$placeholders['page']; +} if (!empty($response['results'])) { + if ($debug) { + $debug_output .= '
Results found for simple search, add highlighting and pagination'; + } /* add results found message */ $placeholders['resultInfo'] = $modx->lexicon('sisea.results_found',array( 'count' => $placeholders['total'], @@ -170,6 +219,10 @@ if ($perPage > 0) { $placeholders['paging'] = $search->getPagination($searchString,$perPage,$pagingSeparator,$placeholders['total']); } +} else { + if ($debug) { + $debug_output .= '
No Results found for simple search'; + } } $placeholders['query'] = $searchString; $placeholders['facet'] = $activeFacet; @@ -182,7 +235,13 @@ $output = $search->getChunk($noResultsTpl,array( 'query' => $searchString, )); + if ($debug) { + $debug_output .= '
No results send to: '.$noResultsTpl.' Chunk'; + } } else { + if ($debug) { + $debug_output .= '
Results found send to: '.$containerTpl.' Chunk'; + } $output = $search->getChunk($containerTpl,$placeholders); } -return $search->output($output,$toPlaceholder); \ No newline at end of file +return $debug_output.$search->output($output,$toPlaceholder); \ No newline at end of file From c8f368b678d4a8aeeaa8d72164f8cc98da0c897e Mon Sep 17 00:00:00 2001 From: Josh Gulledge Date: Thu, 21 Jan 2016 15:10:08 -0500 Subject: [PATCH 02/10] fixes #28, Facet pagination --- .../snippets/simplesearch.snippet.php | 93 +++++++++++-------- 1 file changed, 53 insertions(+), 40 deletions(-) diff --git a/core/components/simplesearch/elements/snippets/simplesearch.snippet.php b/core/components/simplesearch/elements/snippets/simplesearch.snippet.php index 1280fd6..5ddf601 100755 --- a/core/components/simplesearch/elements/snippets/simplesearch.snippet.php +++ b/core/components/simplesearch/elements/snippets/simplesearch.snippet.php @@ -85,57 +85,62 @@ $postHooks = $modx->getOption('postHooks',$scriptProperties,''); $activeFacet = $modx->getOption('facet',$_REQUEST,$modx->getOption('activeFacet',$scriptProperties,'default')); $activeFacet = $modx->sanitizeString($activeFacet); +$onlyFacet = $modx->getOption('onlyFacet', $scriptProperties, null); $facetLimit = $modx->getOption('facetLimit',$scriptProperties,5); $outputSeparator = $modx->getOption('outputSeparator',$scriptProperties,"\n"); $addSearchToLink = intval($modx->getOption('addSearchToLink',$scriptProperties,"0")); $searchInLinkName = $modx->getOption('searchInLinkName',$scriptProperties,"search"); /* get results */ -$response = $search->getSearchResults($searchString,$scriptProperties); -$placeholders = array('query' => $searchString); -$resultsTpl = array('default' => array('results' => array(),'total' => $response['total'])); -if (!empty($response['results'])) { - if ( $debug ) { - $debug_output .= '
Begin iterate through search results'; - } - /* iterate through search results */ - foreach ($response['results'] as $resourceArray) { - $resourceArray['idx'] = $idx; - if ( $debug ) { - $debug_output .= '
Search found resource ID: '.$resourceArray['id']; +if ( !is_null($onlyFacet) && $onlyFacet != 'default' ) { + $activeFacet = $onlyFacet; +} else { + $response = $search->getSearchResults($searchString, $scriptProperties); + $placeholders = array('query' => $searchString); + $resultsTpl = array('default' => array('results' => array(), 'total' => $response['total'])); + if (!empty($response['results'])) { + if ($debug) { + $debug_output .= '
Begin iterate through search results'; } - if (empty($resourceArray['link'])) { - $ctx = !empty($resourceArray['context_key']) ? $resourceArray['context_key'] : $modx->context->get('key'); - $args = ''; - if ($addSearchToLink) { - $args = array($searchInLinkName => $searchString); + /* iterate through search results */ + foreach ($response['results'] as $resourceArray) { + $resourceArray['idx'] = $idx; + if ($debug) { + $debug_output .= '
Search found resource ID: ' . $resourceArray['id']; } - $resourceArray['link'] = $modx->makeUrl($resourceArray['id'],$ctx,$args); - } - if ($showExtract) { - $extract = $searchString; - if (array_key_exists($extractSource, $resourceArray)) { - $text = $resourceArray[$extractSource]; - } else { - $text = $modx->runSnippet($extractSource, $resourceArray); + if (empty($resourceArray['link'])) { + $ctx = !empty($resourceArray['context_key']) ? $resourceArray['context_key'] : $modx->context->get('key'); + $args = ''; + if ($addSearchToLink) { + $args = array($searchInLinkName => $searchString); + } + $resourceArray['link'] = $modx->makeUrl($resourceArray['id'], $ctx, $args); + } + if ($showExtract) { + $extract = $searchString; + if (array_key_exists($extractSource, $resourceArray)) { + $text = $resourceArray[$extractSource]; + } else { + $text = $modx->runSnippet($extractSource, $resourceArray); + } + $extract = $search->createExtract($text, $extractLength, $extract, $extractEllipsis); + /* cleanup extract */ + $extract = strip_tags(preg_replace("#\