Skip to content

Commit e619fe2

Browse files
committed
Simplified funcionality
1 parent 99e922f commit e619fe2

File tree

3 files changed

+136
-280
lines changed

3 files changed

+136
-280
lines changed

Diff for: Extension/Twig/PaginationMetaExtension.php

+27-79
Original file line numberDiff line numberDiff line change
@@ -3,138 +3,86 @@
33
namespace Skuola\SeoBundle\Extension\Twig;
44

55
use Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination;
6-
use Symfony\Component\HttpFoundation\RequestStack;
6+
use Symfony\Component\Routing\Generator\UrlGenerator;
77
use Symfony\Component\Routing\RouterInterface;
88
use Symfony\Component\PropertyAccess\PropertyAccess;
9-
use Symfony\Component\HttpFoundation\Request;
109

1110
class PaginationMetaExtension extends \Twig_Extension
1211
{
12+
const NEXT = 'next';
13+
const PREV = 'prev';
14+
1315
/**
1416
* @var RouterInterface
1517
*/
1618
protected $router;
1719

1820
/**
19-
* @var null|Request
20-
*/
21-
protected $request;
22-
23-
/**
24-
* @var string
21+
* @var PropertyAccess
2522
*/
26-
protected $domain;
23+
protected $accessor;
2724

28-
public function __construct(RequestStack $requestStack, RouterInterface $router, $domain)
25+
public function __construct(RouterInterface $router)
2926
{
3027
$this->router = $router;
31-
$this->domain = $domain;
32-
$this->request = $requestStack->getMasterRequest();
28+
$this->accessor = PropertyAccess::createPropertyAccessor();
3329
}
3430

3531
public function getFunctions()
3632
{
3733
return [
3834
new \Twig_SimpleFunction('render_pagination_meta', [$this, 'renderPaginationMeta'], ['is_safe' => ['html']]),
39-
new \Twig_SimpleFunction('render_pagination_canonical', [$this, 'renderPaginationCanonical'], ['is_safe' => ['html']]),
40-
new \Twig_SimpleFunction('generate_pagination_robots_meta_tag', [$this, 'renderPaginationRobots'], ['is_safe' => ['html']]),
35+
new \Twig_SimpleFunction('render_pagination_robots', [$this, 'renderPaginationRobots'], ['is_safe' => ['html']]),
4136
];
4237
}
4338

44-
public function renderPaginationRobots($current_page_value)
39+
public function renderPaginationRobots(SlidingPagination $pagination)
4540
{
46-
$index_value = 'index'; $follow_value = 'follow';
41+
$index_value = 'index';
42+
$follow_value = 'follow';
4743

48-
if($current_page_value > 1){
44+
if($pagination->getCurrentPageNumber() > 1){
4945
$index_value = 'noindex';
5046
}
5147

5248
return sprintf('<meta name="robots" content="%s,%s" />', $index_value, $follow_value);
5349
}
5450

55-
public function renderPaginationCanonical($request, $query_string = true)
56-
{
57-
$canonical_url = $query_string ? $this->generateCanonicalUrl($request) : $request->getPathInfo();
58-
59-
return sprintf('<link href="%s" rel="canonical">', $canonical_url);
60-
}
61-
62-
public function renderPaginationMeta($items)
51+
public function renderPaginationMeta(SlidingPagination $pagination)
6352
{
64-
if (!$items instanceof SlidingPagination) {
65-
return;
66-
}
67-
68-
$paginationData = $items->getPaginationData();
69-
53+
$paginationData = $pagination->getPaginationData();
7054
$paginationMetas = '';
71-
$accessor = PropertyAccess::createPropertyAccessor();
7255

73-
$prev = (int) $accessor->getValue($paginationData, '[previous]');
74-
$next = (int) $accessor->getValue($paginationData, '[next]');
56+
$prev = (int) $this->accessor->getValue($paginationData, '[previous]');
57+
$next = (int) $this->accessor->getValue($paginationData, '[next]');
7558

7659
if ($prev !== 0) {
77-
$paginationMetas = $this->generateMeta('prev', $items, $prev);
60+
$paginationMetas = $this->generateMeta($pagination, self::PREV, $prev);
7861
}
7962

8063
if ($next !== 0) {
81-
$paginationMetas .= $this->generateMeta('next', $items, $next);
64+
$paginationMetas .= $this->generateMeta($pagination, self::NEXT, $next);
8265
}
8366

8467
return $paginationMetas;
8568
}
8669

87-
protected function generateMeta($direction, $items, $pageNumber)
70+
protected function generateMeta(SlidingPagination $pagination, $direction, $page)
8871
{
89-
$pageUrl = sprintf('http://%s%s', $this->domain, $this->request->getPathInfo());
72+
$routeInfo['name'] = $pagination->getRoute();
9073

91-
$queryString = [];
92-
parse_str($this->request->getQueryString(), $queryString);
93-
94-
if ($pageNumber <= 1) {
95-
if (array_key_exists('page', $queryString)) {
96-
unset($queryString['page']);
97-
}
98-
99-
return sprintf('<link rel="%s" href="%s">',
100-
$direction,
101-
$this->buildUrl($queryString, $pageUrl, $items->getPaginatorOptions())
102-
);
103-
}
104-
105-
$queryString['page'] = $pageNumber;
74+
$routeInfo['params'] = $pagination->getQuery(compact('page'));
10675

10776
return sprintf('<link rel="%s" href="%s">',
10877
$direction,
109-
$this->buildUrl($queryString, $pageUrl, $items->getPaginatorOptions())
78+
$this->router->generate(
79+
$routeInfo['name'],
80+
$routeInfo['params'],
81+
UrlGenerator::ABSOLUTE_URL
82+
)
11083
);
11184
}
11285

113-
protected function generateCanonicalUrl(Request $request)
114-
{
115-
$route = $request->get('_route');
116-
$parameters = $request->get('_route_params');
117-
118-
$current_page = $request->get('page');
119-
120-
if ($current_page != 1) {
121-
$parameters['page'] = $current_page;
122-
}
123-
124-
return $this->router->generate($route, $parameters, true);
125-
}
126-
127-
private function buildUrl(array $queryString, $pageUrl, $paginatorOptions)
128-
{
129-
foreach ($queryString as $parameter => $value) {
130-
if ( ! array_search($parameter, $paginatorOptions)) {
131-
unset($queryString[$parameter]);
132-
}
133-
}
134-
135-
return (count($queryString) >= 1) ? sprintf('%s?%s', $pageUrl, http_build_query($queryString)) : $pageUrl;
136-
}
137-
13886
public function getName()
13987
{
14088
return 'twig_pagination_meta_extension';

Diff for: Resources/config/twig.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
services:
22
skuola_seo.twig_pagination_meta.extension:
33
class: %skuola_seo.twig_pagination_meta.extension.class%
4-
arguments: [ "@request_stack", "@router", "%domain%" ]
4+
arguments: [ "@router" ]
55
tags:
66
- { name: twig.extension }

0 commit comments

Comments
 (0)