vendor/bundles/Pagerfanta/View/TwitterBootstrapView.php
author cavaliet
Fri, 21 Oct 2011 17:10:54 +0200
changeset 15 99ad73ef7385
permissions -rw-r--r--
first step for tag list and add Pagerfanta for paginator
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
     1
<?php
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
     2
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
     3
/*
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
     4
 * This file is part of the Pagerfanta package.
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
     5
 *
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
     6
 * (c) Pablo Díez <pablodip@gmail.com>
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
     7
 *
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
     8
 * For the full copyright and license information, please view the LICENSE
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
     9
 * file that was distributed with this source code.
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    10
 */
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    11
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    12
namespace Pagerfanta\View;
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    13
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    14
use Pagerfanta\PagerfantaInterface;
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    15
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    16
/**
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    17
 * TwitterBootstrapView.
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    18
 *
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    19
 * View that can be used with the pagination module 
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    20
 * from the Twitter Bootstrap CSS Toolkit
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    21
 * http://twitter.github.com/bootstrap/
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    22
 *
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    23
 * @author Pablo Díez <pablodip@gmail.com>
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    24
 * @author Jan Sorgalla <jsorgalla@gmail.com>
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    25
 *
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    26
 * @api
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    27
 */
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    28
class TwitterBootstrapView implements ViewInterface
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    29
{
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    30
    /**
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    31
     * {@inheritdoc}
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    32
     */
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    33
    public function render(PagerfantaInterface $pagerfanta, $routeGenerator, array $options = array())
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    34
    {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    35
        $options = array_merge(array(
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    36
            'proximity'           => 3,
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    37
            'prev_message'        => '&larr; Previous',
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    38
            'prev_disabled_href'  => '',
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    39
            'next_message'        => 'Next &rarr;',
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    40
            'next_disabled_href'  => '',
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    41
            'dots_message'        => '&hellip;',
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    42
            'dots_href'           => '',
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    43
            'css_container_class' => 'pagination',
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    44
            'css_prev_class'      => 'prev',
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    45
            'css_next_class'      => 'next',
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    46
            'css_disabled_class'  => 'disabled',
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    47
            'css_dots_class'      => 'disabled',
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    48
            'css_active_class'    => 'active',
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    49
        ), $options);
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    50
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    51
        $currentPage = $pagerfanta->getCurrentPage();
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    52
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    53
        $startPage = $currentPage - $options['proximity'];
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    54
        $endPage = $currentPage + $options['proximity'];
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    55
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    56
        if ($startPage < 1) {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    57
            $endPage = min($endPage + (1 - $startPage), $pagerfanta->getNbPages());
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    58
            $startPage = 1;
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    59
        }
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    60
        if ($endPage > $pagerfanta->getNbPages()) {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    61
            $startPage = max($startPage - ($endPage - $pagerfanta->getNbPages()), 1);
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    62
            $endPage = $pagerfanta->getNbPages();
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    63
        }
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    64
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    65
        $pages = array();
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    66
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    67
        // previous
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    68
        $class = $options['css_prev_class'];
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    69
        $url   = $options['prev_disabled_href'];
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    70
        if (!$pagerfanta->hasPreviousPage()) {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    71
            $class .= ' '.$options['css_disabled_class'];
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    72
        } else {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    73
            $url = $routeGenerator($pagerfanta->getPreviousPage());
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    74
        }
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    75
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    76
        $pages[] = sprintf('<li class="%s"><a href="%s">%s</a></li>', $class, $url, $options['prev_message']);
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    77
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    78
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    79
        // first
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    80
        if ($startPage > 1) {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    81
            $pages[] = sprintf('<li><a href="%s">%s</a></li>', $routeGenerator(1), 1);
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    82
            if (3 == $startPage) {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    83
                $pages[] = sprintf('<li><a href="%s">%s</a></li>', $routeGenerator(2), 2);
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    84
            } elseif (2 != $startPage) {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    85
                $pages[] = sprintf('<li class="%s"><a href="%s">%s</a></li>', $options['css_dots_class'], $options['dots_href'], $options['dots_message']);
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    86
            }
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    87
        }
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    88
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    89
        // pages
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    90
        for ($page = $startPage; $page <= $endPage; $page++) {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    91
            $class = '';
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    92
            if ($page == $currentPage) {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    93
                $class = sprintf(' class="%s"', $options['css_active_class']);
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    94
            }
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    95
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    96
            $pages[] = sprintf('<li%s><a href="%s">%s</a></li>', $class, $routeGenerator($page), $page);
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    97
        }
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    98
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
    99
        // last
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   100
        if ($pagerfanta->getNbPages() > $endPage) {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   101
            if ($pagerfanta->getNbPages() > ($endPage + 1)) {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   102
                if ($pagerfanta->getNbPages() > ($endPage + 2)) {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   103
                    $pages[] = sprintf('<li class="%s"><a href="%s">%s</a></li>', $options['css_dots_class'], $options['dots_href'], $options['dots_message']);
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   104
                } else {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   105
                    $pages[] = sprintf('<li><a href="%s">%s</a></li>', $routeGenerator($endPage + 1), $endPage + 1);
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   106
                }
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   107
            }
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   108
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   109
            $pages[] = sprintf('<li><a href="%s">%s</a></li>', $routeGenerator($pagerfanta->getNbPages()), $pagerfanta->getNbPages());
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   110
        }
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   111
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   112
        // next
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   113
        $class = $options['css_next_class'];
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   114
        $url   = $options['next_disabled_href'];
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   115
        if (!$pagerfanta->hasNextPage()) {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   116
            $class .= ' '.$options['css_disabled_class'];
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   117
        } else {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   118
            $url = $routeGenerator($pagerfanta->getNextPage());
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   119
        }
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   120
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   121
        $pages[] = sprintf('<li class="%s"><a href="%s">%s</a></li>', $class, $url, $options['next_message']);
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   122
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   123
        return sprintf('<div class="%s"><ul>%s</ul></div>', $options['css_container_class'], implode('', $pages));
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   124
    }
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   125
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   126
    /**
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   127
     * {@inheritdoc}
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   128
     */
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   129
    public function getName()
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   130
    {
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   131
        return 'twitter_bootstrap';
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   132
    }
99ad73ef7385 first step for tag list and add Pagerfanta for paginator
cavaliet
parents:
diff changeset
   133
}