Extension Overview

Edit the extension sav_library_example5 in the SAV Library Kickstarter to get an overview. It contains one form with three conventional List, Single and Edit views.

There is nothing special in the List and Edit views.

Attributes in the Single View

The Single view contains the call to the hook in the field hook_content defined as Only shown in SAV form. The attributes must define the hook name and the hook parameters.

The hook name is defined by means of the hookName property.

hookName = SavLibraryExample5;

The hook parameters are defined by the hookParameters property as a JSON array.

hookParameters = {
  "template": "Test.html",
  "uid": "###uidMainTable###"
};

Configuration of the Hook in the File ext_localconf.php

The class to be called is set in the variable $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['sav_library_plus']['hooks']['YourHookName'] in the file ext_localconf.php file.

// Adds a hook for SAV Library Plus
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['sav_library_plus']['hooks']['SavLibraryExample5'] = \YolfTypo3\SavLibraryExample5\Hooks\SavLibraryPlus::class;

In this example, the class \YolfTypo3\SavLibraryExample5\Hooks\SavLibraryPlus is in the file typo3conf/sav_library_example5/Classes/Hooks/SavLibraryPlus.php.

Rendering the Hook

The class \YolfTypo3\SavLibraryExample5\Hooks\SavLibraryPlus extends the class \YolfTypo3\SavLibraryPlus\Hooks\AbstractHook. The method renderHook($parameters) is called to render the hook.

In this example, this method creates a template view, whose name is provided by the hook parameter template and fetches the current record associayed with the Single view.

/**
 * Renders the hook
 *
 * @param array $parameters
 *
 * @return string
 */
public function renderHook($parameters)
{
    // Gets the parameters
    $template = $parameters['template'];
    $uid = $parameters['uid'];

    // Creates a view for more fluid processings of the template
    /** @var StandaloneView $view */
    $view = GeneralUtility::makeInstance(StandaloneView::class);
    $view->setTemplatePathAndFilename('EXT:sav_library_example5/Resources/Private/Templates/' . $template);

    // Selects the record
    $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_savlibraryexample5');
    $rows = $queryBuilder->select('*')
        ->from('tx_savlibraryexample5')
        ->where($queryBuilder->expr()
        ->eq('uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)))
        ->execute()
        ->fetchAll();

    // Assigns the row variable
    $view->assign('row', $rows[0]);

    // Renders the content
    $content = $view->render();

    return $content;
}

The FLUID template is in the folder Resources/Private/Templates of the extension. It compares the values of the field and displays them in the ascending order.

<div class="hookHeader">
    <f:translate key="message" extensionName="sav_library_example5" />
</div>
<ul class="hookList">
    <f:if condition="{row.field1} < {row.field2}">
        <f:then>
            <li>{row.field1}</li>
            <li>{row.field2}</li>
        </f:then>
        <f:else>
            <li>{row.field2}</li>
            <li>{row.field1}</li>
        </f:else>
    </f:if>
</ul>