Typo3 6 Extension: Page resources Bild auslesen

  • Sir_Lunchalot Sir_Lunch...
    Typ im Roten Hemd
    0 x
    2 Beiträge
    0 Hilfreiche Beiträge
    01. 02. 2013, 10:49

    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 :)

    1. public function listAction() {
    2. $landingPages = $this->landingPageRepository->findAll();
    3. $markerArray = array();
    4.  
    5. $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'pages', 'pid='.$GLOBALS["TSFE"]->id);
    6. while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)){
    7. $markerArray[] = array('uid' => $row['uid'], 'title' => $row['title']);
    8. // Page Resource Bild auslesen
    9. }
    10. $this->view->assign('teaser', $markerArray);
    11. $this->view->assign('teaser1', $landingPages);
    12. }


  • 1
  • beo6 beo6
    Padawan
    0 x
    45 Beiträge
    1 Hilfreiche Beiträge
    08. 02. 2013, 09:52

    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.

    1. <?php
    2. public function listAction() {
    3. $node = $this->objectManager->get('TYPO3\CMS\Backend\Tree\Pagetree\PagetreeNode');
    4. $node->setId( $this->settings['pid'] );
    5. $node->setExpanded(FALSE);
    6. $dataProvider = $this->objectManager->get('TYPO3\CMS\Backend\Tree\Pagetree\DataProvider');
    7. $nodeCollection = $dataProvider->getNodes($node);
    8. $pageTree = $this->getPageTree($nodeCollection, true, true);
    9. $this->view->assign('teaser', $pageTree);
    10. }
    11.  
    12. /**
    13.   * @param TYPO3\CMS\Backend\Tree\Pagetree\PagetreeNode $nodeCollection
    14.   * @return array
    15.   */
    16. protected function getPageTree( \TYPO3\CMS\Backend\Tree\TreeNodeCollection $nodeCollection ) {
    17. foreach ($nodeCollection as $childNode) {
    18. $record = $childNode->getRecord();
    19. if ( !(bool)$record['hidden'] ) {
    20. $pids_data = array(
    21. 'id' => $childNode->getId(),
    22. 'text' => $childNode->getText(),
    23. 'viewable' => $childNode->canBeViewed(),
    24. 'hidden' => (bool)$record['hidden'],
    25. 'alias' => $record['alias'],
    26. 'lastchange' => $record['SYS_LASTCHANGED'],
    27. 'record' => $record,
    28. );
    29. if ( $childNode->hasChildNodes() ) {
    30. $pids_data['subPages'] = $this->getPageTree( $childNode->getChildNodes() );
    31. }
    32. $pids[] = $pids_data;
    33. }
    34. }
    35. return $pids;
    36. }

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

    1. <?php
    2. public function findFileFromPageMedia( $pid ){
    3. $query = $this->createQuery();
    4. $query->getQuerySettings()->setReturnRawQueryResult(TRUE);
    5. $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));
    6. return $query->execute();
    7. }

  • thefox thefox
    T3PO
    0 x
    29 Beiträge
    0 Hilfreiche Beiträge
    21. 11. 2014, 19:19

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

    [i]Die nodeCollection Abfrage gibt nach meinem Empfinden ziemlich viel mitgeladener Datenmüll wenn man nur die Felder [b]uid,title,subtitle,abstract,description,author,lastUpdated,media[/b] benötigt.[/i]
    Im [b]media[/b] 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:

    1. public function findFileFromPageMedia( $pid ){
    2. $fileRepository = $this->objectManager->get('TYPO3\CMS\Core\Resource\FileRepository');
    3. $fileObjects = $fileRepository->findByRelation('pages', 'media', $pid);
    4.  
    5. // gibt Image Object Information
    6. $files = array();
    7. foreach ($fileObjects as $key => $value) {
    8. $files[$key]['reference'] = $value->getReferenceProperties();
    9. $files[$key]['original'] = $value->getOriginalFile()->getProperties();
    10. }
    11. return $files;
    12. }

    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:

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

    Gruss thefox

  • 1