From 3d09342119d21279cae107534715e90c09f15e61 Mon Sep 17 00:00:00 2001 From: fritzmg Date: Thu, 3 Feb 2022 15:04:35 +0000 Subject: [PATCH 1/3] implement sitemap --- composer.json | 1 + .../GetSearchablePagesListener.php | 91 +++++++++++++++++++ src/Module/JobList.php | 4 +- src/Module/JobReader.php | 8 +- src/Resources/contao/config/config.php | 7 ++ 5 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 src/EventListener/GetSearchablePagesListener.php diff --git a/composer.json b/composer.json index bd99b91..9e6b265 100644 --- a/composer.json +++ b/composer.json @@ -10,6 +10,7 @@ } ], "require": { + "php": ">=5.4", "contao/core-bundle": "^4.4.8" }, "extra": { diff --git a/src/EventListener/GetSearchablePagesListener.php b/src/EventListener/GetSearchablePagesListener.php new file mode 100644 index 0000000..e9d8271 --- /dev/null +++ b/src/EventListener/GetSearchablePagesListener.php @@ -0,0 +1,91 @@ +jumpTo)) { + continue; + } + + // Find all content elements integrating this module + $time = Date::floorToMinute(); + $elements = ContentModel::findBy([ + "invisible='' AND (start='' OR start<='$time') AND (stop='' OR stop>'$time')", + "type = 'module'", + "ptable = 'tl_article'", + 'module = ?', + ], [$module->id]); + + if (null === $elements) { + continue; + } + + // Check if we already processed this detail page + if (\in_array((int) $module->jumpTo, $detailPageIds, true)) { + continue; + } + + $detailPageIds[] = (int) $module->jumpTo; + $page = PageModel::findPublishedById((int) $module->jumpTo); + + if (null === $page) { + continue; + } + + $page->loadDetails(); + + // Check if page belongs to current root + if (null !== $rootId && (int) $rootId !== (int) $page->rootId) { + continue; + } + + // Load all jobs for this list + $organisations = StringUtil::deserialize($module->organisation, true); + + if (empty($organisations)) { + continue; + } + + $jobs = Jobs::findBy(['pid IN('.implode(',', array_map('intval', $organisations)).')'], []); + + if (null === $jobs) { + continue; + } + + foreach ($jobs as $job) { + $pages[] = $page->getAbsoluteUrl('/'.$job->alias); + } + } + + return $pages; + } +} diff --git a/src/Module/JobList.php b/src/Module/JobList.php index 616f1d4..b6cf0d8 100644 --- a/src/Module/JobList.php +++ b/src/Module/JobList.php @@ -54,7 +54,7 @@ protected function compile() $aOptions = array ( - 'order' => 'pid',$this->jobsorting . ' ' . $this->sortorder, + 'order' => 'pid, '.$this->jobsorting . ' ' . $this->sortorder, ); if (!$bExpiredJobs) { @@ -74,7 +74,7 @@ protected function compile() // generate URL $oPage = PageModel::findBy('id', $this->jumpTo); - $oJob->jobJumpTo = Controller::generateFrontendUrl($oPage->row(), '/job/' . $oJob->alias); + $oJob->jobJumpTo = Controller::generateFrontendUrl($oPage->row(), '/' . $oJob->alias); $oJob->organisation = $oJob->getRelated('pid'); } diff --git a/src/Module/JobReader.php b/src/Module/JobReader.php index 37f2c59..6aa7f69 100644 --- a/src/Module/JobReader.php +++ b/src/Module/JobReader.php @@ -4,6 +4,7 @@ use Contao\Controller; use Contao\CoreBundle\Exception\PageNotFoundException; +use Contao\CoreBundle\Exception\RedirectResponseException; use Contao\Date; use Contao\FilesModel; use Contao\Input; @@ -49,9 +50,14 @@ protected function compile() { Controller::loadLanguageFile('tl_sjm_jobs'); + // Redirect to new URL without /job + if (!empty($GLOBALS['objPage']) && null !== Input::get('job')) { + throw new RedirectResponseException($GLOBALS['objPage']->getAbsoluteUrl('/'.Input::get('job'))); + } + $aOptions = array ( - 'alias' => \Input::get('job') + 'alias' => Input::get('auto_item') ); $oJob = \Slashworks\ContaoSimpleJobManagerBundle\Models\Jobs::findOneBy('alias', $aOptions['alias']); diff --git a/src/Resources/contao/config/config.php b/src/Resources/contao/config/config.php index 3a55bfe..5fbb9ec 100644 --- a/src/Resources/contao/config/config.php +++ b/src/Resources/contao/config/config.php @@ -1,5 +1,7 @@ Date: Thu, 3 Feb 2022 15:09:52 +0000 Subject: [PATCH 2/3] also consider robots --- src/EventListener/GetSearchablePagesListener.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/EventListener/GetSearchablePagesListener.php b/src/EventListener/GetSearchablePagesListener.php index e9d8271..41a9a59 100644 --- a/src/EventListener/GetSearchablePagesListener.php +++ b/src/EventListener/GetSearchablePagesListener.php @@ -61,6 +61,11 @@ public function __invoke($pages, $rootId = null, $isSitemap = false, $language = continue; } + // Check if indexing is disabled + if ('noindex,nofollow' === $page->robots) { + continue; + } + $page->loadDetails(); // Check if page belongs to current root From e776b8f45bd4ccaa0731b058873039649e9d8f46 Mon Sep 17 00:00:00 2001 From: fritzmg Date: Thu, 3 Feb 2022 15:17:31 +0000 Subject: [PATCH 3/3] also fix organisation selection --- src/EventListener/GetSearchablePagesListener.php | 2 +- src/Module/JobList.php | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/EventListener/GetSearchablePagesListener.php b/src/EventListener/GetSearchablePagesListener.php index 41a9a59..a0b1283 100644 --- a/src/EventListener/GetSearchablePagesListener.php +++ b/src/EventListener/GetSearchablePagesListener.php @@ -80,7 +80,7 @@ public function __invoke($pages, $rootId = null, $isSitemap = false, $language = continue; } - $jobs = Jobs::findBy(['pid IN('.implode(',', array_map('intval', $organisations)).')'], []); + $jobs = Jobs::findBy(['pid IN(' . implode(',', array_map('intval', $organisations)) . ')'], []); if (null === $jobs) { continue; diff --git a/src/Module/JobList.php b/src/Module/JobList.php index b6cf0d8..e6f80bc 100644 --- a/src/Module/JobList.php +++ b/src/Module/JobList.php @@ -3,13 +3,9 @@ namespace Slashworks\ContaoSimpleJobManagerBundle\Module; use Contao\Controller; -use Contao\CoreBundle\ContaoCoreBundle; -use Contao\Date; -use Contao\FilesModel; -use Contao\Image\PictureConfiguration; -use Contao\Input; use Contao\Module; use Contao\PageModel; +use Contao\StringUtil; use Slashworks\ContaoSimpleJobManagerBundle\Models\Jobs; /** @@ -58,11 +54,14 @@ protected function compile() ); if (!$bExpiredJobs) { - $aOptions['column'][] = ' validthrough >= ' . $dTime; + $aOptions['column'][] = 'validthrough >= ' . $dTime; } - $aJobsByOrganisation = array(); - $oOrganisations = \Slashworks\ContaoSimpleJobManagerBundle\Models\Organisation::findAll(); + $organisations = StringUtil::deserialize($this->organisation, true); + + if (!empty($organisations)) { + $aOptions['column'][] = 'pid IN(' . implode(',', array_map('intval', $organisations)) . ')'; + } $oJobs = Jobs::findAll($aOptions);