Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
5.4 kB
4
Indexable
<div id="searchResults">
    <?php
        $searchResultsFor = isset($this->templateVars['Search::ResultsFor']) ? $this->templateVars['Search::ResultsFor'] : $this->lang['searchResultsFor'];
        $searchResultFor = isset($this->templateVars['Search::ResultFor']) ? $this->templateVars['Search::ResultFor'] : $this->lang['searchResultFor'];
        $searchNoResultsFor = isset($this->templateVars['Search::NoResultsFor']) ? $this->templateVars['Search::NoResultsFor'] : $this->lang['noSearchResultsFor'];
        $localeCode = isset($this->locale['localeCode']) ? $this->locale['localeCode'] : '';
    ?>
    <?php if(!empty($this->searchResults)) : ?>
            <?php
                if (strpos($searchNoResultsFor, '%s') === false) {
                    $searchNoResultsFor = $searchNoResultsFor . '%s';
                }
                
                if (strpos($searchResultsFor, '%s') === false) {
                    $searchResultsFor = '%s' . $searchResultsFor . '%s';
                }
                
                if (strpos($searchResultFor, '%s') === false) {
                    $searchResultFor = $searchResultFor . '%s';
                }
            ?>
            <?php if(count($this->searchResults) > 1) : ?>
                <p><?=sprintf($searchResultsFor, count($this->searchResults), '"<em>' . $this->escape($this->keyword) . '</em>"')?></p>
            <?php else: ?>
                <p><?=sprintf($searchResultFor, '"<em>' . $this->escape($this->keyword) . '</em>"')?></p>
            <?php endif; ?>
            <?php
            $pageSize = 8;

            $currentPage = isset($this->request['p']) && (int) $this->request['p'] > 0 ? (int) $this->request['p'] : 1;
            $paginator = Zend_Paginator::factory($this->searchResults);
            $paginator->setItemCountPerPage($pageSize);

            $pageCount = $paginator->count();
            $currentPage = ($currentPage > $pageCount) ? $pageCount : $currentPage;
            $paginator->setCurrentPageNumber($currentPage);
            $pages = $paginator->getPages();
            
            $paginator->setView($this);
            ?>

            <?php if($pageCount > 1) : ?>
                <?=$this->paginationControl($paginator, null, '_pagination.phtml', array(
                    'request' => $this->request,
                    'keyword' => $this->keyword
                ))?>
            <?php endif;?>

            <?php foreach ($paginator->getCurrentItems() as $result) : ?>

            <?php 
                $body = trim($result['body']);
                
                $searchBody = '';
                $offset = 0;
                $hitLength = 100;
                $keywordLength = strlen($this->keyword);

                for($i = 0; $i < 3; $i++) {

                    if($offset > strlen($body)) {
                        break;
                    }
                    $offset = stripos($body, $this->keyword, $offset);
                    
                    if($offset === false) {
                        break;
                    }
                    $start = ($offset - ($hitLength / 2) > 0) ? (int) $offset - ($hitLength / 2) : 0;

                    $hitString = substr($body, $start, $hitLength);

                    $offset += $hitLength;

                    if($start !== 0) {
                        $hitString = substr($hitString, strpos($hitString, ' ') + 1); 

                        if($i === 0) {
                            $searchBody .= '...';
                        }
                    }
                    $searchBody .= $hitString;
                    if($offset < strlen($body)) {

                        $searchBody = substr($searchBody, 0, strrpos($searchBody, ' '));
                        $searchBody .= '&nbsp;...&nbsp;';
                    }
                }

                if(strlen($searchBody) == 0) {
                    $searchBody = substr($body, 0, 200);
                    if(200 < strlen($body)) {
                        $searchBody = substr($searchBody, 0, strrpos($searchBody, ' '));
                        $searchBody .= '&nbsp;...';
                    }
                }
            ?>
            <?php if (!empty($localeCode) && !empty($this->locales[1])) : ?>
                <p> 
                    <strong><a href="<?=$localeCode?>/<?=$result['url']?>" data-matches="<?=$result['matches']?>"><?=trim($result['title'])?></a></strong><br />
                    <?=preg_replace('#('.$this->escape($this->keyword).')#i', '<strong>$1</strong>', $searchBody)?>
                    <hr />
                </p>
            <?php else : ?>
                <p> 
                    <strong><a href="<?=$result['url']?>" data-matches="<?=$result['matches']?>"><?=trim($result['title'])?></a></strong><br />
                    <?=preg_replace('#('.$this->escape($this->keyword).')#i', '<strong>$1</strong>', $searchBody)?>
                    <hr />
                </p>
            <?php endif; ?>
        <?php endforeach; ?>
        <?php if($pageCount > 1) : ?>
            <?=$this->paginationControl( $paginator, null, '_pagination.phtml', array(
                'request' => $this->request,
                'keyword' => $this->keyword
            ))?>
        <?php endif;?>
    <?php else: ?>
        <p><?=sprintf($searchNoResultsFor, '"<em>' . $this->escape($this->keyword) . '</em>"')?></p>
    <?php endif; ?>
</div>