typo3 6.2 for extension developer
DESCRIPTION
Slides of T3DD14 workshop "TYPO3 6.2 for extension developer"TRANSCRIPT
![Page 1: TYPO3 6.2 for extension developer](https://reader035.vdocuments.us/reader035/viewer/2022081807/53f8e1cd8d7f7253318b4922/html5/thumbnails/1.jpg)
TYPO3 6.2 for extension developer
» Checklist
» Do‘s
» Don‘ts
![Page 2: TYPO3 6.2 for extension developer](https://reader035.vdocuments.us/reader035/viewer/2022081807/53f8e1cd8d7f7253318b4922/html5/thumbnails/2.jpg)
CPS-IT Mehr Wert im Netz 1
About me Known as @IchHabRecht
Nicole Cordes from Berlin
Programmer since 1998
Using TYPO3 since 2007
Certified TYPO3 integrator since 2011
Active contributer for TYPO3 CMS since 2013 (6.0)
Member of security and PHPUnit team
Working on multiple extensions as contributer
![Page 3: TYPO3 6.2 for extension developer](https://reader035.vdocuments.us/reader035/viewer/2022081807/53f8e1cd8d7f7253318b4922/html5/thumbnails/3.jpg)
CPS-IT Mehr Wert im Netz 2
Checklist
General
Remove all include(), include_once(), require(), require_once()
Use convention over configuration for autoloading
Or at least an ext_autoload.php file
Adapt xclasses
Backend
Use „_DISPATCH“ as script configuration for backend modules
BackendUtility::getModuleUrl() and BackendUtility::getAjaxUrl()
![Page 4: TYPO3 6.2 for extension developer](https://reader035.vdocuments.us/reader035/viewer/2022081807/53f8e1cd8d7f7253318b4922/html5/thumbnails/4.jpg)
CPS-IT Mehr Wert im Netz 3
Autoload
Cache lookup
Check for core file (namespace TYPO3\CMS\)
=> Class name reflects folder structure
Check runtime cache
=> filled with information by loaded ext_autoload.php files
Get file from class name („extbase convention“)
![Page 5: TYPO3 6.2 for extension developer](https://reader035.vdocuments.us/reader035/viewer/2022081807/53f8e1cd8d7f7253318b4922/html5/thumbnails/5.jpg)
CPS-IT Mehr Wert im Netz 4
XCLASS
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['TYPO3\\CMS\\Perm\\Controller\\PermissionModuleController'] = array(
'className' => 'Tx_BeAcl_Xclass_PermissionModuleController',
);
GeneralUtility::makeInstance()
Recursive dissolving
![Page 6: TYPO3 6.2 for extension developer](https://reader035.vdocuments.us/reader035/viewer/2022081807/53f8e1cd8d7f7253318b4922/html5/thumbnails/6.jpg)
CPS-IT Mehr Wert im Netz 5
Dispatch
Changeinconf.php
$MCONF['script']= '_DISPATCH';
Remove in index.php
unset($MCONF);
require_once('conf.php');
require_once($BACK_PATH . 'init.php');
require_once($BACK_PATH . 'template.php');
![Page 7: TYPO3 6.2 for extension developer](https://reader035.vdocuments.us/reader035/viewer/2022081807/53f8e1cd8d7f7253318b4922/html5/thumbnails/7.jpg)
CPS-IT Mehr Wert im Netz 6
Backend links
$url = \TYPO3\CMS\Backend\Utility\BackendUtility::getModuleUrl(
$moduleName,
$urlParameters = array(),
$backPathOverride = FALSE,
$returnAbsoluteUrl = FALSE
);
![Page 8: TYPO3 6.2 for extension developer](https://reader035.vdocuments.us/reader035/viewer/2022081807/53f8e1cd8d7f7253318b4922/html5/thumbnails/8.jpg)
CPS-IT Mehr Wert im Netz 7
Ajax links
Register your ajax script\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::registerAjaxHandler(
‘myAjaxId’,
‘MyVendor\\myExtension\\Path\\To\\Class.php’
);
> Automatically published to TYPO3.settings.ajaxUrls[‘myAjaxId']
Use your ajax scriptExt.Ajax.request({
url: TYPO3.settings.ajaxUrls[‘myAjaxId']
});
![Page 9: TYPO3 6.2 for extension developer](https://reader035.vdocuments.us/reader035/viewer/2022081807/53f8e1cd8d7f7253318b4922/html5/thumbnails/9.jpg)
CPS-IT Mehr Wert im Netz 8
Do‘s
Old class names still work due to class mapping
Old hook names still the same
Use signal / slots
![Page 10: TYPO3 6.2 for extension developer](https://reader035.vdocuments.us/reader035/viewer/2022081807/53f8e1cd8d7f7253318b4922/html5/thumbnails/10.jpg)
CPS-IT Mehr Wert im Netz 9
Connect function to signal\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\
Dispatcher')->connect(
‘SignalClassName',
‘SignalName’,
‘SlotClassNameOrObject',
‘SlotMethodName'
);
Use signal / slots
Find signal
Function prefixed with “emit”
Calls dispatch() function from
TYPO3\CMS\Extbase\SignalSlot\Dispatcher
> This way you can introduce own signals
![Page 11: TYPO3 6.2 for extension developer](https://reader035.vdocuments.us/reader035/viewer/2022081807/53f8e1cd8d7f7253318b4922/html5/thumbnails/11.jpg)
CPS-IT Mehr Wert im Netz 10
Don‘ts
General
Prevent any logic in ext_autoload.php configuration (e.g. require
other files)
No need for t3lib_div::loadTCA()
Eid scripts
No need to connect to database by tslib_eidtools::connectDB()
![Page 12: TYPO3 6.2 for extension developer](https://reader035.vdocuments.us/reader035/viewer/2022081807/53f8e1cd8d7f7253318b4922/html5/thumbnails/12.jpg)
CPS-IT Mehr Wert im Netz 11
Don‘ts
Extbase
Database driven object are only stored by calling the repository
functions or persisted manually by calling$this->objectManager->get(
'TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager‚
)->persistAll();
Disable the backport of the property mapper
plugin.tx_cpsblogexample.features.rewrittenPropertyMapper = 0
New functions in
TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface
![Page 13: TYPO3 6.2 for extension developer](https://reader035.vdocuments.us/reader035/viewer/2022081807/53f8e1cd8d7f7253318b4922/html5/thumbnails/13.jpg)
CPS-IT Mehr Wert im Netz 12
Thank youfor your attention!
Contact:
@IchHabRecht
typo3.slack.com
cps-it.cordes