SlideShare una empresa de Scribd logo
1 de 97
Descargar para leer sin conexión
Extbase and Beyond
Jochen Rau <jochen.rau@typoplanet.de>
Irving, Texas
May 22, 2010
Who is this?
Dipl.-Ing.
Mechanical
Engineering
infected with
TYPO3 in 2OO1
Tübingen
6O% selfemployed
   6O% father
8O%
---- selfemployed
6O%
   6O% father
5 years:
  Fraunhofer-
  Gesellschaft
German Aerospace
      Center
5 years:
high school
  teacher
What is Extbase
  all about?
v4



2OO6
v5

v4
v5

v4
v5

v4
Extbase   v5

     v4
v5

v4
Extbase
FLO W 4
Extbase
 6O%
FLO W 4
Extbase
   25%
FLO W 4
Extbase
   25%W
FLO       4
Extbase
     2O%
      W
FLO       4
Extbase
      W
FLO       4
Extbase
FLOW 3
What is Extbase
  all about?
Extbase
OOP     A ggregate    DDD

       Extbase
                            V iew
          Entity           Hel per
M VC
                     VfB
  R epository
Extbase
 Value
clean architecture
    domain driven
       modular
       patterns
rapid development
  use conventions
   stay focused
    be relieved
smooth transition
       you
      code
      data
What is Extbase
  all about?
tp://commons.wikimedia.org/wiki/File:Z%C3%BCrich_-_Seefeld_-_Heureka_IMG_1757.JPG
tx_ttnews                                                         3397
                  tx_pbsurvey_pi1                                                   253O
                  tx_ttproducts_pi1                                                 1O9O
                  tx_mmforum_pi1                                                    6126
                  tx_veguestbook_pi1                                                1156

tp://commons.wikimedia.org/wiki/File:Z%C3%BCrich_-_Seefeld_-_Heureka_IMG_1757.JPG
/**
	    * Main news function: calls the init_news() function and decides by the given CODEs which of the
	    * functions to display news should by called.
	    *
	    * @param	 string	    	    $content : function output is added to this
	    * @param	 array	
                    	     $conf : configuration array
	    * @return	string	    	    $content: complete content generated by the tt_news plugin
	    */
	   function main_news($content, $conf) {
	   	    $this->local_cObj = t3lib_div::makeInstance('tslib_cObj'); // Local cObj.
	   	    $this->init($conf);

	   	    if ($this->conf['displayCurrentRecord']) {
	   	    	    $this->config['code'] = $this->conf['defaultCode']?trim($this->conf['defaultCode']):'SINGLE';
	   	    	    $this->tt_news_uid = $this->cObj->data['uid'];
	   	    }

	   	    // get codes and decide which function is used to process the content
	   	    $codes = t3lib_div::trimExplode(',', $this->config['code']?$this->config['code']:$this->conf['defaultCode'], 1);
	   	    if (!count($codes)) { // no code at all
	   	    	    $codes = array();
	   	    	    $noCode = true;
	   	    }

	   	    while (list(, $theCode) = each($codes)) {
	   	    	    $theCode = (string)strtoupper(trim($theCode));
	   	    	    $this->theCode = $theCode;
	   	    	    switch ($theCode) {
	   	    	    	     case 'SINGLE':
	   	    	    	     $content .= $this->displaySingle();
	   	    	    	     break;
	   	    	    	     case 'VERSION_PREVIEW':
	   	    	    	     $content .= $this->displayVersionPreview();
	   	    	    	     break;
	   	    	    	     case 'LATEST':
	   	    	    	     case 'LIST':
	   	    	    	     case 'SEARCH':
	   	    	    	     case 'XML':
	   	    	    	     $content .= $this->displayList();
	   	    	    	     break;
	   	    	    	     case 'AMENU':
	   	    	    	     $content .= $this->newsArchiveMenu();
	   	    	    	     break;
	   	    	    	     case 'CATMENU':
	   	    	    	     $content .= $this->displayCatMenu();
	   	    	    	     break;
	   	    	    	     default:
/**
	    * Displays the "single view" of a news article. Is also used when displaying single news records with the "insert records" content element.
	    *
	    * @return	string	    	    html-code for the "single view"
	    */
	   function displaySingle() {
	   	    $singleWhere = 'tt_news.uid=' . intval($this->tt_news_uid);
	   	    $singleWhere .= ' AND type NOT IN(1,2)' . $this->enableFields; // only real news -> type=0

	   	    $res   = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
	   	    	      '*',
	   	    	      'tt_news',
	   	    	      $singleWhere);

	   	    $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
	   	    // get the translated record if the content language is not the default language
	   	    if ($GLOBALS['TSFE']->sys_language_content) {
	   	    	    $OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
	   	    	    $row = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tt_news', $row, $GLOBALS['TSFE']->sys_language_content, $OLmode);
	   	    }
	   	    if ($this->versioningEnabled) {
	   	    	    // get workspaces Overlay
	   	    	    $GLOBALS['TSFE']->sys_page->versionOL('tt_news',$row);
	   	    	    // fix pid for record from workspace
	   	    	    $GLOBALS['TSFE']->sys_page->fixVersioningPid('tt_news',$row);
	   	    }
	   	    $GLOBALS['TSFE']->displayedNews[]=$row['uid'];

	   	    if (is_array($row) && ($row['pid'] > 0 || $this->vPrev)) { // never display versions of a news record (having pid=-1) for normal website users
	   	    	    	     // Get the subpart code
	   	    	    if ($this->conf['displayCurrentRecord']) {
	   	    	    	     $item = trim($this->getNewsSubpart($this->templateCode, $this->spMarker('###TEMPLATE_SINGLE_RECORDINSERT###'), $row));
	   	    	    }
	   	    	    if (!$item) {
	   	    	    	     $item = $this->getNewsSubpart($this->templateCode, $this->spMarker('###TEMPLATE_SINGLE###'), $row);
	   	    	    }
	   	    	    	     // reset marker array
	   	    	    $wrappedSubpartArray = array();
	   	    	    	     // build the backToList link
	   	    	    if ($this->conf['useHRDates']) {
	   	    	    	     $pointerName = 'pointer';
	   	    	    	     $wrappedSubpartArray['###LINK_ITEM###'] = explode('|', $this->pi_linkTP_keepPIvars('|', array(
	   	    	    	     	    'tt_news' => null,
	   	    	    	     	    'backPid' => null,
	   	    	    	     	    $this->config['singleViewPointerName'] => null,
	   	    	    	     	    'pS' => null,
	   	    	    	     	    'pL' => null), $this->allowCaching, ($this->conf['dontUseBackPid']?1:0), $this->config['backPid']));
if ($this->conf
['useHRDates']) {
	                      	
	                      	
$pointerName =
'pointer';
	                      	
	                      	
$wrappedSubpartArray
['###LINK_ITEM###'] =
explode('|', $this-
>pi_linkTP_keepPIvars
('|', array(
	                      	
	                      	
	
'tt_news' => null,
	                      	
	                      	
	
'backPid' => null,
	                      	
	                      	
	
$this->config
['singleViewPointerName
'] => null,
	                      	
	                      	
	
'pS' => null,
	                      	
	                      	
	
'pL' => null), $this-
>allowCaching, ($this-
>conf
['dontUseBackPid']?
1:0), $this->config
['backPid']));
	                      	
	
} else {
	                      	
	                      	
$wrappedSubpartArray
['###LINK_ITEM###'] =
explode('|', $this-
>pi_linkTP_keepPIvars
('|', array(
	                      	
	                      	
	
'tt_news' => null,
	                      	
	                      	
	
'backPid' => null,
	                      	
	                      	
	
$this->config
['singleViewPointerName
'] => null), $this-
>allowCaching, ($this-
>conf
['dontUseBackPid']?
1:0), $this->config
['backPid']));
	                      	
	
}
	                      	
	                      	
// set the title of the
single view page to the
title of the news
record
	                      	
	
if ($this->conf
['substitutePagetitle']
) {
	                      	
	                      	
$GLOBALS['TSFE']->page
['title'] = $row
['title'];
	                      	
	                      	
// set pagetitle for
indexed search to news
title
	                      	
	                      	
$GLOBALS['TSFE']-
>indexedDocTitle = $row
['title'];
	                      	
	
}
	                      	
	
if ($this->conf
['displaySingle.']
['catOrderBy']) {
	                      	
	                      	
$this->config
['catOrderBy'] = $this-
>conf['displaySingle.']
['catOrderBy'];
	                      	
	
}
	                      	
	
$markerArray = $this-
>getItemMarkerArray
($row,
'displaySingle');
	                      	
	
// Substitute
	                      	
	
$content = $this->cObj-
>substituteMarkerArrayC
ached($item,
$markerArray, array(),
$wrappedSubpartArray);
	                      	
} elseif ($this-
>sys_language_mode ==
'strict' && $this-
>tt_news_uid &&
$GLOBALS['TSFE']-
>sys_language_content)
{ // not existing
translation
	                      	
	
$noTranslMsg = $this-
>local_cObj->stdWrap
($this->pi_getLL
('noTranslMsg'), $this-
>conf
['noNewsIdMsg_stdWrap.'
]);
	                      	
	
$content =
$noTranslMsg;
	                      	
} elseif ($row['pid'] <
0) { // a non-public
version of a record was
requested
	                      	
	
$nonPlublicVersion =
$this->local_cObj-
>stdWrap($this-
>pi_getLL
('nonPlublicVersionMsg'
), $this->conf
['nonPlublicVersionMsg_
stdWrap.']);
	                      	
	
$content =
$nonPlublicVersion;
	                      	
} else { // if
singleview is shown
with no tt_news uid
given from GETvars
(&tx_ttnews[tt_news]=)
an error message is
displayed.
control flow

business logic

CRUD data

render output

other , eg. config
control flow

            business logic

aggregate   CRUD data

            render output

            other , eg. config
control flow

             business logic

generalize   CRUD data

             render output

             other , eg. config
partition
Extbase
use
      & Fluid
control flow

business logic

CRUD data

render output

other , eg. config
Controller

Domain Model

Domain Repository

View

other , eg. config
TYPO3
1
        userFunc

                    Extbase
TYPO3              Dispatcher
1
                                  2
        userFunc
                                Request
                                               BlogExample
                    Extbase
TYPO3              Dispatcher
                                          Controller
1
                                       2
        userFunc
                                    Request
                                                     BlogExample
                    Extbase
TYPO3              Dispatcher
                                              Controller

                            3
                         findByTitle('MyBlog')




                            Repository


                                                 Domain Model
                                    Blog


                                    Post



                           Comment         Tag
1
                                       2
        userFunc
                                    Request
                                                        BlogExample
                    Extbase
TYPO3              Dispatcher
                                              Controller

                            3
                         findByTitle('MyBlog')
                                                 Blog

                                                   4
                            Repository


                                                 Domain Model
                                    Blog


                                    Post



                           Comment         Tag
1
                                       2
        userFunc
                                    Request
                                                        BlogExample
                    Extbase
TYPO3              Dispatcher
                                              Controller

                            3                                   assign(Blog)

                         findByTitle('MyBlog')                   render()      5
                                                 Blog

                                                   4                   View
                            Repository


                                                 Domain Model
                                    Blog


                                    Post



                           Comment         Tag
1
                                       2
        userFunc
                                    Request
                                                         BlogExample
                    Extbase
TYPO3              Dispatcher
         HTML
                                 Response     Controller
          6
                            3                                    assign(Blog)

                         findByTitle('MyBlog')                       render()     5
                                                  Blog
                                                          Response
                                                    4                      View
                            Repository


                                                 Domain Model
                                    Blog


                                    Post



                           Comment          Tag
1
                                       2
        userFunc
                                    Request
                                                         BlogExample
                    Extbase
TYPO3              Dispatcher
         HTML
                                 Response     Controller
          6
                            3                                    assign(Blog)

                         findByTitle('MyBlog')                       render()     5
                                                  Blog
                                                          Response
                                                    4                      View
                            Repository


                                                 Domain Model
                                    Blog


                                    Post



                           Comment          Tag
1
                                       2
        userFunc
                                    Request
                                                         BlogExample
                    Extbase
TYPO3              Dispatcher
         HTML
                                 Response     Controller
          6
                            3                                    assign(Blog)

                         findByTitle('MyBlog')                       render()     5
                                                  Blog
                                                          Response
                                                    4                      View
                            Repository


                                                 Domain Model
                                    Blog


                                    Post



                           Comment          Tag
Hmmm.
                   Much better.




                   Lasagna code
              de
Spagh etti co
What's coming
Performance
  SQL queries
object tracking
    caching
Dev Experience
speaking exceptions
   documentation
    kickstarter
Catalyse
    dispatcher
persistence backend
process for patches
And beyond
 Extbase?
IMHO
http://www.sxc.hu/photo/516864/




                                  Generic Domain Models
WRUV I
William Street Rajan United
  States Virginia Indian
William Street Rajan United
  States Virginia Indian
William Street Rajan United
  States Virginia Indian
     x




     WRUVI



     William Street



     Rajan



     United States Virginia Indian
William Street Rajan United
  States Virginia Indian
     x




     WRUVI



     William Street



     Rajan



     United States Virginia Indian
William Street Rajan United
  States Virginia Indian
     x




     WRUVI



     William Street



     Rajan



     United States Virginia Indian
Organization
                             Date
        Customer

                             Event
           Invoice
                                        Publication
         Product
                                Price

                   Article                    Location

                                    Number
                                                      Image



                                                         Your Model
Generic Domain Models

 based on high quality, open standards
   OASIS CIQ 3.0 for persons, organizations, addresses, names
   BMEcat for product, suppliers, catalogs, prices
   iCalendar for calendar, events, dates
   etc.
 challenges
   XML2PHP
   interoperability
   consistent semantics
 @jochen: it's time for an example
Product Line
Engineering
Generic Domain Models       ViewHelpers



      Extbase                 Fluid



                 TYPO3 v4
Extbase              Fluid



          TYPO3 v4
Extbase              Fluid



          TYPO3 v4
Extbase              Fluid



          TYPO3 v4
Extbase              Fluid



          TYPO3 v4
platform
Generic Domain
                 ViewHelpers
    Models
                               Fluid

         TYPO3 v5

                    FLOW3
building blocks
 Generic Domain
                  ViewHelpers
     Models
                                Fluid

          TYPO3 v5

                     FLOW3
TYPO3
Generic Domain
                 ViewHelpers
    Models
                               Fluid

         TYPO3 v5

                    FLOW3
packages
P    P   P   P   P        P        P   P     P     P

Generic Domain
                     ViewHelpers
    Models
                                           Fluid

         TYPO3 v5

                        FLOW3
TYPO3 Social Site
  P    P   P   P   P        P        P   P     P     P

  Generic Domain
                       ViewHelpers
      Models
                                             Fluid

           TYPO3 v5

                          FLOW3
TYPO3 Enterprise
    P       P     P      P   P      P   P     P     P   P

 Generic Domain
                      ViewHelpers
     Models
                                            Fluid

          TYPO3 v5

                         FLOW3
TYPO3 Blog
P   P   P   P    P     P   P       P   P       P

Generic Domain
                     ViewHelpers
    Models
                                       Fluid

            TYPO3 v5

                        FLOW3
Product Line
P   P   P   P    P     P   P       P   P       P

Generic Domain
                     ViewHelpers
    Models
                                       Fluid

            TYPO3 v5

                        FLOW3
The meaning
 of things
http://webscience.org/people.html
Knublauch, Holger. KBeans Specification: Semantic Transparency for Components and
Domain Models. Technical Report FAW-TR-01001, FAW Ulm, 2001.
Semantic annotations

/**
 * A container for defining the unique characteristics of a person only
 *
 * @version $Id$
 * @copyright Copyright belongs to the respective authors
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later
 * @prefix foaf: <http://xmlns.com/foaf/0.1/>
 * @prefix owl: <http://www.w3.org/2002/07/owl#>
 * @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
 * @prefix core: <http://www.typo3.org/semantic/core/>
 * @prefix gen: <http://www.typo3.org/semantic/ext/generic/domain/model/>
 * @semantic gen:Person rdfs:subClassOf gen:Party
 * @semantic gen:Person owl:disjointWith gen:Organization
 * @semantic gen:Person core:isMemberOf gen:Organization
 */
class Tx_Generic_Domain_Model_Person extends Tx_Generic_Domain_Model_Party {

   /**
    * Party Names
    * @var Tx_Extbase_Persistence_ObjectStorage<Tx_Generic_Domain_Model_PersonName>
    * @semantic gen:partyNames gen:areOfType foaf:name
    */
   protected $partyNames;

   /**
Semantic Query with SPARQL
## Find   all authors of News Articles that are posted on a page with the english title "Welcome"
PREFIX    core:<http:://www.typo3.org/ontology/core/#>
PREFIX    generic:<http:://www.typo3.org/ontology/ext/generic/#>
PREFIX    rdfs:<http://www.w3.org/2000/01/rdf-schema#>
SELECT    $person $article
FROM      <http:://localhost/repository.rdf>
WHERE     {
          $person     rdfs:type           generic:Person .
          $person     core:authorOf       $article .
          $article    rdfs:type           core:NewsArticle .
          $article    core:isPlacedOn     $page .
          $page       core:title          "Welcome"@en .
}
[TYPO3-dev] The state of support for the Semantic Web / RDFA /
Web 3.0 in TYPO3
Jochen Rau jochen.rau at typoplanet.de
Mon Aug 31 16:26:51 CEST 2009

 • Previous message: [TYPO3-dev] The state of support for the Semantic Web / RDFA / Web 3.0 in TYPO3
 • Next message: [TYPO3-dev] The state of support for the Semantic Web / RDFA / Web 3.0 in TYPO3
 • Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

  get Extbase ready ;-)
  de ne generic domain models
  bind objects to an ontology
  elaborate on the use cases of semantic content
  make the integration of semantic web technology a movement of the community
Bastian Waidelich
               Sebastian Kurfürst
                                             Sebastian Gebhard


               Than k You                            Steffen Kamper

                                             Felix Oertel


Franz Ripfel        and the TYPO3 V5 Team for all the inspiration
                               and the beautiful code
  Ingmar Schlecht
                                                         Patrick Lobacher
                  Franz Koch
                                     Xavier Perseguers

Más contenido relacionado

La actualidad más candente

Advanced php testing in action
Advanced php testing in actionAdvanced php testing in action
Advanced php testing in actionJace Ju
 
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)Fabien Potencier
 
Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4Fabien Potencier
 
Building Lithium Apps
Building Lithium AppsBuilding Lithium Apps
Building Lithium AppsNate Abele
 
Lithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksLithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksNate Abele
 
Silex meets SOAP & REST
Silex meets SOAP & RESTSilex meets SOAP & REST
Silex meets SOAP & RESTHugo Hamon
 
PHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkPHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkG Woo
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2Hugo Hamon
 
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionLithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionNate Abele
 
dcs plus Catalogue 2015
dcs plus Catalogue 2015dcs plus Catalogue 2015
dcs plus Catalogue 2015dcs plus
 
Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3Fabien Potencier
 
Mocking Dependencies in PHPUnit
Mocking Dependencies in PHPUnitMocking Dependencies in PHPUnit
Mocking Dependencies in PHPUnitmfrost503
 
Dependency injection-zendcon-2010
Dependency injection-zendcon-2010Dependency injection-zendcon-2010
Dependency injection-zendcon-2010Fabien Potencier
 
PHP Data Objects
PHP Data ObjectsPHP Data Objects
PHP Data ObjectsWez Furlong
 
The State of Lithium
The State of LithiumThe State of Lithium
The State of LithiumNate Abele
 

La actualidad más candente (20)

Advanced php testing in action
Advanced php testing in actionAdvanced php testing in action
Advanced php testing in action
 
Functional programming with php7
Functional programming with php7Functional programming with php7
Functional programming with php7
 
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
 
Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4
 
Building Lithium Apps
Building Lithium AppsBuilding Lithium Apps
Building Lithium Apps
 
Lithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksLithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate Frameworks
 
Oops in php
Oops in phpOops in php
Oops in php
 
Silex meets SOAP & REST
Silex meets SOAP & RESTSilex meets SOAP & REST
Silex meets SOAP & REST
 
PHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkPHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php framework
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2
 
Agile database access with CakePHP 3
Agile database access with CakePHP 3Agile database access with CakePHP 3
Agile database access with CakePHP 3
 
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionLithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
 
dcs plus Catalogue 2015
dcs plus Catalogue 2015dcs plus Catalogue 2015
dcs plus Catalogue 2015
 
Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3
 
Mocking Dependencies in PHPUnit
Mocking Dependencies in PHPUnitMocking Dependencies in PHPUnit
Mocking Dependencies in PHPUnit
 
Dependency injection-zendcon-2010
Dependency injection-zendcon-2010Dependency injection-zendcon-2010
Dependency injection-zendcon-2010
 
Unittests für Dummies
Unittests für DummiesUnittests für Dummies
Unittests für Dummies
 
The most exciting features of PHP 7.1
The most exciting features of PHP 7.1The most exciting features of PHP 7.1
The most exciting features of PHP 7.1
 
PHP Data Objects
PHP Data ObjectsPHP Data Objects
PHP Data Objects
 
The State of Lithium
The State of LithiumThe State of Lithium
The State of Lithium
 

Destacado

Objektorientierte Programmierung mit extbase und fluid
Objektorientierte Programmierung mit extbase und fluidObjektorientierte Programmierung mit extbase und fluid
Objektorientierte Programmierung mit extbase und fluidOliver Klee
 
Test Driven Development with PHP
Test Driven Development with PHPTest Driven Development with PHP
Test Driven Development with PHPRogério Vicente
 
Test-Driven Development for TYPO3
Test-Driven Development for TYPO3Test-Driven Development for TYPO3
Test-Driven Development for TYPO3Oliver Klee
 
Stand das im Handbuch?
Stand das im Handbuch?Stand das im Handbuch?
Stand das im Handbuch?Oliver Klee
 
Test-Driven Development for TYPO3 @ T3CON12DE
Test-Driven Development for TYPO3 @ T3CON12DETest-Driven Development for TYPO3 @ T3CON12DE
Test-Driven Development for TYPO3 @ T3CON12DEOliver Klee
 
Semantic TYPO3
Semantic TYPO3Semantic TYPO3
Semantic TYPO3Jochen Rau
 
Test-Driven Development with FLOW3
Test-Driven Development with FLOW3Test-Driven Development with FLOW3
Test-Driven Development with FLOW3Karsten Dambekalns
 

Destacado (7)

Objektorientierte Programmierung mit extbase und fluid
Objektorientierte Programmierung mit extbase und fluidObjektorientierte Programmierung mit extbase und fluid
Objektorientierte Programmierung mit extbase und fluid
 
Test Driven Development with PHP
Test Driven Development with PHPTest Driven Development with PHP
Test Driven Development with PHP
 
Test-Driven Development for TYPO3
Test-Driven Development for TYPO3Test-Driven Development for TYPO3
Test-Driven Development for TYPO3
 
Stand das im Handbuch?
Stand das im Handbuch?Stand das im Handbuch?
Stand das im Handbuch?
 
Test-Driven Development for TYPO3 @ T3CON12DE
Test-Driven Development for TYPO3 @ T3CON12DETest-Driven Development for TYPO3 @ T3CON12DE
Test-Driven Development for TYPO3 @ T3CON12DE
 
Semantic TYPO3
Semantic TYPO3Semantic TYPO3
Semantic TYPO3
 
Test-Driven Development with FLOW3
Test-Driven Development with FLOW3Test-Driven Development with FLOW3
Test-Driven Development with FLOW3
 

Similar a Extbase and Beyond

Get into the FLOW with Extbase
Get into the FLOW with ExtbaseGet into the FLOW with Extbase
Get into the FLOW with ExtbaseJochen Rau
 
Operation Oriented Web Applications / Yokohama pm7
Operation Oriented Web Applications / Yokohama pm7Operation Oriented Web Applications / Yokohama pm7
Operation Oriented Web Applications / Yokohama pm7Masahiro Nagano
 
Internationalizing CakePHP Applications
Internationalizing CakePHP ApplicationsInternationalizing CakePHP Applications
Internationalizing CakePHP ApplicationsPierre MARTIN
 
R57shell
R57shellR57shell
R57shellady36
 
DRUPAL 8 STORAGES OVERVIEW
DRUPAL 8 STORAGES OVERVIEWDRUPAL 8 STORAGES OVERVIEW
DRUPAL 8 STORAGES OVERVIEWDrupalCamp Kyiv
 
Meet Magento Sweden - Magento 2 Layout and Code Compilation for Performance
Meet Magento Sweden - Magento 2 Layout and Code Compilation for PerformanceMeet Magento Sweden - Magento 2 Layout and Code Compilation for Performance
Meet Magento Sweden - Magento 2 Layout and Code Compilation for PerformanceIvan Chepurnyi
 
PhpUnit - The most unknown Parts
PhpUnit - The most unknown PartsPhpUnit - The most unknown Parts
PhpUnit - The most unknown PartsBastian Feder
 
TYPO3 Extension development using new Extbase framework
TYPO3 Extension development using new Extbase frameworkTYPO3 Extension development using new Extbase framework
TYPO3 Extension development using new Extbase frameworkChristian Trabold
 
Let's write secure Drupal code! - 13.09.2018 @ Drupal Europe, Darmstadt, Germany
Let's write secure Drupal code! - 13.09.2018 @ Drupal Europe, Darmstadt, GermanyLet's write secure Drupal code! - 13.09.2018 @ Drupal Europe, Darmstadt, Germany
Let's write secure Drupal code! - 13.09.2018 @ Drupal Europe, Darmstadt, GermanyBalázs Tatár
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxMichelangelo van Dam
 
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011Masahiro Nagano
 
Unit testing with zend framework tek11
Unit testing with zend framework tek11Unit testing with zend framework tek11
Unit testing with zend framework tek11Michelangelo van Dam
 
Zendcon 2007 Api Design
Zendcon 2007 Api DesignZendcon 2007 Api Design
Zendcon 2007 Api Designunodelostrece
 
Let's write secure Drupal code!
Let's write secure Drupal code!Let's write secure Drupal code!
Let's write secure Drupal code!Balázs Tatár
 
vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking Sebastian Marek
 

Similar a Extbase and Beyond (20)

Get into the FLOW with Extbase
Get into the FLOW with ExtbaseGet into the FLOW with Extbase
Get into the FLOW with Extbase
 
Operation Oriented Web Applications / Yokohama pm7
Operation Oriented Web Applications / Yokohama pm7Operation Oriented Web Applications / Yokohama pm7
Operation Oriented Web Applications / Yokohama pm7
 
Internationalizing CakePHP Applications
Internationalizing CakePHP ApplicationsInternationalizing CakePHP Applications
Internationalizing CakePHP Applications
 
R57shell
R57shellR57shell
R57shell
 
Lithium Best
Lithium Best Lithium Best
Lithium Best
 
DRUPAL 8 STORAGES OVERVIEW
DRUPAL 8 STORAGES OVERVIEWDRUPAL 8 STORAGES OVERVIEW
DRUPAL 8 STORAGES OVERVIEW
 
Separation of concerns - DPC12
Separation of concerns - DPC12Separation of concerns - DPC12
Separation of concerns - DPC12
 
Meet Magento Sweden - Magento 2 Layout and Code Compilation for Performance
Meet Magento Sweden - Magento 2 Layout and Code Compilation for PerformanceMeet Magento Sweden - Magento 2 Layout and Code Compilation for Performance
Meet Magento Sweden - Magento 2 Layout and Code Compilation for Performance
 
PhpUnit - The most unknown Parts
PhpUnit - The most unknown PartsPhpUnit - The most unknown Parts
PhpUnit - The most unknown Parts
 
Shell.php
Shell.phpShell.php
Shell.php
 
TYPO3 Extension development using new Extbase framework
TYPO3 Extension development using new Extbase frameworkTYPO3 Extension development using new Extbase framework
TYPO3 Extension development using new Extbase framework
 
Let's write secure Drupal code! - 13.09.2018 @ Drupal Europe, Darmstadt, Germany
Let's write secure Drupal code! - 13.09.2018 @ Drupal Europe, Darmstadt, GermanyLet's write secure Drupal code! - 13.09.2018 @ Drupal Europe, Darmstadt, Germany
Let's write secure Drupal code! - 13.09.2018 @ Drupal Europe, Darmstadt, Germany
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBenelux
 
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
Designing Opeation Oriented Web Applications / YAPC::Asia Tokyo 2011
 
Unit testing with zend framework tek11
Unit testing with zend framework tek11Unit testing with zend framework tek11
Unit testing with zend framework tek11
 
Zendcon 2007 Api Design
Zendcon 2007 Api DesignZendcon 2007 Api Design
Zendcon 2007 Api Design
 
Migrare da symfony 1 a Symfony2
 Migrare da symfony 1 a Symfony2  Migrare da symfony 1 a Symfony2
Migrare da symfony 1 a Symfony2
 
Let's write secure Drupal code!
Let's write secure Drupal code!Let's write secure Drupal code!
Let's write secure Drupal code!
 
Add loop shortcode
Add loop shortcodeAdd loop shortcode
Add loop shortcode
 
vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking
 

Último

New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 

Último (20)

New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 

Extbase and Beyond

  • 1. Extbase and Beyond Jochen Rau <jochen.rau@typoplanet.de> Irving, Texas May 22, 2010
  • 6.
  • 7. 6O% selfemployed 6O% father
  • 9. 5 years: Fraunhofer- Gesellschaft German Aerospace Center
  • 11. What is Extbase all about?
  • 13. v5 v4
  • 14. v5 v4
  • 15. v5 v4
  • 16. Extbase v5 v4
  • 17. v5 v4
  • 20. Extbase 25% FLO W 4
  • 21. Extbase 25%W FLO 4
  • 22. Extbase 2O% W FLO 4
  • 23. Extbase W FLO 4
  • 25. What is Extbase all about?
  • 27. OOP A ggregate DDD Extbase V iew Entity Hel per M VC VfB R epository
  • 29. clean architecture domain driven modular patterns
  • 30. rapid development use conventions stay focused be relieved
  • 31. smooth transition you code data
  • 32. What is Extbase all about?
  • 34. tx_ttnews 3397 tx_pbsurvey_pi1 253O tx_ttproducts_pi1 1O9O tx_mmforum_pi1 6126 tx_veguestbook_pi1 1156 tp://commons.wikimedia.org/wiki/File:Z%C3%BCrich_-_Seefeld_-_Heureka_IMG_1757.JPG
  • 35. /** * Main news function: calls the init_news() function and decides by the given CODEs which of the * functions to display news should by called. * * @param string $content : function output is added to this * @param array $conf : configuration array * @return string $content: complete content generated by the tt_news plugin */ function main_news($content, $conf) { $this->local_cObj = t3lib_div::makeInstance('tslib_cObj'); // Local cObj. $this->init($conf); if ($this->conf['displayCurrentRecord']) { $this->config['code'] = $this->conf['defaultCode']?trim($this->conf['defaultCode']):'SINGLE'; $this->tt_news_uid = $this->cObj->data['uid']; } // get codes and decide which function is used to process the content $codes = t3lib_div::trimExplode(',', $this->config['code']?$this->config['code']:$this->conf['defaultCode'], 1); if (!count($codes)) { // no code at all $codes = array(); $noCode = true; } while (list(, $theCode) = each($codes)) { $theCode = (string)strtoupper(trim($theCode)); $this->theCode = $theCode; switch ($theCode) { case 'SINGLE': $content .= $this->displaySingle(); break; case 'VERSION_PREVIEW': $content .= $this->displayVersionPreview(); break; case 'LATEST': case 'LIST': case 'SEARCH': case 'XML': $content .= $this->displayList(); break; case 'AMENU': $content .= $this->newsArchiveMenu(); break; case 'CATMENU': $content .= $this->displayCatMenu(); break; default:
  • 36. /** * Displays the "single view" of a news article. Is also used when displaying single news records with the "insert records" content element. * * @return string html-code for the "single view" */ function displaySingle() { $singleWhere = 'tt_news.uid=' . intval($this->tt_news_uid); $singleWhere .= ' AND type NOT IN(1,2)' . $this->enableFields; // only real news -> type=0 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery( '*', 'tt_news', $singleWhere); $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res); // get the translated record if the content language is not the default language if ($GLOBALS['TSFE']->sys_language_content) { $OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':''); $row = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tt_news', $row, $GLOBALS['TSFE']->sys_language_content, $OLmode); } if ($this->versioningEnabled) { // get workspaces Overlay $GLOBALS['TSFE']->sys_page->versionOL('tt_news',$row); // fix pid for record from workspace $GLOBALS['TSFE']->sys_page->fixVersioningPid('tt_news',$row); } $GLOBALS['TSFE']->displayedNews[]=$row['uid']; if (is_array($row) && ($row['pid'] > 0 || $this->vPrev)) { // never display versions of a news record (having pid=-1) for normal website users // Get the subpart code if ($this->conf['displayCurrentRecord']) { $item = trim($this->getNewsSubpart($this->templateCode, $this->spMarker('###TEMPLATE_SINGLE_RECORDINSERT###'), $row)); } if (!$item) { $item = $this->getNewsSubpart($this->templateCode, $this->spMarker('###TEMPLATE_SINGLE###'), $row); } // reset marker array $wrappedSubpartArray = array(); // build the backToList link if ($this->conf['useHRDates']) { $pointerName = 'pointer'; $wrappedSubpartArray['###LINK_ITEM###'] = explode('|', $this->pi_linkTP_keepPIvars('|', array( 'tt_news' => null, 'backPid' => null, $this->config['singleViewPointerName'] => null, 'pS' => null, 'pL' => null), $this->allowCaching, ($this->conf['dontUseBackPid']?1:0), $this->config['backPid']));
  • 37. if ($this->conf ['useHRDates']) { $pointerName = 'pointer'; $wrappedSubpartArray ['###LINK_ITEM###'] = explode('|', $this- >pi_linkTP_keepPIvars ('|', array( 'tt_news' => null, 'backPid' => null, $this->config ['singleViewPointerName '] => null, 'pS' => null, 'pL' => null), $this- >allowCaching, ($this- >conf ['dontUseBackPid']? 1:0), $this->config ['backPid'])); } else { $wrappedSubpartArray ['###LINK_ITEM###'] = explode('|', $this- >pi_linkTP_keepPIvars ('|', array( 'tt_news' => null, 'backPid' => null, $this->config ['singleViewPointerName '] => null), $this- >allowCaching, ($this- >conf ['dontUseBackPid']? 1:0), $this->config ['backPid'])); } // set the title of the single view page to the title of the news record if ($this->conf ['substitutePagetitle'] ) { $GLOBALS['TSFE']->page ['title'] = $row ['title']; // set pagetitle for indexed search to news title $GLOBALS['TSFE']- >indexedDocTitle = $row ['title']; } if ($this->conf ['displaySingle.'] ['catOrderBy']) { $this->config ['catOrderBy'] = $this- >conf['displaySingle.'] ['catOrderBy']; } $markerArray = $this- >getItemMarkerArray ($row, 'displaySingle'); // Substitute $content = $this->cObj- >substituteMarkerArrayC ached($item, $markerArray, array(), $wrappedSubpartArray); } elseif ($this- >sys_language_mode == 'strict' && $this- >tt_news_uid && $GLOBALS['TSFE']- >sys_language_content) { // not existing translation $noTranslMsg = $this- >local_cObj->stdWrap ($this->pi_getLL ('noTranslMsg'), $this- >conf ['noNewsIdMsg_stdWrap.' ]); $content = $noTranslMsg; } elseif ($row['pid'] < 0) { // a non-public version of a record was requested $nonPlublicVersion = $this->local_cObj- >stdWrap($this- >pi_getLL ('nonPlublicVersionMsg' ), $this->conf ['nonPlublicVersionMsg_ stdWrap.']); $content = $nonPlublicVersion; } else { // if singleview is shown with no tt_news uid given from GETvars (&tx_ttnews[tt_news]=) an error message is displayed.
  • 38. control flow business logic CRUD data render output other , eg. config
  • 39. control flow business logic aggregate CRUD data render output other , eg. config
  • 40. control flow business logic generalize CRUD data render output other , eg. config
  • 42. Extbase use & Fluid
  • 43. control flow business logic CRUD data render output other , eg. config
  • 45. TYPO3
  • 46. 1 userFunc Extbase TYPO3 Dispatcher
  • 47. 1 2 userFunc Request BlogExample Extbase TYPO3 Dispatcher Controller
  • 48. 1 2 userFunc Request BlogExample Extbase TYPO3 Dispatcher Controller 3 findByTitle('MyBlog') Repository Domain Model Blog Post Comment Tag
  • 49. 1 2 userFunc Request BlogExample Extbase TYPO3 Dispatcher Controller 3 findByTitle('MyBlog') Blog 4 Repository Domain Model Blog Post Comment Tag
  • 50. 1 2 userFunc Request BlogExample Extbase TYPO3 Dispatcher Controller 3 assign(Blog) findByTitle('MyBlog') render() 5 Blog 4 View Repository Domain Model Blog Post Comment Tag
  • 51. 1 2 userFunc Request BlogExample Extbase TYPO3 Dispatcher HTML Response Controller 6 3 assign(Blog) findByTitle('MyBlog') render() 5 Blog Response 4 View Repository Domain Model Blog Post Comment Tag
  • 52. 1 2 userFunc Request BlogExample Extbase TYPO3 Dispatcher HTML Response Controller 6 3 assign(Blog) findByTitle('MyBlog') render() 5 Blog Response 4 View Repository Domain Model Blog Post Comment Tag
  • 53. 1 2 userFunc Request BlogExample Extbase TYPO3 Dispatcher HTML Response Controller 6 3 assign(Blog) findByTitle('MyBlog') render() 5 Blog Response 4 View Repository Domain Model Blog Post Comment Tag
  • 54. Hmmm. Much better. Lasagna code de Spagh etti co
  • 56. Performance SQL queries object tracking caching
  • 57. Dev Experience speaking exceptions documentation kickstarter
  • 58. Catalyse dispatcher persistence backend process for patches
  • 60. IMHO
  • 61. http://www.sxc.hu/photo/516864/ Generic Domain Models
  • 63. William Street Rajan United States Virginia Indian
  • 64. William Street Rajan United States Virginia Indian
  • 65. William Street Rajan United States Virginia Indian x WRUVI William Street Rajan United States Virginia Indian
  • 66. William Street Rajan United States Virginia Indian x WRUVI William Street Rajan United States Virginia Indian
  • 67. William Street Rajan United States Virginia Indian x WRUVI William Street Rajan United States Virginia Indian
  • 68.
  • 69.
  • 70.
  • 71. Organization Date Customer Event Invoice Publication Product Price Article Location Number Image Your Model
  • 72. Generic Domain Models based on high quality, open standards OASIS CIQ 3.0 for persons, organizations, addresses, names BMEcat for product, suppliers, catalogs, prices iCalendar for calendar, events, dates etc. challenges XML2PHP interoperability consistent semantics @jochen: it's time for an example
  • 74. Generic Domain Models ViewHelpers Extbase Fluid TYPO3 v4
  • 75. Extbase Fluid TYPO3 v4
  • 76. Extbase Fluid TYPO3 v4
  • 77. Extbase Fluid TYPO3 v4
  • 78. Extbase Fluid TYPO3 v4
  • 79. platform Generic Domain ViewHelpers Models Fluid TYPO3 v5 FLOW3
  • 80. building blocks Generic Domain ViewHelpers Models Fluid TYPO3 v5 FLOW3
  • 81. TYPO3 Generic Domain ViewHelpers Models Fluid TYPO3 v5 FLOW3
  • 82. packages P P P P P P P P P P Generic Domain ViewHelpers Models Fluid TYPO3 v5 FLOW3
  • 83. TYPO3 Social Site P P P P P P P P P P Generic Domain ViewHelpers Models Fluid TYPO3 v5 FLOW3
  • 84. TYPO3 Enterprise P P P P P P P P P P Generic Domain ViewHelpers Models Fluid TYPO3 v5 FLOW3
  • 85. TYPO3 Blog P P P P P P P P P P Generic Domain ViewHelpers Models Fluid TYPO3 v5 FLOW3
  • 86. Product Line P P P P P P P P P P Generic Domain ViewHelpers Models Fluid TYPO3 v5 FLOW3
  • 87. The meaning of things
  • 88.
  • 89.
  • 90.
  • 92.
  • 93. Knublauch, Holger. KBeans Specification: Semantic Transparency for Components and Domain Models. Technical Report FAW-TR-01001, FAW Ulm, 2001.
  • 94. Semantic annotations /** * A container for defining the unique characteristics of a person only * * @version $Id$ * @copyright Copyright belongs to the respective authors * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later * @prefix foaf: <http://xmlns.com/foaf/0.1/> * @prefix owl: <http://www.w3.org/2002/07/owl#> * @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> * @prefix core: <http://www.typo3.org/semantic/core/> * @prefix gen: <http://www.typo3.org/semantic/ext/generic/domain/model/> * @semantic gen:Person rdfs:subClassOf gen:Party * @semantic gen:Person owl:disjointWith gen:Organization * @semantic gen:Person core:isMemberOf gen:Organization */ class Tx_Generic_Domain_Model_Person extends Tx_Generic_Domain_Model_Party { /** * Party Names * @var Tx_Extbase_Persistence_ObjectStorage<Tx_Generic_Domain_Model_PersonName> * @semantic gen:partyNames gen:areOfType foaf:name */ protected $partyNames; /**
  • 95. Semantic Query with SPARQL ## Find all authors of News Articles that are posted on a page with the english title "Welcome" PREFIX core:<http:://www.typo3.org/ontology/core/#> PREFIX generic:<http:://www.typo3.org/ontology/ext/generic/#> PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> SELECT $person $article FROM <http:://localhost/repository.rdf> WHERE { $person rdfs:type generic:Person . $person core:authorOf $article . $article rdfs:type core:NewsArticle . $article core:isPlacedOn $page . $page core:title "Welcome"@en . }
  • 96. [TYPO3-dev] The state of support for the Semantic Web / RDFA / Web 3.0 in TYPO3 Jochen Rau jochen.rau at typoplanet.de Mon Aug 31 16:26:51 CEST 2009 • Previous message: [TYPO3-dev] The state of support for the Semantic Web / RDFA / Web 3.0 in TYPO3 • Next message: [TYPO3-dev] The state of support for the Semantic Web / RDFA / Web 3.0 in TYPO3 • Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] get Extbase ready ;-) de ne generic domain models bind objects to an ontology elaborate on the use cases of semantic content make the integration of semantic web technology a movement of the community
  • 97. Bastian Waidelich Sebastian Kurfürst Sebastian Gebhard Than k You Steffen Kamper Felix Oertel Franz Ripfel and the TYPO3 V5 Team for all the inspiration and the beautiful code Ingmar Schlecht Patrick Lobacher Franz Koch Xavier Perseguers