PagerModule::toString PHP Метод

toString() публичный Метод

Builds page navigation links.
public toString ( string $Type = 'more' ) : string
$Type string Type of link to return: 'more' or 'less'.
Результат string HTML page navigation links.
    public function toString($Type = 'more')
    {
        if ($this->_PropertiesDefined === false) {
            trigger_error(ErrorMessage('You must configure the pager with $Pager->configure() before retrieving the pager.', 'MorePager', 'GetSimple'), E_USER_ERROR);
        }
        // Urls with url-encoded characters will break sprintf, so we need to convert them for backwards compatibility.
        $this->Url = str_replace(array('%1$s', '%2$s', '%s'), '{Page}', $this->Url);
        if ($this->TotalRecords === false) {
            return $this->ToStringPrevNext($Type);
        }
        $this->CssClass = ConcatSep(' ', $this->CssClass, 'NumberedPager');
        // Get total page count, allowing override
        $PageCount = ceil($this->TotalRecords / $this->Limit);
        $this->EventArguments['PageCount'] =& $PageCount;
        $this->fireEvent('BeforePagerSetsCount');
        $this->_PageCount = $PageCount;
        $CurrentPage = PageNumber($this->Offset, $this->Limit);
        // Show $Range pages on either side of current
        $Range = c('Garden.Modules.PagerRange', 3);
        // String to represent skipped pages
        $Separator = c('Garden.Modules.PagerSeparator', '…');
        // Show current page plus $Range pages on either side
        $PagesToDisplay = $Range * 2 + 1;
        if ($PagesToDisplay + 2 >= $PageCount) {
            // Don't display an ellipses if the page count is only a little bigger that the number of pages.
            $PagesToDisplay = $PageCount;
        }
        $Pager = '';
        $PreviousText = t($this->LessCode);
        $NextText = t($this->MoreCode);
        // Previous
        if ($CurrentPage == 1) {
            $Pager = '<span class="Previous">' . $PreviousText . '</span>';
        } else {
            $Pager .= anchor($PreviousText, $this->PageUrl($CurrentPage - 1), 'Previous', array('rel' => 'prev'));
        }
        // Build Pager based on number of pages (Examples assume $Range = 3)
        if ($PageCount <= 1) {
            // Don't build anything
        } elseif ($PageCount <= $PagesToDisplay) {
            // We don't need elipsis (ie. 1 2 3 4 5 6 7)
            for ($i = 1; $i <= $PageCount; $i++) {
                $Pager .= anchor($i, $this->PageUrl($i), $this->_GetCssClass($i, $CurrentPage), array('rel' => self::Rel($i, $CurrentPage)));
            }
        } elseif ($CurrentPage + $Range <= $PagesToDisplay + 1) {
            // +1 prevents 1 ... 2
            // We're on a page that is before the first elipsis (ex: 1 2 3 4 5 6 7 ... 81)
            for ($i = 1; $i <= $PagesToDisplay; $i++) {
                $PageParam = 'p' . $i;
                $Pager .= anchor($i, $this->PageUrl($i), $this->_GetCssClass($i, $CurrentPage), array('rel' => self::Rel($i, $CurrentPage)));
            }
            $Pager .= '<span class="Ellipsis">' . $Separator . '</span>';
            $Pager .= anchor($PageCount, $this->PageUrl($PageCount), $this->_GetCssClass($PageCount, $CurrentPage));
        } elseif ($CurrentPage + $Range >= $PageCount - 1) {
            // -1 prevents 80 ... 81
            // We're on a page that is after the last elipsis (ex: 1 ... 75 76 77 78 79 80 81)
            $Pager .= anchor(1, $this->PageUrl(1), $this->_GetCssClass(1, $CurrentPage));
            $Pager .= '<span class="Ellipsis">' . $Separator . '</span>';
            for ($i = $PageCount - ($PagesToDisplay - 1); $i <= $PageCount; $i++) {
                $PageParam = 'p' . $i;
                $Pager .= anchor($i, $this->PageUrl($i), $this->_GetCssClass($i, $CurrentPage), array('rel' => self::Rel($i, $CurrentPage)));
            }
        } else {
            // We're between the two elipsises (ex: 1 ... 4 5 6 7 8 9 10 ... 81)
            $Pager .= anchor(1, $this->PageUrl(1), $this->_GetCssClass(1, $CurrentPage));
            $Pager .= '<span class="Ellipsis">' . $Separator . '</span>';
            for ($i = $CurrentPage - $Range; $i <= $CurrentPage + $Range; $i++) {
                $PageParam = 'p' . $i;
                $Pager .= anchor($i, $this->PageUrl($i), $this->_GetCssClass($i, $CurrentPage), array('rel' => self::Rel($i, $CurrentPage)));
            }
            $Pager .= '<span class="Ellipsis">' . $Separator . '</span>';
            $Pager .= anchor($PageCount, $this->PageUrl($PageCount), $this->_GetCssClass($PageCount, $CurrentPage));
        }
        // Next
        if ($CurrentPage == $PageCount) {
            $Pager .= '<span class="Next">' . $NextText . '</span>';
        } else {
            $PageParam = 'p' . ($CurrentPage + 1);
            $Pager .= anchor($NextText, $this->PageUrl($CurrentPage + 1), 'Next', array('rel' => 'next'));
            // extra sprintf parameter in case old url style is set
        }
        if ($PageCount <= 1) {
            $Pager = '';
        }
        $ClientID = $this->ClientID;
        $ClientID = $Type == 'more' ? $ClientID . 'After' : $ClientID . 'Before';
        if ($Pager) {
            if (isset($this->HtmlBefore)) {
                $Pager = $this->HtmlBefore . $Pager;
            }
            if (isset($this->HtmlAfter)) {
                $Pager = ' ' . $Pager . $this->HtmlAfter;
            }
        }
        return $Pager == '' ? '' : sprintf($this->Wrapper, Attribute(array('id' => $ClientID, 'class' => $this->CssClass)), $Pager);
    }