Search code examples
typo3backendextbasetypo3-6.2.xtypo3-extensions

How can I render preview of FE plugin diplayed in Page module


I have developed TYPO3 (6.2) extensions with some FE plugins.

I need to change informations about plugin, which is displayed in the backend on page view.

Now only Title and name of plugin is displayed ...

I have used flexforms for configure the plugin and I would like to show some of configuration on the plugin "placeholder" in the backend.

I remember, I read some documentation how to do it a few years ago, but I can't find it anymore...

Does anyone know the right way to do it?


Solution

  • If I understood well you are asking for ContentElement preview. You need to use cms/layout/class.tx_cms_layout.php hook for this, here's quite nice gist

    just two additions:

    1. don't use t3lib_extMgm class it's removed since 7.x you can register this hook just with:

      $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';
      
    2. Depending on how did you register the plugin (didn't mention) you can also need to check the $row['list_type'] as your $row['CType'] may be just generic list.

    Sample class with value from FlexForm field

    <?php
    
    namespace Vendor\YourExt\Hooks;
    
    class PageLayoutView implements \TYPO3\CMS\Backend\View\PageLayoutViewDrawItemHookInterface {
    
        public function preProcess(\TYPO3\CMS\Backend\View\PageLayoutView &$parentObject, &$drawItem, &$headerContent, &$itemContent, array &$row) {
            if ($row['CType'] == 'list' && $row['list_type'] == 'yourext_yourplugin') {
    
                $drawItem = false;
    
                $linkStart = '<a href="#" onclick="window.location.href=\'../../../alt_doc.php?returnUrl=%2Ftypo3%2Fsysext%2Fcms%2Flayout%2Fdb_layout.php%3Fid%3D' . $row['pid'] . '&amp;edit[tt_content][' . $row['uid'] . ']=edit\'; return false;" title="Edit">';
                $linkEnd = '</a>';
    
    
                $headerContent = 
                    $linkStart . 
                    "<strong>Selected slides</strong>" .
                    $linkEnd;
    
    
                $ffXml = \TYPO3\CMS\Core\Utility\GeneralUtility::xml2array($row['pi_flexform']);
    
                $itemContent =
                    $linkStart .
                    $ffXml['data']['sDEF']['lDEF']['settings.myFlexField']['vDEF'] .
                    $linkEnd;
            }
        }
    }