t3con14eu: migrating from typo3 cms to typo3 flow
Post on 27-Jun-2015
354 Views
Preview:
DESCRIPTION
TRANSCRIPT
Migrating from TYPO3 CMS to TYPO3 Flow 10th International TYPO3 Conference, October 9th, Berlin
CC BY Serge Melki https://www.flickr.com/photos/sergemelki/8156340258
Martin Helmich m.helmich@mittwald.de
CC BY-SA Niteshift http://commons.wikimedia.org/wiki/File:Balow_Kuhweide_2008-04-28_121.jpg
TYPO3 Flow
TYPO3 Neos
?
TYPO3 CMS
why!?
CC BY Morgan https://www.flickr.com/photos/meddygarnet/3528509573
CC BY Crisada https://www.flickr.com/photos/chrisada/2415541623
CC BY Pascal https://www.flickr.com/photos/pasukaru76/6310053615
CC BY-SA Malene Thyssen http://commons.wikimedia.org/wiki/File:Brown_bear_(Ursus_arctos_arctos)_running.jpg
CC BY Emma Bishop https://www.flickr.com/photos/emmabishop/6360703145
Extensions
Typoscript
Content
Migrating content
Read https://speakerdeck.com/kdambekalns/migrating-from-typo3-cms-to-typo3-neos
Migrating typoscript
just
don‘t
although...
page = PAGE page { 10 = TEMPLATE 10 { template = FILE template.file = fileadmin/site.html marks { CONTENT < styles.content.get CONTENT_RIGHT < styles.content.getRight } } }
page = TYPO3.Neos:Page { body { templatePath =
'resource://My.Site/.../Site.html' content { main = PrimaryContent { nodePath = 'main' } right = ContentCollection { nodePath = 'right' } }
Render TS2
Parse TS
Apply trans-
formations
How to convert an
Extbase extension to TYPO3 FLOW
TYPO3 CMS (Extbase)
TYPO3 Flow
?
Classes/ Controller/ Domain/ …
Configuration/ TypoScript/ TCA/
Resources/ Public/ Private/
ext_emconf.php ext_tables.php ext_tables.sql
Classes/ Controller/ Domain/ …
Configuration/ Migrations/
Mysql/ Resources/
Public/ Private/
composer.json
TYPO3 CMS (Extbase)
TYPO3 Flow
class Tx_MyExt_Domain_Model_Car extends Tx_Extbase_DomainObject_AbstractEntity { /** * @var string * @validate notempty */ protected $licenseNumber; /** * @var Tx_MyExt_Domain_Model_Manufacturer */ protected $manufacturer; }
namespace My\Ext\Domain\Model; use TYPO3\Flow\Annotations as Flow; use Doctrine\ORM\Mapping as ORM; /** * @Flow\Entity */ class Car { /** * @var string * @Flow\Validate('NotEmpty') */ protected $licenseNumber; /** * @var Manufacturer * @ORM\ManyToOne */ protected $manufacturer; }
TYPO3 CMS (Extbase)
TYPO3 Flow
class Tx_MyExt_Domain_Model_Car extends Tx_Extbase_DomainObject_AbstractEntity { /** * @var string * @validate notempty */ protected $licenseNumber; /** * @var Tx_MyExt_Domain_Model_Manufacturer */ protected $manufacturer; }
namespace My\Ext\Domain\Model; use TYPO3\Flow\Annotations as Flow; use Doctrine\ORM\Mapping as ORM; /** * @Flow\Entity */ class Car { /** * @var string * @Flow\Validate('NotEmpty') */ protected $licenseNumber; /** * @var Manufacturer * @ORM\ManyToOne */ protected $manufacturer; }
Namespacify classes when necessary
TYPO3 CMS (Extbase)
TYPO3 Flow
class Tx_MyExt_Domain_Model_Car extends Tx_Extbase_DomainObject_AbstractEntity { /** * @var string * @validate notempty */ protected $licenseNumber; /** * @var Tx_MyExt_Domain_Model_Manufacturer */ protected $manufacturer; }
namespace My\Ext\Domain\Model; use TYPO3\Flow\Annotations as Flow; use Doctrine\ORM\Mapping as ORM; /** * @Flow\Entity */ class Car { /** * @var string * @Flow\Validate('NotEmpty') */ protected $licenseNumber; /** * @var Manufacturer * @ORM\ManyToOne */ protected $manufacturer; }
Determine domain object type by class inheritance and add annotation
TYPO3 CMS (Extbase)
TYPO3 Flow
class Tx_MyExt_Domain_Model_Car extends Tx_Extbase_DomainObject_AbstractEntity { /** * @var string * @validate notempty */ protected $licenseNumber; /** * @var Tx_MyExt_Domain_Model_Manufacturer */ protected $manufacturer; }
namespace My\Ext\Domain\Model; use TYPO3\Flow\Annotations as Flow; use Doctrine\ORM\Mapping as ORM; /** * @Flow\Entity */ class Car { /** * @var string * @Flow\Validate('NotEmpty') */ protected $licenseNumber; /** * @var Manufacturer * @ORM\ManyToOne */ protected $manufacturer; }
Convert annotations.
TYPO3 CMS (Extbase)
TYPO3 Flow
class Tx_MyExt_Domain_Model_Car extends Tx_Extbase_DomainObject_AbstractEntity { /** * @var string * @validate notempty */ protected $licenseNumber; /** * @var Tx_MyExt_Domain_Model_Manufacturer */ protected $manufacturer; }
namespace My\Ext\Domain\Model; use TYPO3\Flow\Annotations as Flow; use Doctrine\ORM\Mapping as ORM; /** * @Flow\Entity */ class Car { /** * @var string * @Flow\Validate('NotEmpty') */ protected $licenseNumber; /** * @var Manufacturer * @ORM\ManyToOne */ protected $manufacturer; }
Determine association cardinality from TCA
some other
stuff to think about
usage of TYPO3 APIs (aka. the infamous t3lib_div)
Conv
ert l
ocal
lang
to
XLI
FF create doctrine
migrations from ext_tables.sql do
mai
n m
odel
s ex
tend
ing
TYPO
3 cl
asse
s different value object
handling
How to convert an
pibase extension to TYPO3 FLOW
TYPO3 CMS (pibase)
TYPO3 Flow
lib/ pi1/
class.tx_myext_pi1.php static/
res/ ext_emconf.php ext_tables.php ext_tables.sql
Classes/ Controller/ Domain/ Plugin/ …
Configuration/ Migrations/
Mysql/ Resources/
Public/ Private/
composer.json
?
class tx_myext_pi1 extends tslib_pibase { public function main($conf, $content) { $mainTemplate = $this-‐>cObj-‐>fileResource(...); $rowTemplate = $this-‐>cObj-‐>fileResource(...); $userRes = $GLOBALS['TYPO3_DB']-‐>exec_SELECTquery( '*', 'tx_myext_users', 'deleted=0 AND active=1' ); while($user = $GLOBALS['TYPO3_DB']-‐>sql_fetch_assoc($userRes)) { $markers = [ "###NAME###" => $user['name'], "###EMAIL###" => $user['email'] ]; $content .= $this-‐>cObj-‐>substituteMarkerArray( $rowTemplate, $markers ); } $markers = ['###USERS###' => $content]; return $this-‐>cObj-‐>substituteMarkerArray($mainTemplate, $markers); } }
Doctrine 2 DBAL
Doctrine 2 ORM Flow
Resource Mgmt.
Flow MVC Stack
Pain abstraction layer
The world of pain (old code)
namespace My\Ext\Plugin; class UserListPlugin extends \Mw\T3Compat\Plugin\BasePlugin { public function main($conf, $content) { $mainTemplate = $this-‐>cObj-‐>fileResource(...); $rowTemplate = $this-‐>cObj-‐>fileResource(...); $userRes = $this-‐>database-‐>exec_SELECTquery( '*', 'tx_myext_users', 'deleted=0 AND active=1' ); while($user = $this-‐>database-‐>sql_fetch_assoc($userRes)) { $markers = [ "###NAME###" => $user['name'], "###EMAIL###" => $user['email'] ]; $content .= $this-‐>cObj-‐>substituteMarkerArray( $rowTemplate, $markers ); } $markers = ['###USERS###' => $content]; return $this-‐>cObj-‐>substituteMarkerArray($mainTemplate, $markers); } }
demo time
CC BY Kenny Louie https://www.flickr.com/photos/kwl/4743024076
try it https://github.com/mittwald/flow-metamorph
http://creativecommons.org/licenses/by-sa/4.0/
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
top related