Zum Inhalt springen

Typo3 6 Extension: Page resources Bild auslesen

Erstellt am 1. Februar 2013 · 2 Antworten · letzte Antwort am 21. November 2014

Tags: Dateien & FAL, TYPO3 6, Frage

Sir_Lunchalot ·

Hallo allerseits,
weiß jemand wie in einer ExtBase Extension ein unter Page -> Resources -> Media hochgeladenen Bild auslesen kann?
Habe eine Schleife, in der ich alle Unterseiten durchgehe und als Teaserbild soll besagtes Bild ausgegeben werden.

Danke und LG 🙂

public function listAction() {
		$landingPages = $this->landingPageRepository->findAll();
		$markerArray = array();
		
		$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'pages', 'pid='.$GLOBALS["TSFE"]->id);
		while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)){
			$markerArray[] = array('uid' => $row['uid'], 'title' => $row['title']);
			// Page Resource Bild auslesen
		}
		$this->view->assign('teaser', $markerArray);
		$this->view->assign('teaser1', $landingPages);
	}
beo6 ·

Hallo,

habe genau die gleiche Frage.

ich kann ja in \TYPO3\CMS\Backend\Tree\ExtDirectNode
mit getRecord()

den PageRecord auslesen.

Darin ist jedoch nur die Anzahl der referenzierten Bilder gespeichert.

Diese finde ich in der Tabelle "sys_file_reference".

Gibt es da eine schöne methode um an die Bilder zu gelangen?

@ Threadstarter:
Da ich sehe das du direkt auf die Datenbank zugreifst wollte ich die Methode teilen mit der ich den Seitenbaum auslese.
Ich finde es immer schöner wenn kein SQL im eigenen Code steht und auf integrierte Methoden zurückgegriffen wird.
Du kannst ihn sicher auch noch etwas mehr kürzen.

<?php
    public function listAction() {
        $node = $this->objectManager->get('TYPO3\CMS\Backend\Tree\Pagetree\PagetreeNode');
        $node->setId( $this->settings['pid'] );
        $node->setExpanded(FALSE);
        $dataProvider = $this->objectManager->get('TYPO3\CMS\Backend\Tree\Pagetree\DataProvider');
        $nodeCollection = $dataProvider->getNodes($node);
        $pageTree = $this->getPageTree($nodeCollection, true, true);
        $this->view->assign('teaser', $pageTree);
    }

    /**
     * @param TYPO3\CMS\Backend\Tree\Pagetree\PagetreeNode $nodeCollection
     * @return array
     */
    protected function getPageTree( \TYPO3\CMS\Backend\Tree\TreeNodeCollection $nodeCollection ) {
        foreach ($nodeCollection as $childNode) {
            $record = $childNode->getRecord();
            if ( !(bool)$record['hidden'] ) {
                $pids_data = array(
                            'id' => $childNode->getId(),
                            'text' => $childNode->getText(),
                            'viewable' => $childNode->canBeViewed(),
                            'hidden' => (bool)$record['hidden'],
                            'alias' => $record['alias'],
                            'lastchange' => $record['SYS_LASTCHANGED'],
                            'record' => $record,
                            );
                if ( $childNode->hasChildNodes() ) {
                    $pids_data['subPages'] = $this->getPageTree( $childNode->getChildNodes() );
                }
                $pids[] = $pids_data;
            }
        }
        return $pids;
    }

//Edit:
ok. mache es vorübergehend folgendermaßen im Repository bis etwas besseres gefunden wird:

<?php
	public function findFileFromPageMedia( $pid ){
		$query = $this->createQuery();
		$query->getQuerySettings()->setReturnRawQueryResult(TRUE);
		$query->statement('SELECT * from sys_file_reference as ref, sys_file as file WHERE ref.tablenames = "pages" AND ref.fieldname = "media" AND ref.pid = ? AND file.uid = ref.uid_local', array($pid));
		return $query->execute();
	}
thefox ·

Vielen Dank, dieser Artikel hat mich gerade etwas weiter gebracht.

Die nodeCollection Abfrage gibt nach meinem Empfinden ziemlich viel mitgeladener Datenmüll wenn man nur die Felder uid,title,subtitle,abstract,description,author,lastUpdated,media benötigt.
Im media Feld steht die Anzahl Media Referenzen drin, wenn grösser als 0 kann man die Bilder auslesen.

Ein Vorschlag für die findFileFromPageMedia Function ohne SQL Code:

public function findFileFromPageMedia( $pid ){
  $fileRepository = $this->objectManager->get('TYPO3\CMS\Core\Resource\FileRepository');
  $fileObjects = $fileRepository->findByRelation('pages', 'media', $pid);

  // gibt Image Object Information
  $files = array();
  foreach ($fileObjects as $key => $value) {
   $files[$key]['reference'] = $value->getReferenceProperties();
   $files[$key]['original'] = $value->getOriginalFile()->getProperties();
  }
  return $files; 
}

Wenn man nur das Bild ( ohne Metadaten ) ausgeben will, benötigt man nach mir nur die ID des Bildes. Mit der ID kann man im FLUID zum Beispiel diesen Code verwenden:

<img src="<f:uri.image src='{MyImageID}' width='200' />" align="right" style="margin-left:10px;" />

Gruss thefox