Zum Inhalt springen

alle Bilder einer Seite ausgeben

Erstellt am 4. Juli 2013 · 2 Antworten · letzte Antwort am 26. Juli 2013

Tags: Dateien & FAL, SEO, Frage

mischa ·

Tachchen zusammen,

für eine google Bilder-Sitemap möchte ich in meiner EXT alle Bilder einer Seite laden.

Bis dato habe ich ein eigenes FileReference-Model und -Repository erstellt und greife dann über findBy('pid', n) auf die sys_file_reference zu.
Das klappt auch wunderbar. Ich bekomme alle zugeordneten Datensätze aus der sys_file_reference als Objekt ausgegeben.

Aber wie geht es weiter? Wie bekomme ich jetzt die ganzen Dateien aus den Referenzen?

Zudem möchte ich gerne im Template über

{sfseoImages.originalResource.originalFile.identifier}

auf die Dateiobjekte zugreifen.
Die habe ich natürlich hier noch nicht.
Wie komme ich an die ran?

Mein Controller sieht bis jetzt so aus:

<?php
namespace TYPO3\SfSeo\Controller;

/**
 *
 *
 * @package sf_seo
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later
 *
 */
class GooglesitemapController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {

	/**
	 * pagesRepository
	 *
	 * @var \TYPO3\SfSeo\Domain\Repository\PagesRepository
	 * @inject
	 */
	protected $pagesRepository;

	/**
	 * fileRepository
	 *
	 * @var \TYPO3\SfSeo\Domain\Repository\FileRepository
	 * @inject
	 */
	protected $fileRepository;

	/**
	 * fileReferenceRepository
	 *
	 * @var \TYPO3\SfSeo\Domain\Repository\FileReferenceRepository
	 * @inject
	 */
	protected $fileReferenceRepository;

	/**
	 * action sitemap
	 *
	 * @return void
	 */
	public function sitemapAction() {
		$subpages = \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::getTreeList(1, 99, 0, 1);
		$storageRep = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Resource\\Collection\\FolderBasedFileCollection');

		$pages = $this->pagesRepository->findAllSitemapPages($subpages.$this->settings['startpage']);
		if($this->settings['includeImageXML'] == 1) {
			foreach($pages as $k => $page) {
				$fileRef = $this->fileReferenceRepository->findBy('pid', $page->getUid());
				$page->setSfseoImages($fileRef);
			}
		}
		$this->view->assign('pages', $pages);
	}

	/**
	 * injectPagesRepository
	 *
	 * @param \TYPO3\SfSeo\Domain\Model\Pages $PagesRepository
	 * @return void
	 */
	public function injectPagesRepository(\TYPO3\SfSeo\Domain\Model\Pages $pagesRepository) {
		$this->pagesRepository = $pagesRepository;
	}

}
?>

Für eure Hilfe jetzt schon mal vielen Dank.

mischa · · Beste Antwort

So, dann antworte ich mir halt selber, in der Hoffnung, dass es jemandem hilft. :-)

Das Geheimnis ist

1. Das FileRepository muss auf \TYPO3\CMS\Core\Resource\FileRepository

	/**
	 * fileRepository
	 *
	 * @var \TYPO3\CMS\Core\Resource\FileRepository
	 * @inject
	 */
	protected $fileRepository;

...

	/**
	 * injectFileRepository
	 *
	 * @param \TYPO3\CMS\Core\Resource\FileRepository $FileRepository
	 * @return void
	 */
	public function injectFileRepository(\TYPO3\CMS\Core\Resource\FileRepository $fileRepository) {
		$this->fileRepository = $fileRepository;
	}

2. Wie oben alle Dateien einer Seite auslesen

$fileRef = $this->fileReferenceRepository->findBy('pid', $page->getUid());

3. Mit foreach alle Datensätze (oder Objekte oder wie man das jetzt nennt) druchwurschteln

4. Über das fileRepository die DateiInfos holen

$img = $this->fileRepository->findFileReferenceByUid($file->getUid());

Die Datei-Eigenschaften holt man sich mit

$temp = $img->getProperties();

Und das war's gewesen. In Fluid wie gewohnt ansprechen.
Rockt!

Viele Späße damit.

karlchen ·

hallo,

Magst deine Frage noch als Gelöst markieren ? Hast ja ne super Anleitung draus gemacht, das sollte nicht verloren gehen 🙂