Zum Inhalt springen

tt_news Datum als "item crdate" in der index_phash ?

Erstellt am 18. Juli 2007 · 4 Antworten · letzte Antwort am 9. November 2016

Tags: Frage

Cimmie ·

Hallo,
wie bekomme ich es hin, dass in der Suche bei "Erstellt: 29-04-07" nicht das Datum steht wann die Seite indiziert wurde (oder wann die Seite auf der der Newsbeitrag erscheint) sondern das Datum des tt_news Artikels? Was habe ich falsch gemacht?
Vielen Dank
Simon

Cimmie ·

ich bin der Sache auf der Spur:
in der class.indexer.php steht folgendes:

'item_crdate' => $this->conf['crdate'],	// Creation date of page

im Konkreten geht es darum in der Singleansicht die page conf['crdate'] auf das Datum der News zu stellen - wie mache ich sowas? Da müsste es doch ein einfaches Typoscript zu geben!?

Cimmie ·

also es läuft - wenn auch nicht gerade geschickt:

Folgende Code Änderung bei tt_news war nötig (~Zeile 610):

$GLOBALS['TSFE']->page['crdate'] = $row['datetime'];

inspiriert durch die Möglichkeit von tt_news den Pagetitle zu ändern. Falls noch wem eine geschickte Typoscript Möglichkeit einfällt - bitte posten!

theo ·
Cimmie schrieb

.... Falls noch wem eine geschickte Typoscript Möglichkeit einfällt - bitte posten!

Yo! Bitte!

Theo

bithostgmbh ·

Ich habe zwar keine TypoScript Möglichkeit gefunden, aber ich habe es über eine XClass gelöst. Das hat den Vorteil, dass nicht das globale crdate der Seite überschrieben werden muss.

<?php
namespace Vendor\Extension\Xclass;

use GeorgRinger\News\Domain\Model\NewsDefault;
use GeorgRinger\News\Domain\Repository\NewsRepository;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Object\ObjectManager;

/**
 * Indexer
 */
class Indexer extends \TYPO3\CMS\IndexedSearch\Indexer {
	/**
	 * Changing crdate for search entries to be news crdate and not page crdate in order to allow sorting search entries by date
	 *
	 * @return void
	 */
	public function submitPage() {
		$newsParams = GeneralUtility::_GP('tx_news_pi1');

		if (isset($newsParams['action']) && $newsParams['action'] === 'detail' && isset($newsParams['news'])) {
			$newsId = (int) $newsParams['news'];
			$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
			$newsRepository = $objectManager->get(NewsRepository::class);
			$news = $newsRepository->findByUid($newsId);

			if ($news instanceof NewsDefault) {
				$crdate = $news->getCrdate()->getTimestamp();

				$this->conf['crdate'] = $crdate;
			}
		}

		parent::submitPage();
	}
}