Extensionvorschau im Backend

Wenn man komplexere Plugins schreibt die über Flexforms verschiedene Einstellmöglichkeiten haben möchte man in der Seitenansicht im Backend mehr erkennen als nur den Plugin Namen.

Um das zu realisieren gibt es den PageLayoutViewDrawItemHook den wir folgendem einsetzten.

Doch zunächst die Standardansicht im Backend ohne diesen Hook:

Im Backend wird an dieser Stelle ein Plugin eingefügt, in dessen Flexform man einen Datensatz aus einer Artikeltabelle wählen kann. Das Beispiel zeigt die hier auf der Seite genutzten "Weitere Artikel zu diesem Thema".


Den PageLayoutViewDrawItemHook registrieren

Die ext_localconf.php unsere Extension ergänzen wir um folgende Zeile:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['tt_content_drawItem'][$_EXTKEY] = 'EXT:your_ext/Classes/Hooks/PageLayoutView.php:\Vendor\YourExt\Hooks\PageLayoutView';

Vendor- und Extension Name müssen natürlich angepasst werden, aber damit ist der Hook registriert und im nächsten Schritt schauen wir in die Hook Klasse:


Die PageLayoutView Hook Klasse

<?php
namespace Vendor\MyExtension\Hooks;

/*
 * License
 */

class PageLayoutView implements \TYPO3\CMS\Backend\View\PageLayoutViewDrawItemHookInterface {

    /**
     * Preprocesses the preview rendering of a content element.
     *
     * @param PageLayoutView $parentObject Calling parent object
     * @param boolean $drawItem Whether to draw the item using the default functionalities
     * @param string $headerContent Header content
     * @param string $itemContent Item content
     * @param array $row Record row of tt_content
     * @return void
     */
    public function preProcess(\TYPO3\CMS\Backend\View\PageLayoutView &$parentObject, &$drawItem, &$headerContent, &$itemContent, array &$row) {

        //depending on your list type!!
        if ($row['list_type'] !== 't3devtemplate_morearticle') {
            return;
        }

        $drawItem = FALSE;
        $headerContent = '<b>Weitere Artikel' . "</b><br>";

        $flexform = $row['pi_flexform'];

        //fetch the xml fleform value and get the value (field[0] - this depends on your own flexform)
        //see article on this page "XML Dateien in Extbase"
        $xml = simplexml_load_string($flexform);
        $uid = strip_tags($xml->data->sheet->language->field[0]->value->asXML());

        //we are in a Hook, make instance by your own pls ^^//
        /** @var $extbaseObjectManager \TYPO3\CMS\Extbase\Object\ObjectManager */
        $extbaseObjectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');

        /** @var $articleRepository \T3dev\T3devTemplate\Domain\Repository\ArticleRepository */
        $articleRepository = $extbaseObjectManager->get('T3dev\\T3devTemplate\\Domain\\Repository\\ArticleRepository');

        //We get a normal e.g. article model with all standard getters!
        $article = $articleRepository->findByUid($uid);

        $itemContent = $article->getTitle();
        $itemContent.= '<br>';

        $images = $article->getImage();
        
        //the image model in this case is of type ObjectStorage, so there could be more than one image
        foreach($images as $img){
           $imagePath =  $img->getOriginalResource()->getPublicUrl();
            $itemContent.= '<image src="/' . $imagePath . '" width="50px" />';
        }
        
  }

}

Die Backend Ansicht mit integriertem PageLayoutView Hook

Nach der Registrierung des Hooks und Anpassung der Hook Klasse wird sowohl die Überschrift des ausgewählten Datensatzes wie auch das Bild in der Vorschau ausgegeben.
Das macht auch den Redakteur glücklich ;)

Weitere Artikel zu diesem Thema:

Empfehlenswerte Lektüre:

HTML5 Handbuch

Stefan Münz (Gründer von SELFHTML) geht in der 10. Auflage seines Bestsellers auf die Besonderheiten von HTML5 und CSS3 ein. Dabei wird ebenso die Ausgabe auf Smaptphones und Handys berücksichtigt, wie auch jQuery als Scriptsprache. Damit ist das Buch ein wertvoller Ratgeber für alle die Webseiten entwickeln unabhängig vom eingesetztem CMS System.

Kommentare

keine Kommentare vorhanden


Kommentar verfassen

Die Email Adresse wird nicht veröffentlicht.