SlideShare a Scribd company logo
Überblick über FLOW3 mit dem
  Blog-Package als Referenz
Agenda


     • Domain Model
     • Package Aufbau
     • Model
        • Validation
        • Association Mapping
     • Model und Repository
     • Repository
        • Blog Repsitory
        • Post Repository
     • Controller
     • View
     • Validation
     • Routing




Datum: 10.01.2012     FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                         2
Domain Model




Datum: 10.01.2012   FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                       3
Package Aufbau




Datum: 10.01.2012   FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                       4
Model


    • Namespace
    namespaceBlogDomainModel;


   • Namespace
    namespace TYPO3BlogDomainModel;


    • Namespace
    namespace TYPO3BlogDomainModel;


   • Namespace
    namespace TYPO3BlogDomainModel;



Datum: 06.12.2011     FLOW3 Einführung / log Package www.cross-content.com   @MarkusGoldbeck
                                                                                         5
TYPO3BlogDomainModel Post


    • Namespace
    namespace TYPO3BlogDomainModel;

   • Annotations
    use DoctrineORMMapping as ORM;
    use TYPO3FLOW3Annotations as FLOW3;

   • Class Post
      • Dieses Model nach den Konzepten von DDD eine Entitiy
      • Instanzen dieser Klasse können gespeichert werden
    /**
     * A blog
     *
     * @FLOW3Entity
     */
    class Post {
Datum: 10.01.2012      FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                          6
TYPO3BlogDomainModel Post


    • Properties
       • Variablen Deklaration als String
       • Validierung auf Datentyp und Länge
       • Validierung des Datentyps innerhalb des Models und Repositories

    /**
     * The post‘s title.
     *
     * @var string
     * @FLOW3Validate(type="Text")
     * @FLOW3Validate(type="StringLength", options={ "minimum"=1,
    "maximum"=80 })
     * @ORMColumn(length=80)
     */
    protected $title = '';




Datum: 10.01.2012     FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                         7
TYPO3BlogDomainModel Post


    • Property $date
       • Deklaration als Date Objekt
       • Identity
    /**
    * @FLOW3Identity
    * @var DateTime
    */
    protected $date;

    • Property $blog
       • Deklaration als Blog Objekt
       • Association Mapping OneToMany
    /**
    * @var TYPO3BlogDomainModelBlog
    * @ORMManyToOne(inversedBy="posts")
    */
    protected $blog;

Datum: 10.01.2012      FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                          8
Association Mapping


    • OneToMany <-> ManyToOne
     /** The posts contained in this blog
     * @var DoctrineCommonCollectionsCollection<TYPO3Blog
    DomainModelPost>
     * @ORMOneToMany(mappedBy="blog")
     * @ORMOrderBy({"date" = "DESC"})
     */
    protected $posts;

      Model Blog                                                            Model Post
       $posts                                                                 $blog
    /**The blog
     * @var TYPO3BlogDomainModelBlog
     * @ORMManyToOne(inversedBy="posts")
     */
    protected $blog;

Datum: 10.01.2012   FLOW3 Einführung / Blog Package www.cross-content.com        @MarkusGoldbeck
                                                                                            9
Association Mapping


    • ManyToMany <-> ManyToMany
    /**
    * @var DoctrineCommonCollectionsCollection<TYPO3Blog
    DomainModelTag>
    * @ORMManyToMany(inversedBy="posts")
    */
    protected $tags;

      Model Post                                                            Model Tag
        $tags                                                                $posts
    /**The posts tagged with this tag
    * @var DoctrineCommonCollectionsCollection<TYPO3Blog
    DomainModelPost>
    * @ORMManyToMany(mappedBy="tags")
    */
    protected $posts;

Datum: 10.01.2012   FLOW3 Einführung / Blog Package www.cross-content.com        @MarkusGoldbeck
                                                                                           10
TYPO3BlogDomainModel Blog




Datum: 10.01.2012   FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                      11
TYPO3BlogDomainModel Post




Datum: 10.01.2012   FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                      12
TYPO3BlogDomainModel Blog


    • Setter
     /**Sets this blog's title
     * @param string $title The blog's title
     * @return void
     */
     public function setTitle($title) {
        $this->title = $title;
     }


    • Getter
    /**Returns the blog's title
    * @return string The blog's title
    */
    public function getTitle() {
       return $this->title;
    }


Datum: 10.01.2012   FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                      13
Model und Repositories




Datum: 10.01.2012   FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                      14
Blog Repository


    • Standard Blog Repository
    <?php
    namespace TYPO3BlogDomainRepository;
    /*
      * This script belongs to the FLOW3 package "TYPO3.Blog".
    */
    /**
      * A repository for Blogs
      *
      * @FLOW3Scope("singleton")
      */
    class BlogRepository extends TYPO3FLOW3PersistenceRepository
    {
             // add customized methods here
    }
    ?>



Datum: 10.01.2012     FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                        15
Blog Repository


    • Standard Methoden des Repositories
       • add
       • remove
       • findAll
       • findBy* (magic methods)
       • findOneBy* (magic methods)

    findBy* und findOneBy* sind sog. Magic Methods die durch das Repository
    zur Verfügung gestellt werden. Diese Methoden erlauben einen Objekte durch
    Properties zu finden.
    Das BlogRepository zum Beispiel erlaubt einem die Magic Methoden
    findByDescription('foo') oder findOneByTitle('bar')auszuführen.




Datum: 10.01.2012     FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                        16
Post Repository


    • Post Repository spezifische Methode findByBlog
    /**
      * Finds posts by the specified blog
      * @param TYPO3BlogDomainModelBlog $blog The blog the post
    must refer to
      * @param integer $limit The number of posts to return at max
      * @return TYPO3FLOW3PersistenceQueryResultProxy The posts
      */
    public function findByBlog(TYPO3BlogDomainModelBlog $blog)
    {
       $query = $this->createQuery();
       return $query->matching($query->equals('blog', $blog))
               ->setOrderings(
                 array('date' => QueryInterface::ORDER_DESCENDING))
               ->execute();
    }



Datum: 10.01.2012    FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                       17
Post Repository


    • Post Repository spezifische Methode findByTagAndBlog
    /**Finds posts by the specified tag and blog
    * @param TYPO3BlogDomainModelTag $tag
    * @param TYPO3BlogDomainModelBlog $blog The blog the post
    must refer to
    * @return TYPO3FLOW3PersistenceQueryResultProxy The posts */
    public function findByTagAndBlog(TYPO3BlogDomainModelTag
    $tag, TYPO3BlogDomainModelBlog $blog) {
         $query = $this->createQuery();
         return $query->matching(
              $query->logicalAnd(
                $query->equals('blog', $blog),
                $query->contains('tags', $tag)
              )
           )
           ->setOrderings(array('date' =>
    QueryInterface::ORDER_DESCENDING))
           ->execute();
      }
Datum: 10.01.2012    FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                       18
Post Repository


    • Post Repository spezifische Methode findRecentByBlog
    /**
    * Finds most recent posts by the specified blog
    *
    * @param TYPO3BlogDomainModelBlog $blog The blog the post
    must refer to
    * @param integer $limit The number of posts to return at max
    * @return TYPO3FLOW3PersistenceQueryResultProxy The posts
    */
    public function findRecentByBlog(TYPO3BlogDomainModelBlog
    $blog, $limit = 5) {
         $query = $this->createQuery();
         return $query->matching($query->equals('blog', $blog))
           ->setOrderings(array('date' =>
    QueryInterface::ORDER_DESCENDING))
           ->setLimit($limit)
           ->execute();
       }

Datum: 10.01.2012    FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                       19
Post Controller


    • Post Controller indexAction()
    /**
    * List action for this controller. Displays latest posts
    * @param TYPO3BlogDomainModelTag $tag The tag to display posts for
    * @param TYPO3BlogDomainModelCategory $category The category to display posts
    for
    * @return void
    */
    public function indexAction(TYPO3BlogDomainModelTag $tag = NULL, TYPO3Blog
    DomainModelCategory $category = NULL) {
        if ($tag === NULL && $category === NULL) {
           $posts = $this->postRepository->findByBlog($this->blog);
        } elseif ($tag !== NULL) {
           $posts = $this->postRepository->findByTagAndBlog($tag, $this->blog);
           $this->view->assign('tag', $tag);
        } else {
           $posts = $this->postRepository->findByCategoryAndBlog($category, $this->blog);
           $this->view->assign('category', $category);
        }
        $this->view->assign('blog', $this->blog);
        $this->view->assign('posts', $posts);
        $this->view->assign('recentPosts', $this->postRepository->findRecentByBlog($this-
    >blog));
    }


Datum: 10.01.2012        FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                            20
Post Controller


    • Post Controller Dependency Injection
    /**
    * @FLOW3Inject
    * @var TYPO3BlogDomainRepositoryCategoryRepository
    */
    protected $categoryRepository;

    /**Displays a form for creating a new post
    * @return void
    */
    public function newAction() {
       $account = $this->findCurrentAccount();
       $newPost = new TYPO3BlogDomainModelPost();
       $newPost->setAuthor($account->getParty()->getName()->getFullName());

       $this->view->assign('blog', $this->blog);
       $this->view->assign('existingPosts', $this->postRepository->findByBlog($this-
    >blog));
       $this->view->assign('categories', $this->categoryRepository->findAll());
       $this->view->assign('newPost', $newPost);
    }




Datum: 10.01.2012       FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                          21
View




Datum: 10.01.2012   FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                      22
View


    • Master Template - /Private/Layouts/Master.html
    <body>
       <div id="header">
           <!-- some stuff -->
       </div>
       <div id="maincontainer">
           <div id="mainbox"><f:render section="mainbox" /></div>

    • Post Template - /Private/Template/Post/Edit.html
    <f:layout name="Master" />         /Private/Layouts/Master.html
    <f:section name="mainbox">
       <!-- some formular-->
       <f:render partial="FormErrors" arguments="{for: 'post'}" />
    </f:section>                   /Private/Partials/FormErrors.html
    • Partial Template - /Private/Partials/FormErrors.html
    <f:form.validationResults for="{for}">
       <f:if condition="{validationResults.flattenedErrors}">
          <!-- -->

       </f:if>
    </f:form.validationResults>

Datum: 10.01.2012        FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                           23
View


    • security - /Private/Templates/Post/Index.html
    <f:security.ifHasRole role="Editor">
       <div id="navigation">
           <span class="buttons"><f:link.action action="new" controller="Post"><img
    src="{f:uri.resource(path: 'Icons/FamFamFam/page_add.png')}"
    title="{f:translate(value: 'Create a new post')}"/></f:link.action></span>
           <div class="clear"></div>
       </div>
    </f:security.ifHasRole>




Datum: 10.01.2012        FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                           24
Validation


    • Partial Template - /Private/Partials/FormErrors.html
    <f:form.validationResults for="{for}">      Objekt Post wurde übergeben
       <f:if condition="{validationResults.flattenedErrors}">
           <dl class="errors">
              <f:for each="{validationResults.flattenedErrors}" key="propertyPath"
    as="errors">
                  <dt> {propertyPath}: </dt>
                  <dd> <f:for each="{errors}" as="error">{error}</f:for> </dd>
              </f:for>
           </dl>
       </f:if>
    </f:form.validationResults>


    <f:render
      partial="FormErrors"
      arguments="{for: 'post'}" />




Datum: 10.01.2012       FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                          25
Routing Subroute


    • Route auf das TYPO3.Blog Package /Configuration/Routes.yaml
    ##
    # Blog subroutes

    -
        name: 'Blog'
        uriPattern: '<BlogSubroutes>'
        defaults:
          '@package': 'TYPO3.Blog'
          '@format': 'html'
        subRoutes:
          BlogSubroutes:
            package: 'TYPO3.Blog'

    • Routet auf das TYPO3.Blog Package /Packages/Application/TYPO3.Blog/
      Routes.yaml
    • Erste zutreffende Regel in Routes.yaml wird ausgeführt.
    • nur Leerzeichen verwenden, keine Tabs.

Datum: 10.01.2012    FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                       26
Routing Package


    • /Packages/Application/TYPO3.Blog/Routes.yaml
    -
        name: 'Post index'
        uriPattern:    '(posts)'
        defaults:
          '@package':    'TYPO3.Blog'
          '@controller': 'Post'
          '@action':     'index'
          '@format':     'html'

    • passt für http://mfug.demo/ und http://mfug.demo/posts, da durch die
    Klammern posts optional ist.




Datum: 10.01.2012      FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                         27
Routing Package


    • Action Routing
    •/Packages/Application/TYPO3.Blog/Routes.yaml
    -
        name: 'Post actions 1'
        uriPattern:    'posts/{@action}'
        defaults:
          '@controller': 'Post'

    • passt http://mfug.demo/posts/new




Datum: 10.01.2012     FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                        28
Routing Package


    • Object Routes Part
    •/Packages/Application/TYPO3.Blog/Routes.yaml
    http://dev.tutorial.local/post/edit?post%5B__identity%5D=229e2b23-b6f3-4422-8b7a-
    efb196dbc88b


    -
        name: 'Post actions 2'
        uriPattern:     'posts/{post}/{@action}'
        defaults:
          '@controller': 'Post'
        routeParts:
          post:
            objectType: 'TYPO3BlogDomainModelPost'
            uriPattern: '{date:Y}/{date:m}/{date:d}/{title}'


    http://dev.tutorial.local/post/2010/01/18/post-title/edit
Datum: 10.01.2012          FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                             29
Quellen


    • FLOW3 Dokumentation
      http://flow3.typo3.org/documentation/guide.html

    • FLOW3 Blog Package TYPO3.Blog
      http://forge.typo3.org/projects/show/package-typo3-blog




Datum: 10.01.2012   FLOW3 Einführung / Blog Package www.cross-content.com   @MarkusGoldbeck
                                                                                      30
Kontakt




    Cross Content Media                                      Twitter: @MarkusGoldbeck
    Gesellschaft für Online Business Solutions mbH           E-Mail: mgoldbeck@cross-content.com
    Landshuter Allee 8
                                                             www.cross-content.com
    80637 München




Datum: 10.01.2012              FLOW3 Einführung / Blog Package www.cross-content.com               @MarkusGoldbeck
                                                                                                              31

More Related Content

Similar to Einführung in FLOW3/ Blog Package

Getting Into FLOW3 (DPC12)
Getting Into FLOW3 (DPC12)Getting Into FLOW3 (DPC12)
Getting Into FLOW3 (DPC12)
Robert Lemke
 
Inside DocBlox
Inside DocBloxInside DocBlox
Inside DocBlox
Mike van Riel
 
Drupal 8 configuration system for coders and site builders - Drupalaton 2013
Drupal 8 configuration system for coders and site builders - Drupalaton 2013Drupal 8 configuration system for coders and site builders - Drupalaton 2013
Drupal 8 configuration system for coders and site builders - Drupalaton 2013
swentel
 
Fluent Development with FLOW3 1.0
Fluent Development with FLOW3 1.0Fluent Development with FLOW3 1.0
Fluent Development with FLOW3 1.0
Robert Lemke
 
IPCSE12: Getting into FLOW3
IPCSE12: Getting into FLOW3IPCSE12: Getting into FLOW3
IPCSE12: Getting into FLOW3
Robert Lemke
 
Angular 1.5 Components
Angular 1.5 ComponentsAngular 1.5 Components
Angular 1.5 Components
José Barbosa
 
MVC for TYPO3 4.3 with extbase
MVC for TYPO3 4.3 with extbaseMVC for TYPO3 4.3 with extbase
MVC for TYPO3 4.3 with extbase
Sebastian Kurfürst
 
The Beauty and the Beast
The Beauty and the BeastThe Beauty and the Beast
The Beauty and the Beast
Bastian Feder
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
Pavan Kumar N
 
Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3
Karsten Dambekalns
 
Getting Into FLOW3 (TYPO312CA)
Getting Into FLOW3 (TYPO312CA)Getting Into FLOW3 (TYPO312CA)
Getting Into FLOW3 (TYPO312CA)
Robert Lemke
 
Hands on FLOW3 (DPC12)
Hands on FLOW3 (DPC12)Hands on FLOW3 (DPC12)
Hands on FLOW3 (DPC12)
Robert Lemke
 
Documentation with sphinx @ PyHug
Documentation with sphinx @ PyHugDocumentation with sphinx @ PyHug
Documentation with sphinx @ PyHug
Jimmy Lai
 
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
Guillaume Laforge
 
IPCSE12: Hands on FLOW3
IPCSE12: Hands on FLOW3IPCSE12: Hands on FLOW3
IPCSE12: Hands on FLOW3
Robert Lemke
 
The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...
The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...
The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...
Peter Keane
 
Mongo-Drupal
Mongo-DrupalMongo-Drupal
Mongo-Drupal
Forest Mars
 
Modeling Tricks My Relational Database Never Taught Me
Modeling Tricks My Relational Database Never Taught MeModeling Tricks My Relational Database Never Taught Me
Modeling Tricks My Relational Database Never Taught Me
David Boike
 
Creating WordPress Theme Faster, Smarter & Without Swearing
Creating WordPress Theme Faster, Smarter & Without SwearingCreating WordPress Theme Faster, Smarter & Without Swearing
Creating WordPress Theme Faster, Smarter & Without Swearing
martinwolak
 
Spring dependency injection
Spring dependency injectionSpring dependency injection
Spring dependency injection
srmelody
 

Similar to Einführung in FLOW3/ Blog Package (20)

Getting Into FLOW3 (DPC12)
Getting Into FLOW3 (DPC12)Getting Into FLOW3 (DPC12)
Getting Into FLOW3 (DPC12)
 
Inside DocBlox
Inside DocBloxInside DocBlox
Inside DocBlox
 
Drupal 8 configuration system for coders and site builders - Drupalaton 2013
Drupal 8 configuration system for coders and site builders - Drupalaton 2013Drupal 8 configuration system for coders and site builders - Drupalaton 2013
Drupal 8 configuration system for coders and site builders - Drupalaton 2013
 
Fluent Development with FLOW3 1.0
Fluent Development with FLOW3 1.0Fluent Development with FLOW3 1.0
Fluent Development with FLOW3 1.0
 
IPCSE12: Getting into FLOW3
IPCSE12: Getting into FLOW3IPCSE12: Getting into FLOW3
IPCSE12: Getting into FLOW3
 
Angular 1.5 Components
Angular 1.5 ComponentsAngular 1.5 Components
Angular 1.5 Components
 
MVC for TYPO3 4.3 with extbase
MVC for TYPO3 4.3 with extbaseMVC for TYPO3 4.3 with extbase
MVC for TYPO3 4.3 with extbase
 
The Beauty and the Beast
The Beauty and the BeastThe Beauty and the Beast
The Beauty and the Beast
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
 
Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3
 
Getting Into FLOW3 (TYPO312CA)
Getting Into FLOW3 (TYPO312CA)Getting Into FLOW3 (TYPO312CA)
Getting Into FLOW3 (TYPO312CA)
 
Hands on FLOW3 (DPC12)
Hands on FLOW3 (DPC12)Hands on FLOW3 (DPC12)
Hands on FLOW3 (DPC12)
 
Documentation with sphinx @ PyHug
Documentation with sphinx @ PyHugDocumentation with sphinx @ PyHug
Documentation with sphinx @ PyHug
 
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
 
IPCSE12: Hands on FLOW3
IPCSE12: Hands on FLOW3IPCSE12: Hands on FLOW3
IPCSE12: Hands on FLOW3
 
The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...
The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...
The Role of Atom/AtomPub in Digital Archive Services at The University of Tex...
 
Mongo-Drupal
Mongo-DrupalMongo-Drupal
Mongo-Drupal
 
Modeling Tricks My Relational Database Never Taught Me
Modeling Tricks My Relational Database Never Taught MeModeling Tricks My Relational Database Never Taught Me
Modeling Tricks My Relational Database Never Taught Me
 
Creating WordPress Theme Faster, Smarter & Without Swearing
Creating WordPress Theme Faster, Smarter & Without SwearingCreating WordPress Theme Faster, Smarter & Without Swearing
Creating WordPress Theme Faster, Smarter & Without Swearing
 
Spring dependency injection
Spring dependency injectionSpring dependency injection
Spring dependency injection
 

Recently uploaded

Bedok NEWater Photostory - COM322 Assessment (Story 2)
Bedok NEWater Photostory - COM322 Assessment (Story 2)Bedok NEWater Photostory - COM322 Assessment (Story 2)
Bedok NEWater Photostory - COM322 Assessment (Story 2)
Liyana Rozaini
 
ENGLISH-7-CURRICULUM MAP- MATATAG CURRICULUM
ENGLISH-7-CURRICULUM MAP- MATATAG CURRICULUMENGLISH-7-CURRICULUM MAP- MATATAG CURRICULUM
ENGLISH-7-CURRICULUM MAP- MATATAG CURRICULUM
HappieMontevirgenCas
 
Unlocking Educational Synergy-DIKSHA & Google Classroom.pptx
Unlocking Educational Synergy-DIKSHA & Google Classroom.pptxUnlocking Educational Synergy-DIKSHA & Google Classroom.pptx
Unlocking Educational Synergy-DIKSHA & Google Classroom.pptx
bipin95
 
How to Create Sequence Numbers in Odoo 17
How to Create Sequence Numbers in Odoo 17How to Create Sequence Numbers in Odoo 17
How to Create Sequence Numbers in Odoo 17
Celine George
 
The Jewish Trinity : Sabbath,Shekinah and Sanctuary 4.pdf
The Jewish Trinity : Sabbath,Shekinah and Sanctuary 4.pdfThe Jewish Trinity : Sabbath,Shekinah and Sanctuary 4.pdf
The Jewish Trinity : Sabbath,Shekinah and Sanctuary 4.pdf
JackieSparrow3
 
How to Show Sample Data in Tree and Kanban View in Odoo 17
How to Show Sample Data in Tree and Kanban View in Odoo 17How to Show Sample Data in Tree and Kanban View in Odoo 17
How to Show Sample Data in Tree and Kanban View in Odoo 17
Celine George
 
Odoo 17 Social Marketing - Lead Generation On Facebook
Odoo 17 Social Marketing - Lead Generation On FacebookOdoo 17 Social Marketing - Lead Generation On Facebook
Odoo 17 Social Marketing - Lead Generation On Facebook
Celine George
 
Lecture_Notes_Unit4_Chapter_8_9_10_RDBMS for the students affiliated by alaga...
Lecture_Notes_Unit4_Chapter_8_9_10_RDBMS for the students affiliated by alaga...Lecture_Notes_Unit4_Chapter_8_9_10_RDBMS for the students affiliated by alaga...
Lecture_Notes_Unit4_Chapter_8_9_10_RDBMS for the students affiliated by alaga...
Murugan Solaiyappan
 
matatag curriculum education for Kindergarten
matatag curriculum education for Kindergartenmatatag curriculum education for Kindergarten
matatag curriculum education for Kindergarten
SarahAlie1
 
The basics of sentences session 10pptx.pptx
The basics of sentences session 10pptx.pptxThe basics of sentences session 10pptx.pptx
The basics of sentences session 10pptx.pptx
heathfieldcps1
 
National Learning Camp Grade 7 ENGLISH 7-LESSON 7.pptx
National Learning Camp Grade 7 ENGLISH 7-LESSON 7.pptxNational Learning Camp Grade 7 ENGLISH 7-LESSON 7.pptx
National Learning Camp Grade 7 ENGLISH 7-LESSON 7.pptx
EdsNatividad
 
No, it's not a robot: prompt writing for investigative journalism
No, it's not a robot: prompt writing for investigative journalismNo, it's not a robot: prompt writing for investigative journalism
No, it's not a robot: prompt writing for investigative journalism
Paul Bradshaw
 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
marianell3076
 
Edukasyong Pantahanan at Pangkabuhayan 1: Personal Hygiene
Edukasyong Pantahanan at  Pangkabuhayan 1: Personal HygieneEdukasyong Pantahanan at  Pangkabuhayan 1: Personal Hygiene
Edukasyong Pantahanan at Pangkabuhayan 1: Personal Hygiene
MJDuyan
 
NLC Grade 3.................................... ppt.pptx
NLC Grade 3.................................... ppt.pptxNLC Grade 3.................................... ppt.pptx
NLC Grade 3.................................... ppt.pptx
MichelleDeLaCruz93
 
Chapter-2-Era-of-One-party-Dominance-Class-12-Political-Science-Notes-2 (1).pptx
Chapter-2-Era-of-One-party-Dominance-Class-12-Political-Science-Notes-2 (1).pptxChapter-2-Era-of-One-party-Dominance-Class-12-Political-Science-Notes-2 (1).pptx
Chapter-2-Era-of-One-party-Dominance-Class-12-Political-Science-Notes-2 (1).pptx
Brajeswar Paul
 
Neuroimaging Mastery Project: Presentation #6 Subarachnoid Hemorrhage
Neuroimaging Mastery Project: Presentation #6 Subarachnoid HemorrhageNeuroimaging Mastery Project: Presentation #6 Subarachnoid Hemorrhage
Neuroimaging Mastery Project: Presentation #6 Subarachnoid Hemorrhage
Sean M. Fox
 
NAEYC Code of Ethical Conduct Resource Book
NAEYC Code of Ethical Conduct Resource BookNAEYC Code of Ethical Conduct Resource Book
NAEYC Code of Ethical Conduct Resource Book
lakitawilson
 
Delegation Inheritance in Odoo 17 and Its Use Cases
Delegation Inheritance in Odoo 17 and Its Use CasesDelegation Inheritance in Odoo 17 and Its Use Cases
Delegation Inheritance in Odoo 17 and Its Use Cases
Celine George
 
Kesadaran_Berbangsa_dan_Bernegara_Nasion.pptx
Kesadaran_Berbangsa_dan_Bernegara_Nasion.pptxKesadaran_Berbangsa_dan_Bernegara_Nasion.pptx
Kesadaran_Berbangsa_dan_Bernegara_Nasion.pptx
artenzmartenkai
 

Recently uploaded (20)

Bedok NEWater Photostory - COM322 Assessment (Story 2)
Bedok NEWater Photostory - COM322 Assessment (Story 2)Bedok NEWater Photostory - COM322 Assessment (Story 2)
Bedok NEWater Photostory - COM322 Assessment (Story 2)
 
ENGLISH-7-CURRICULUM MAP- MATATAG CURRICULUM
ENGLISH-7-CURRICULUM MAP- MATATAG CURRICULUMENGLISH-7-CURRICULUM MAP- MATATAG CURRICULUM
ENGLISH-7-CURRICULUM MAP- MATATAG CURRICULUM
 
Unlocking Educational Synergy-DIKSHA & Google Classroom.pptx
Unlocking Educational Synergy-DIKSHA & Google Classroom.pptxUnlocking Educational Synergy-DIKSHA & Google Classroom.pptx
Unlocking Educational Synergy-DIKSHA & Google Classroom.pptx
 
How to Create Sequence Numbers in Odoo 17
How to Create Sequence Numbers in Odoo 17How to Create Sequence Numbers in Odoo 17
How to Create Sequence Numbers in Odoo 17
 
The Jewish Trinity : Sabbath,Shekinah and Sanctuary 4.pdf
The Jewish Trinity : Sabbath,Shekinah and Sanctuary 4.pdfThe Jewish Trinity : Sabbath,Shekinah and Sanctuary 4.pdf
The Jewish Trinity : Sabbath,Shekinah and Sanctuary 4.pdf
 
How to Show Sample Data in Tree and Kanban View in Odoo 17
How to Show Sample Data in Tree and Kanban View in Odoo 17How to Show Sample Data in Tree and Kanban View in Odoo 17
How to Show Sample Data in Tree and Kanban View in Odoo 17
 
Odoo 17 Social Marketing - Lead Generation On Facebook
Odoo 17 Social Marketing - Lead Generation On FacebookOdoo 17 Social Marketing - Lead Generation On Facebook
Odoo 17 Social Marketing - Lead Generation On Facebook
 
Lecture_Notes_Unit4_Chapter_8_9_10_RDBMS for the students affiliated by alaga...
Lecture_Notes_Unit4_Chapter_8_9_10_RDBMS for the students affiliated by alaga...Lecture_Notes_Unit4_Chapter_8_9_10_RDBMS for the students affiliated by alaga...
Lecture_Notes_Unit4_Chapter_8_9_10_RDBMS for the students affiliated by alaga...
 
matatag curriculum education for Kindergarten
matatag curriculum education for Kindergartenmatatag curriculum education for Kindergarten
matatag curriculum education for Kindergarten
 
The basics of sentences session 10pptx.pptx
The basics of sentences session 10pptx.pptxThe basics of sentences session 10pptx.pptx
The basics of sentences session 10pptx.pptx
 
National Learning Camp Grade 7 ENGLISH 7-LESSON 7.pptx
National Learning Camp Grade 7 ENGLISH 7-LESSON 7.pptxNational Learning Camp Grade 7 ENGLISH 7-LESSON 7.pptx
National Learning Camp Grade 7 ENGLISH 7-LESSON 7.pptx
 
No, it's not a robot: prompt writing for investigative journalism
No, it's not a robot: prompt writing for investigative journalismNo, it's not a robot: prompt writing for investigative journalism
No, it's not a robot: prompt writing for investigative journalism
 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 
Edukasyong Pantahanan at Pangkabuhayan 1: Personal Hygiene
Edukasyong Pantahanan at  Pangkabuhayan 1: Personal HygieneEdukasyong Pantahanan at  Pangkabuhayan 1: Personal Hygiene
Edukasyong Pantahanan at Pangkabuhayan 1: Personal Hygiene
 
NLC Grade 3.................................... ppt.pptx
NLC Grade 3.................................... ppt.pptxNLC Grade 3.................................... ppt.pptx
NLC Grade 3.................................... ppt.pptx
 
Chapter-2-Era-of-One-party-Dominance-Class-12-Political-Science-Notes-2 (1).pptx
Chapter-2-Era-of-One-party-Dominance-Class-12-Political-Science-Notes-2 (1).pptxChapter-2-Era-of-One-party-Dominance-Class-12-Political-Science-Notes-2 (1).pptx
Chapter-2-Era-of-One-party-Dominance-Class-12-Political-Science-Notes-2 (1).pptx
 
Neuroimaging Mastery Project: Presentation #6 Subarachnoid Hemorrhage
Neuroimaging Mastery Project: Presentation #6 Subarachnoid HemorrhageNeuroimaging Mastery Project: Presentation #6 Subarachnoid Hemorrhage
Neuroimaging Mastery Project: Presentation #6 Subarachnoid Hemorrhage
 
NAEYC Code of Ethical Conduct Resource Book
NAEYC Code of Ethical Conduct Resource BookNAEYC Code of Ethical Conduct Resource Book
NAEYC Code of Ethical Conduct Resource Book
 
Delegation Inheritance in Odoo 17 and Its Use Cases
Delegation Inheritance in Odoo 17 and Its Use CasesDelegation Inheritance in Odoo 17 and Its Use Cases
Delegation Inheritance in Odoo 17 and Its Use Cases
 
Kesadaran_Berbangsa_dan_Bernegara_Nasion.pptx
Kesadaran_Berbangsa_dan_Bernegara_Nasion.pptxKesadaran_Berbangsa_dan_Bernegara_Nasion.pptx
Kesadaran_Berbangsa_dan_Bernegara_Nasion.pptx
 

Einführung in FLOW3/ Blog Package

  • 1. Überblick über FLOW3 mit dem Blog-Package als Referenz
  • 2. Agenda • Domain Model • Package Aufbau • Model • Validation • Association Mapping • Model und Repository • Repository • Blog Repsitory • Post Repository • Controller • View • Validation • Routing Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 2
  • 3. Domain Model Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 3
  • 4. Package Aufbau Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 4
  • 5. Model • Namespace namespaceBlogDomainModel; • Namespace namespace TYPO3BlogDomainModel; • Namespace namespace TYPO3BlogDomainModel; • Namespace namespace TYPO3BlogDomainModel; Datum: 06.12.2011 FLOW3 Einführung / log Package www.cross-content.com @MarkusGoldbeck 5
  • 6. TYPO3BlogDomainModel Post • Namespace namespace TYPO3BlogDomainModel; • Annotations use DoctrineORMMapping as ORM; use TYPO3FLOW3Annotations as FLOW3; • Class Post • Dieses Model nach den Konzepten von DDD eine Entitiy • Instanzen dieser Klasse können gespeichert werden /** * A blog * * @FLOW3Entity */ class Post { Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 6
  • 7. TYPO3BlogDomainModel Post • Properties • Variablen Deklaration als String • Validierung auf Datentyp und Länge • Validierung des Datentyps innerhalb des Models und Repositories /** * The post‘s title. * * @var string * @FLOW3Validate(type="Text") * @FLOW3Validate(type="StringLength", options={ "minimum"=1, "maximum"=80 }) * @ORMColumn(length=80) */ protected $title = ''; Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 7
  • 8. TYPO3BlogDomainModel Post • Property $date • Deklaration als Date Objekt • Identity /** * @FLOW3Identity * @var DateTime */ protected $date; • Property $blog • Deklaration als Blog Objekt • Association Mapping OneToMany /** * @var TYPO3BlogDomainModelBlog * @ORMManyToOne(inversedBy="posts") */ protected $blog; Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 8
  • 9. Association Mapping • OneToMany <-> ManyToOne /** The posts contained in this blog * @var DoctrineCommonCollectionsCollection<TYPO3Blog DomainModelPost> * @ORMOneToMany(mappedBy="blog") * @ORMOrderBy({"date" = "DESC"}) */ protected $posts; Model Blog Model Post $posts $blog /**The blog * @var TYPO3BlogDomainModelBlog * @ORMManyToOne(inversedBy="posts") */ protected $blog; Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 9
  • 10. Association Mapping • ManyToMany <-> ManyToMany /** * @var DoctrineCommonCollectionsCollection<TYPO3Blog DomainModelTag> * @ORMManyToMany(inversedBy="posts") */ protected $tags; Model Post Model Tag $tags $posts /**The posts tagged with this tag * @var DoctrineCommonCollectionsCollection<TYPO3Blog DomainModelPost> * @ORMManyToMany(mappedBy="tags") */ protected $posts; Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 10
  • 11. TYPO3BlogDomainModel Blog Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 11
  • 12. TYPO3BlogDomainModel Post Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 12
  • 13. TYPO3BlogDomainModel Blog • Setter /**Sets this blog's title * @param string $title The blog's title * @return void */ public function setTitle($title) { $this->title = $title; } • Getter /**Returns the blog's title * @return string The blog's title */ public function getTitle() { return $this->title; } Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 13
  • 14. Model und Repositories Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 14
  • 15. Blog Repository • Standard Blog Repository <?php namespace TYPO3BlogDomainRepository; /* * This script belongs to the FLOW3 package "TYPO3.Blog". */ /** * A repository for Blogs * * @FLOW3Scope("singleton") */ class BlogRepository extends TYPO3FLOW3PersistenceRepository { // add customized methods here } ?> Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 15
  • 16. Blog Repository • Standard Methoden des Repositories • add • remove • findAll • findBy* (magic methods) • findOneBy* (magic methods) findBy* und findOneBy* sind sog. Magic Methods die durch das Repository zur Verfügung gestellt werden. Diese Methoden erlauben einen Objekte durch Properties zu finden. Das BlogRepository zum Beispiel erlaubt einem die Magic Methoden findByDescription('foo') oder findOneByTitle('bar')auszuführen. Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 16
  • 17. Post Repository • Post Repository spezifische Methode findByBlog /** * Finds posts by the specified blog * @param TYPO3BlogDomainModelBlog $blog The blog the post must refer to * @param integer $limit The number of posts to return at max * @return TYPO3FLOW3PersistenceQueryResultProxy The posts */ public function findByBlog(TYPO3BlogDomainModelBlog $blog) { $query = $this->createQuery(); return $query->matching($query->equals('blog', $blog)) ->setOrderings( array('date' => QueryInterface::ORDER_DESCENDING)) ->execute(); } Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 17
  • 18. Post Repository • Post Repository spezifische Methode findByTagAndBlog /**Finds posts by the specified tag and blog * @param TYPO3BlogDomainModelTag $tag * @param TYPO3BlogDomainModelBlog $blog The blog the post must refer to * @return TYPO3FLOW3PersistenceQueryResultProxy The posts */ public function findByTagAndBlog(TYPO3BlogDomainModelTag $tag, TYPO3BlogDomainModelBlog $blog) { $query = $this->createQuery(); return $query->matching( $query->logicalAnd( $query->equals('blog', $blog), $query->contains('tags', $tag) ) ) ->setOrderings(array('date' => QueryInterface::ORDER_DESCENDING)) ->execute(); } Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 18
  • 19. Post Repository • Post Repository spezifische Methode findRecentByBlog /** * Finds most recent posts by the specified blog * * @param TYPO3BlogDomainModelBlog $blog The blog the post must refer to * @param integer $limit The number of posts to return at max * @return TYPO3FLOW3PersistenceQueryResultProxy The posts */ public function findRecentByBlog(TYPO3BlogDomainModelBlog $blog, $limit = 5) { $query = $this->createQuery(); return $query->matching($query->equals('blog', $blog)) ->setOrderings(array('date' => QueryInterface::ORDER_DESCENDING)) ->setLimit($limit) ->execute(); } Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 19
  • 20. Post Controller • Post Controller indexAction() /** * List action for this controller. Displays latest posts * @param TYPO3BlogDomainModelTag $tag The tag to display posts for * @param TYPO3BlogDomainModelCategory $category The category to display posts for * @return void */ public function indexAction(TYPO3BlogDomainModelTag $tag = NULL, TYPO3Blog DomainModelCategory $category = NULL) { if ($tag === NULL && $category === NULL) { $posts = $this->postRepository->findByBlog($this->blog); } elseif ($tag !== NULL) { $posts = $this->postRepository->findByTagAndBlog($tag, $this->blog); $this->view->assign('tag', $tag); } else { $posts = $this->postRepository->findByCategoryAndBlog($category, $this->blog); $this->view->assign('category', $category); } $this->view->assign('blog', $this->blog); $this->view->assign('posts', $posts); $this->view->assign('recentPosts', $this->postRepository->findRecentByBlog($this- >blog)); } Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 20
  • 21. Post Controller • Post Controller Dependency Injection /** * @FLOW3Inject * @var TYPO3BlogDomainRepositoryCategoryRepository */ protected $categoryRepository; /**Displays a form for creating a new post * @return void */ public function newAction() { $account = $this->findCurrentAccount(); $newPost = new TYPO3BlogDomainModelPost(); $newPost->setAuthor($account->getParty()->getName()->getFullName()); $this->view->assign('blog', $this->blog); $this->view->assign('existingPosts', $this->postRepository->findByBlog($this- >blog)); $this->view->assign('categories', $this->categoryRepository->findAll()); $this->view->assign('newPost', $newPost); } Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 21
  • 22. View Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 22
  • 23. View • Master Template - /Private/Layouts/Master.html <body> <div id="header"> <!-- some stuff --> </div> <div id="maincontainer"> <div id="mainbox"><f:render section="mainbox" /></div> • Post Template - /Private/Template/Post/Edit.html <f:layout name="Master" /> /Private/Layouts/Master.html <f:section name="mainbox"> <!-- some formular--> <f:render partial="FormErrors" arguments="{for: 'post'}" /> </f:section> /Private/Partials/FormErrors.html • Partial Template - /Private/Partials/FormErrors.html <f:form.validationResults for="{for}"> <f:if condition="{validationResults.flattenedErrors}"> <!-- --> </f:if> </f:form.validationResults> Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 23
  • 24. View • security - /Private/Templates/Post/Index.html <f:security.ifHasRole role="Editor"> <div id="navigation"> <span class="buttons"><f:link.action action="new" controller="Post"><img src="{f:uri.resource(path: 'Icons/FamFamFam/page_add.png')}" title="{f:translate(value: 'Create a new post')}"/></f:link.action></span> <div class="clear"></div> </div> </f:security.ifHasRole> Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 24
  • 25. Validation • Partial Template - /Private/Partials/FormErrors.html <f:form.validationResults for="{for}"> Objekt Post wurde übergeben <f:if condition="{validationResults.flattenedErrors}"> <dl class="errors"> <f:for each="{validationResults.flattenedErrors}" key="propertyPath" as="errors"> <dt> {propertyPath}: </dt> <dd> <f:for each="{errors}" as="error">{error}</f:for> </dd> </f:for> </dl> </f:if> </f:form.validationResults> <f:render partial="FormErrors" arguments="{for: 'post'}" /> Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 25
  • 26. Routing Subroute • Route auf das TYPO3.Blog Package /Configuration/Routes.yaml ## # Blog subroutes - name: 'Blog' uriPattern: '<BlogSubroutes>' defaults: '@package': 'TYPO3.Blog' '@format': 'html' subRoutes: BlogSubroutes: package: 'TYPO3.Blog' • Routet auf das TYPO3.Blog Package /Packages/Application/TYPO3.Blog/ Routes.yaml • Erste zutreffende Regel in Routes.yaml wird ausgeführt. • nur Leerzeichen verwenden, keine Tabs. Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 26
  • 27. Routing Package • /Packages/Application/TYPO3.Blog/Routes.yaml - name: 'Post index' uriPattern: '(posts)' defaults: '@package': 'TYPO3.Blog' '@controller': 'Post' '@action': 'index' '@format': 'html' • passt für http://mfug.demo/ und http://mfug.demo/posts, da durch die Klammern posts optional ist. Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 27
  • 28. Routing Package • Action Routing •/Packages/Application/TYPO3.Blog/Routes.yaml - name: 'Post actions 1' uriPattern: 'posts/{@action}' defaults: '@controller': 'Post' • passt http://mfug.demo/posts/new Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 28
  • 29. Routing Package • Object Routes Part •/Packages/Application/TYPO3.Blog/Routes.yaml http://dev.tutorial.local/post/edit?post%5B__identity%5D=229e2b23-b6f3-4422-8b7a- efb196dbc88b - name: 'Post actions 2' uriPattern: 'posts/{post}/{@action}' defaults: '@controller': 'Post' routeParts: post: objectType: 'TYPO3BlogDomainModelPost' uriPattern: '{date:Y}/{date:m}/{date:d}/{title}' http://dev.tutorial.local/post/2010/01/18/post-title/edit Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 29
  • 30. Quellen • FLOW3 Dokumentation http://flow3.typo3.org/documentation/guide.html • FLOW3 Blog Package TYPO3.Blog http://forge.typo3.org/projects/show/package-typo3-blog Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 30
  • 31. Kontakt Cross Content Media Twitter: @MarkusGoldbeck Gesellschaft für Online Business Solutions mbH E-Mail: mgoldbeck@cross-content.com Landshuter Allee 8 www.cross-content.com 80637 München Datum: 10.01.2012 FLOW3 Einführung / Blog Package www.cross-content.com @MarkusGoldbeck 31