‪TYPO3CMS  ‪main
PagesXmlSitemapDataProvider.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Psr\Http\Message\ServerRequestInterface;
28 
34 {
35  public function ‪__construct(ServerRequestInterface ‪$request, string ‪$key, array ‪$config = [], ‪ContentObjectRenderer ‪$cObj = null)
36  {
37  parent::__construct(‪$request, ‪$key, ‪$config, ‪$cObj);
38 
39  $this->‪generateItems();
40  }
41 
42  protected function ‪generateItems(): void
43  {
44  $pageRepository = GeneralUtility::makeInstance(PageRepository::class);
45  $pages = $pageRepository->getPagesOverlay($this->‪getPages());
46  $languageAspect = $this->‪getCurrentLanguageAspect();
47  foreach ($pages as $page) {
48  if (!$pageRepository->isPageSuitableForLanguage($page, $languageAspect)) {
49  continue;
50  }
51 
52  $this->items[] = [
53  'uid' => $page['uid'],
54  'lastMod' => (int)($page['SYS_LASTCHANGED'] ?: $page['tstamp']),
55  'changefreq' => $page['sitemap_changefreq'],
56  'priority' => (float)$page['sitemap_priority'],
57  ];
58  }
59  }
60 
61  protected function ‪getPages(): array
62  {
63  if (!empty($this->config['rootPage'])) {
64  $rootPageId = (int)$this->config['rootPage'];
65  } else {
66  $site = $this->request->getAttribute('site');
67  $rootPageId = $site->getRootPageId();
68  }
69 
70  $excludePagesRecursive = ‪GeneralUtility::intExplode(',', (string)($this->config['excludePagesRecursive'] ?? ''), true);
71 
72  $pageRepository = GeneralUtility::makeInstance(PageRepository::class);
73  $pageIds = $pageRepository->getDescendantPageIdsRecursive($rootPageId, 99, 0, $excludePagesRecursive);
74  $pageIds = array_merge([$rootPageId], $pageIds);
75 
76  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
77  ->getQueryBuilderForTable('pages');
78 
79  $constraints = [
80  $queryBuilder->expr()->in('uid', $pageIds),
81  ];
82 
83  if (!empty($this->config['additionalWhere'])) {
84  $constraints[] = ‪QueryHelper::quoteDatabaseIdentifiers($queryBuilder->getConnection(), ‪QueryHelper::stripLogicalOperatorPrefix($this->config['additionalWhere']));
85  }
86 
87  if (!empty($this->config['excludedDoktypes'])) {
88  $excludedDoktypes = ‪GeneralUtility::intExplode(',', (string)$this->config['excludedDoktypes']);
89  if (!empty($excludedDoktypes)) {
90  $constraints[] = $queryBuilder->expr()->notIn('doktype', implode(',', $excludedDoktypes));
91  }
92  }
93  $pages = $queryBuilder->select('*')
94  ->from('pages')
95  ->where(...$constraints)
96  ->orderBy('uid', 'ASC')
97  ->executeQuery()
98  ->fetchAllAssociative();
99 
100  return $pages;
101  }
102 
104  {
105  return GeneralUtility::makeInstance(Context::class)->getAspect('language');
106  }
107 
108  protected function ‪defineUrl(array $data): array
109  {
110  $typoLinkConfig = [
111  'parameter' => $data['uid'],
112  'forceAbsoluteUrl' => 1,
113  ];
114 
115  $data['loc'] = $this->cObj->createUrl($typoLinkConfig);
116 
117  return $data;
118  }
119 }
‪TYPO3\CMS\Seo\XmlSitemap\PagesXmlSitemapDataProvider\generateItems
‪generateItems()
Definition: PagesXmlSitemapDataProvider.php:42
‪TYPO3\CMS\Core\Database\Query\QueryHelper\quoteDatabaseIdentifiers
‪static quoteDatabaseIdentifiers(Connection $connection, string $sql)
Definition: QueryHelper.php:224
‪TYPO3\CMS\Seo\XmlSitemap\AbstractXmlSitemapDataProvider\$key
‪string $key
Definition: AbstractXmlSitemapDataProvider.php:29
‪TYPO3\CMS\Seo\XmlSitemap\PagesXmlSitemapDataProvider\getPages
‪getPages()
Definition: PagesXmlSitemapDataProvider.php:61
‪TYPO3\CMS\Seo\XmlSitemap\AbstractXmlSitemapDataProvider\$config
‪array $config
Definition: AbstractXmlSitemapDataProvider.php:31
‪TYPO3\CMS\Seo\XmlSitemap\PagesXmlSitemapDataProvider
Definition: PagesXmlSitemapDataProvider.php:34
‪TYPO3\CMS\Core\Context\Context
Definition: Context.php:54
‪TYPO3\CMS\Seo\XmlSitemap
Definition: AbstractXmlSitemapDataProvider.php:18
‪TYPO3\CMS\Core\Database\Query\QueryHelper
Definition: QueryHelper.php:32
‪TYPO3\CMS\Seo\XmlSitemap\AbstractXmlSitemapDataProvider\$request
‪ServerRequestInterface $request
Definition: AbstractXmlSitemapDataProvider.php:34
‪TYPO3\CMS\Seo\XmlSitemap\PagesXmlSitemapDataProvider\defineUrl
‪defineUrl(array $data)
Definition: PagesXmlSitemapDataProvider.php:108
‪TYPO3\CMS\Seo\XmlSitemap\PagesXmlSitemapDataProvider\__construct
‪__construct(ServerRequestInterface $request, string $key, array $config=[], ContentObjectRenderer $cObj=null)
Definition: PagesXmlSitemapDataProvider.php:35
‪TYPO3\CMS\Core\Context\LanguageAspect
Definition: LanguageAspect.php:57
‪TYPO3\CMS\Seo\XmlSitemap\AbstractXmlSitemapDataProvider
Definition: AbstractXmlSitemapDataProvider.php:28
‪TYPO3\CMS\Core\Database\Query\QueryHelper\stripLogicalOperatorPrefix
‪static string stripLogicalOperatorPrefix(string $constraint)
Definition: QueryHelper.php:171
‪TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
Definition: ContentObjectRenderer.php:102
‪TYPO3\CMS\Seo\XmlSitemap\PagesXmlSitemapDataProvider\getCurrentLanguageAspect
‪getCurrentLanguageAspect()
Definition: PagesXmlSitemapDataProvider.php:103
‪TYPO3\CMS\Core\Domain\Repository\PageRepository
Definition: PageRepository.php:69
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\Utility\GeneralUtility\intExplode
‪static list< int > intExplode(string $delimiter, string $string, bool $removeEmptyValues=false)
Definition: GeneralUtility.php:756
‪TYPO3\CMS\Seo\XmlSitemap\AbstractXmlSitemapDataProvider\$cObj
‪ContentObjectRenderer $cObj
Definition: AbstractXmlSitemapDataProvider.php:32