SlideShare a Scribd company logo
1 of 82
Download to read offline
TYPO3	
  Photo	
  Gallery	
  Management	
  
Daniel	
  Lienert	
  
	
   Student	
  of	
  Computer	
  Science	
  
	
   University	
  of	
  Karlsruhe	
  

Michael	
  Knoll	
  
	
   Student	
  of	
  Computer	
  Science	
  
	
   University	
  of	
  Karlsruhe	
  
  Introduction	
  
  Concepts	
  
  Extbase	
  
  Missing	
  parts	
  
  Under	
  Construction	
  
  Searching	
  TER	
  for	
  „gallery“	
  
     ▪  114	
  Extensions	
  
  Comprehensivecomparison:	
  
    http://www.auskennbert.de/kategorien/typo3/
     typo3-­‐extension-­‐galerien-­‐im-­‐vergleich/	
  
    Out-­‐of-­‐date	
  
    YAG	
  isnotincluded	
  worthless	
  	
  
PROs	
  
+	
  SomestableExtensions	
  
+	
  TYPO3	
  Look	
  &Feel	
  
+	
  Communitysupport	
  
CONs	
  
-­‐	
  TYPO3	
  Look	
  &Feel	
  
-­‐	
  Ugly	
  Codebase	
  
-­‐	
  PoorDocumentation	
  
-­‐	
  No	
  Backend	
  Module	
  
-­‐	
  Not	
  suitableformanypictures	
  
-­‐	
  Out-­‐of-­‐date	
  (last	
  update	
  2004...)	
  
	
  YOU	
  DON‘T	
  WANT	
  TO	
  USE	
  THEM!	
  
  Clean	
  Codebase	
  (Extbaseapproach)	
  
  Extendable	
  (Theming&	
  API)	
  
  Scalable	
  (T3	
  caching)	
  
  Easy	
  to	
  manage	
  (BE	
  Module)	
  
  Strictseperation	
  of	
  gallerymanagement	
  and	
  
   FE	
  presentation	
  
  All	
  featuresknownfrom	
  „Big	
  Galleries“	
  
    EXIF,	
  Lightbox,	
  Multifile-­‐Upload,	
  Skinning,	
  ...	
  
  Someinstallationswith	
  up	
  to	
  15.000	
  photos	
  
   (and	
  growing)	
  on	
  high-­‐trafficsites	
  
   	
  Scalable	
  *check*	
  
  Proof-­‐of-­‐conceptforSkinning	
  (different	
  3-­‐rd	
  
   party	
  themesavailable	
  in	
  TER)	
  
   	
  Extendable	
  *check*	
  
   	
  Skinning	
  *check*	
  
  Well-­‐integrated	
  in	
  TYPO3	
  
  Flexible	
  Resolution	
  handling&caching	
  
  Interfaces	
  for	
  Desktop	
  Applications	
  (e.g.	
  
   Lightroom)	
  
  Flexible	
  Filtering	
  of	
  images	
  (tags,	
  categories,	
  
   EXIF	
  data,	
  ...)	
  
•    Gallery	
  List	
  
     •  Add,	
  edit,	
  delete	
  
     •  Drag	
  &	
  Drop	
  sorting	
  
•    Album	
  List	
  
     •  Add,	
  edit,	
  delete	
  
     •  Drag	
  &	
  Drop	
  sorting	
  
     •  Hide	
  /	
  unhide	
  
     •  Set	
  as	
  gallery	
  thumb	
  
•    Image	
  List	
  
     •  Edit	
  title	
  /	
  description	
  
     •  Define	
  album	
  thumb	
  
     •  Drag	
  &	
  Drop	
  sorting	
  
•    Import	
  images	
  
     •  Flash	
  multifile	
  
        uploader	
  
     •  Zip	
  uploader	
  
     •  Import	
  from	
  Server	
  
        directory	
  
•    Maintenance	
  
     •  All	
  facts	
  on	
  one	
  page	
  
     •  Clear	
  page	
  cache	
  
        only	
  where	
  yag	
  is	
  
        installed	
  
     •  Clear	
  /	
  rebuild	
  
        reolution	
  file	
  cache	
  
•    Content	
  element	
  
     overview	
  shows	
  
     detailed	
  info	
  
•    Maintenance	
  
     •  Gallery	
  list	
  
     •  Specific	
  gallery	
  
     •  Specific	
  album	
  
     •  Specific	
  image	
  
•    Select	
  theme	
  
•    Item	
  Selector	
  
     •  Select	
  gallery	
  /	
  
        album	
  /	
  image	
  with	
  
        an	
  easy	
  to	
  use	
  JS	
  
        powered	
  selector	
  
  Yes,	
  we	
  have	
  one!	
  (60	
  pages)	
  
Looks	
  like	
  YOU	
  want	
  it!	
  
  Frontend	
  rendering	
  is	
  done	
  by	
  themes	
  
  Lightwight,	
  powerfull	
  and	
  easy	
  to	
  customize	
  
  Easy	
  to	
  select	
  while	
  adding	
  yag	
  as	
  content	
  
   element	
  

  Later:	
  More	
  details	
  about	
  the	
  elements	
  of	
  a	
  
   theme	
  
  YAG	
  provides	
  	
  1½	
  
   themes	
  out	
  of	
  the	
  
   box	
  
  Single	
  image	
  
  with	
  detailed	
  
  view	
  
  Single	
  image	
  with	
  
  lightbox	
  
  Several	
  other	
  themes	
  are	
  available	
  in	
  TER	
  
     yag_themepack_jquery	
  (galleryview	
  /	
  crosslide)	
  
     yag_theme_simpleviewer	
  (flash	
  viewer)	
  
     yag_theme_perfectlightbox	
  (alternative	
  lightbox)	
  
     yag_theme_fancybox	
  	
  (alternative	
  lightbox)	
  
Extbase	
  +	
                 YAG	
  depends	
  on	
  	
  
  Fluid	
  
                                  Extbase	
  /	
  Fluid	
  
                                  pt_extlist	
  (powerfull	
  
                                   list	
  generator)	
  
pt_extlist	
  
• Listing	
  
• Filters	
  
                   YAG	
          pt_tools	
  (some	
  pre-­‐
                                   extbase	
  helper	
  
                                   methods)	
  

pt_tools	
  
• Helper	
  
 methods	
  
Category	
  




 Gallery	
                        Album	
                     Item	
  




                                               ItemMeta	
            ResolutionFileCache	
  



„Only“	
  6	
  database	
  tables	
  
Gallery	
  



                              Album	
  1	
                     Album	
  2	
  



                  Image	
  1	
            Image	
  2	
         Image	
  3	
  



Resolution	
     Resolution	
           Resolution	
  
    1	
              2	
                    3	
  
  Image	
  Management	
  (Backend)	
  
    Gallery	
  –	
  Album	
  –	
  Items	
  
  Image	
  Presentation	
  (Frontend)	
  
    ArbitraryImage-­‐Collections	
  
     ▪  Gallery	
  –	
  Album	
  –	
  Items	
  
     ▪  Categories	
  
     ▪  Tags	
  
     ▪  ...	
  
Source	
  
      images	
  




                                Filter	
  
           Filter	
  




                                 Category,	
  
                                  Album,	
  
                                   Tags,	
  
                                    ...	
  

Image	
  1	
   Image	
  2	
  

Image	
  3	
   Image	
  4	
  
resolutionConfigs	
  {	
  
thumb	
  {	
  
maxW	
  =	
  150	
  
maxH	
  =	
  150	
  
	
   }	
  
}	
                                                                    „thumb“,imagID	
  




                                             Image	
  Repository	
  
  Source	
                  Resolution	
  
  images	
                    cache	
  
  Automatic	
  Directory	
  Structure	
  (typo3temp)	
  




  Fixed	
  #	
  of	
  Images	
  /	
  Folder	
  
  Original	
  Images	
  are	
  not	
  changed	
  
  Structured	
  by	
  Album	
  UID	
  
    One	
  folder	
  /	
  album	
  
Typoscript	
               HTML	
                     PHP	
  

• General	
  Config	
     • Fluid	
            • ViewHelper	
  
• Listdefinition	
          Templates	
  
• Image	
  
  resolution	
  
• CSS/JS	
  
  Includes	
  



        CSS	
                Javascript	
                Flash	
  

                         • Effects	
           • ..	
  maybe	
  ..	
  	
  
                         • Lighbox	
  
AlbumList.Extlist.ts	
  

AlbumList.ts	
  

GalleryList.Extlist.ts	
  

GalleryList.ts	
  

General.ts	
                  Define	
  the	
  cook	
  and	
  behaviour	
  
                                    General	
   l onfiguration	
  and	
  
                                     pt_extlist	
  configuration	
  
                             of	
  the	
  resolution	
  definition.	
   view	
  
                                          gallery	
  /	
  album	
  /	
  item	
  
ItemList.Extlist.ts	
  

ItemList.ts	
  

Item.ts	
  

Theme.ts	
  
Code	
  
 plugin.tx_yag.settings.themes.myFancyTheme <
    plugin.tx_yag.settings.themes.default

 plugin.tx_yag.settings.themes.myFancyTheme {
    resolutionConfigs {
       thumb {
          width = 150c
          height = 150c
       }
    }

     includeJS.fancy = EXT:myFencyTheme/Resources/…/fancy.js
     includeCSS.fancy = EXT:myFencyTheme/Resources/…/fancy.css

     aThemeSpecificVariable = 42

     controller.ItemList.list {
        template = EXT:fancy/…/Templates/…/List.html
     }
 }
  Select	
  the	
  theme	
  per	
  plugin	
  instance	
  
     Different	
  themes	
  on	
  the	
  same	
  page	
  posible	
  
(EXIF-­‐)	
  
                                           Meta	
  Data	
  




                          YAG	
  
                                       Adding	
  to	
  Album	
  
                        Importer	
  


External	
  Image	
  
Resource	
  
                                          Filesystem-­‐	
  
                                            Storage	
  
  Currently	
  implemented:	
  

                   Crawls	
  directory	
  and	
                        Uploads	
  multiple	
  
Directory	
        imports	
  image	
  files	
           Multifile	
     Files	
  via	
  SWF	
  Uploader	
  
Importer	
                                              Uploader	
     and	
  importsimages	
  



                   Extractsuploaded	
  ZIP	
                           Handles	
  HTTP	
  requests	
  
 ZIP	
  File	
     file	
  and	
  imports	
  image	
     Remote	
       from	
  Desktop	
  
Uploader	
  	
     files	
  
                                                        Uploader	
     applications,	
  e.g.	
  
                                                                       Lightroom	
  
  Used	
  for	
  
     Filtering	
  
     Paging	
  
     Sorting	
  
  Generates	
  Image	
  Collections	
  
     Displayed	
  as	
  galleries,	
  albums,	
  ...	
  
  Enables	
  developer	
  to	
  implement	
  their	
  own	
  
  filters	
  
    Category	
  Filter	
  
    Tag	
  Filter	
  
    EXIF	
  Filter	
  
    Image-­‐Title	
  Filter	
  
    ...	
  
  Our	
  goal:	
  
     Having	
  generic	
  categories	
  for	
  multiple	
  extensions	
  
     Having	
  (ExtJs)	
  Tree-­‐Widget	
  for	
  editing	
  categories	
  
  Nested	
  Sets	
  approach	
  

              Category	
             Name	
              Left	
     Right	
  
                  1	
  
                                     Category	
  1	
     1	
        10	
  
                                     Category	
  2	
     2	
        5	
  
      Category	
      Category	
  
         2	
             3	
         Category	
  3	
     6	
        9	
  
                                     Category	
  4	
     3	
        4	
  
      Category	
      Category	
     Category	
  5	
     7	
        8	
  
         4	
             5	
  
  PROs	
  of	
  Nested	
  Sets	
  
     Fast	
  Reading	
  
     No	
  Recursive	
  Queries	
  
     Easy	
  DB	
  implementation	
  
  CONs	
  of	
  Nested	
  Sets	
  
     Slow	
  Writing	
  /	
  Changing	
  
     Complex	
  INSERTs	
  /	
  UPDATEs	
  
     Complex	
  PHP	
  implementation	
  
  Extbase	
  makes	
  the	
  development	
  of	
  BE	
  
   modules	
  easy	
  
     Use	
  the	
  same	
  Controllers	
  /	
  Actions	
  as	
  in	
  FE	
  
     …	
  same	
  typoscript	
  settings	
  
     …	
  same	
  data	
  models	
  …	
  	
  
  Modules	
  in	
  BE	
  and	
  FE	
  only	
  differs	
  at	
  the	
  
   presentation	
  layer	
  
  Extbase	
  does	
  not	
  have	
  Session	
  Management	
  
   (yet)	
  
  Came	
  up	
  with	
  our	
  own	
  solution	
  
  Did	
  not	
  use	
  Annotations	
  /	
  Reflection	
  
     Session	
  persistence	
  can	
  be	
  part	
  of	
  domain	
  logic	
  
     No	
  „generic	
  way“	
  of	
  injecting	
  session	
  data	
  
  Makes	
  use	
  of	
  Lifecycle-­‐Manager	
  (next	
  slides)	
  
     Injects	
  session	
  data	
  when	
  starting	
  
     Persists	
  session	
  data	
  into	
  session	
  when	
  shutting	
  
     down	
  
  Extbase	
  does	
  not	
  have	
  Lifecycle	
  
   Management	
  (yet)	
  
  Came	
  up	
  with	
  our	
  own	
  Lifecycle	
  
   Management	
  
1.	
  TYPO3	
  PageRequest	
  


     7.	
  Lifcycle	
  Manager	
  is	
                                           2.	
  Lifecycle	
  Manager	
  
               shut	
  down	
                                                              is	
  started	
  



6.	
  Lifcycle	
  Manager	
                                                             3.	
  Session-­‐persisted	
  	
  
writes	
  object	
  data	
  to	
                Use	
  Object-­‐                          object	
  is	
  created	
  
          Session	
                             Namespace	
  


                                                                                    3.1.	
  Object-­‐Data	
  is	
  
   5.	
  Lifcycle	
  Manager	
  gets	
  
                                                                                  injected	
  from	
  session	
  
              shut	
  down	
  



                                           4.	
  Object	
  data	
  changes	
  
  Problem	
  1:	
  Guess	
  the	
  key!	
  




	 $settings[‘plugin‘]...[‘showPager‘]
  Problem	
  2:	
  Assertions	
  (over	
  and	
  over)!	
  




	
   assert_is_integer($settings[...]);
  Solution:	
  ConfigurationObjects	
  
    Keep	
  Domain	
  Logic	
  and	
  Configuration	
  seperated	
  
    Code-­‐Completion	
  for	
  configuration	
  settings	
  
    Do	
  Assertions	
  only	
  once	
  
Code	
  
 class Tx_Yag_Domain_Configuration_AlbumList_AlbumListConfig 	
     extends Tx_PtExtlist_Domain_Configuration_AbstractConfiguration {	

 	   /**	
 	    * @var string	
 	    */	
 	   protected $albumThumbPartial;	

 	   /* ... */	

 	   /**	
 	    * @return string	
 	    */	
 	   public function getAlbumThumbPartial() {	
 	   	 return $this->albumThumbPartial;	
 	   }	
 }
Code	
  
class Tx_Yag_Domain_Configuration_ConfigurationBuilder 	
  extends Tx_Yag_Domain_Configuration_AbstractConfigurationBuilder {	

	       /**	
    	    * Holds settings to build configuration objects	
    	    * @var array	
    	    */	
	       protected $configurationObjectSettings = array(	
	         'albumList' => array(	
	            'factory' =>
        	 'Tx_Yag_Domain_Configuration_AlbumList_AlbumListConfigFactory'),	
	       	 /* ... */	
	       );	
	       /**	
	        * Returns (cached) instance of album configuration	
	        *	
	        * @return Tx_Yag_Domain_Configuration_AlbumList_AlbumListConfig	
	        */	
	       public function buildAlbumListConfiguration() {	
	       	 return $this->buildConfigurationGeneric('albumList');	
	       }	
}
  Problem	
  
    Folders	
  and	
  files	
  for	
  
     ▪  Templates	
  
     ▪  Partials	
  
     ▪  Layouts	
  
  	
   can	
  only	
  be	
  set	
  for	
  all	
  instances	
  of	
  plugin	
  	
  
       (using	
  Extbase	
  Typoscript	
  conventions)	
  
  Solution:	
  Set	
  template	
  for	
  each	
  Controller/
          Action	
  individually	
  
plugin.tx_yag.settings.themes.myFancyTheme	
  {	
  
	
       	
  
	
       /*	
  ...	
  */	
  
	
       	
  
	
       controller.ItemList.list	
  {	
  
	
       	
                  template	
  =	
  EXT:fancy/…/Templates/…/List.html	
  
	
       }	
  

}	
  
  Extbase	
  in	
  frontend	
  
  Extbase	
  in	
  backend	
  module	
  
  Extbase	
  in	
  flexform	
  	
  	
  	
  
Code	
  
 …
 <settings.context.selectedAlbumUid>
    <TCEforms>
    <label>LLL:EXT:yag/Resources/Private/Language/
    locallang.xml:tx_yag_flexform_gallery.selectAlbum</label>
    <config>
       <type>select</type>
       <form_type>user</form_type>
       <userFunc>
          user_Tx_Yag_Utility_Flexform_RecordSelector->renderAlbumSelector
       </userFunc>
    </config>
    </TCEforms>
 </settings.context.selectedAlbumUid>
 …
Code	
  

 public function renderAlbumSelector(&$PA, &$fobj) {
    $this->init();
    $template =    t3lib_div::getFileAbsFileName('EXT:yag/.../
    FlexFormAlbum.html');
    $renderer = $this->getFluidRenderer();
    $renderer->setTemplatePathAndFilename($template);
    $renderer->assign('galleries', $galleries);

     $content = $renderer->render();
     return $content;
 }
Code	
  
 protected function init() {
    $this->bootstrap = t3lib_div::makeInstance('Tx_Extbase_Core_Bootstrap');
    $this->bootstrap->initialize($configuration);
    $this->objectManager = t3lib_div::makeInstance('Tx_Extbase_Object_ObjectManager');
 }


 protected function getFluidRenderer() {
    $request = $this->objectManager->get('Tx_Extbase_MVC_Request');
    $request->setControllerExtensionName(self::EXTENSION_NAME);
    $request->setPluginName(self::PLUGIN_NAME);

     $this->fluidRenderer = $this->objectManager->get('Tx_Fluid_View_TemplateView');
      $controllerContext =
         $this->objectManager->get('Tx_Extbase_MVC_Controller_ControllerContext');

     $controllerContext->setRequest($request);
     $this->fluidRenderer->setControllerContext($controllerContext);

     return $this->fluidRenderer;
 }
  Using	
  „middle	
  layer“	
  for	
  	
  
     Extensions	
  of	
  Extbase,	
  suitable	
  for	
  other	
  
      extensions	
  
     Usage	
  of	
  non-­‐public-­‐API	
  
      yag	
  -­‐	
  pt_extlist	
  

          pt_extbase	
  

               Extbase	
  

                   TYPO3	
  
  Let	
  FE	
  Users	
  
     Create	
  /	
  Edit	
  /	
  Delete	
  
      ▪  Galleries	
  
      ▪  Albums	
  
     Upload	
  /	
  Edit	
  /	
  Delete	
  
      ▪  Images	
  
	
   in	
  Frontend	
  
  Has	
  already	
  been	
  implemented	
  
  Changed	
  to	
  BE	
  Management	
  
  Dependency	
  on	
  Role-­‐Based	
  Access	
  Controll	
  
  (next)	
  
  Mimi	
  
  Issue:	
  All	
  records	
  are	
  stored	
  to	
  PID	
     0	
  
     Not	
  possible	
  to	
  assign	
  permission	
  to	
  records	
  on	
  
      page	
  level.	
  
     Not	
  possible	
  to	
  split	
  the	
  data	
  between	
  different	
  
      authors	
  
  Todo	
  
     Add	
  Sysfolder	
  /	
  Page	
  selector	
  to	
  the	
  BE	
  module	
  
     Add	
  Sysfolder	
  /	
  Page	
  selector	
  to	
  the	
  CE	
  
     Keep	
  it	
  usable!	
  
  Issue:	
  Add	
  multi	
  language	
  support	
  to	
  labels	
  
  and	
  descriptions	
  
  ???	
  
  We	
  needed	
  dynamicly	
  generated	
  JavaScript	
  
     to	
  set	
  environment	
  variables	
  
     For	
  translation	
  

  Problem:	
  Fluid	
  
     No	
  posibility	
  to	
  define	
  markers	
  ({})	
  


  Solution:	
  	
  
     JavscriptViewhelper	
  /	
  JSTemplates	
  
Code	
  

 {namespace yag=Tx_Yag_ViewHelpers}
 <yag:Javascript.Template templatePath="EXT:yag/Resources/…/
    JSTemplates/ItemAdminList.js"
    arguments="{ajaxBaseURL: '{f:uri.action(controller:'Ajax')}'}"
 />
Code	
  
 $('a.album-linkbar-delete').click(function() {
       var albumUid = $(this).attr("albumUid");
       var album = $('tr#albumUid-' + albumUid);
  $deleteDialog.html
    ('###LLL:tx_yag_controller_album.deleteAlbumDescription###');
       $deleteDialog.dialog({ buttons: {
             "Delete album": function() {
               $.ajax({
                  url: del_album_url,
                  data: "###pluginNamespace###[album]="+albumUid,
                  success: function(feedback) {
                     if(feedback=='OK') {
                         $deleteDialog.dialog('close');
  Pro:	
  
     Inline	
  Javascript	
  outsourced	
  in	
  separate	
  files	
  
     No	
  weird	
  Fluid	
  hacks	
  needed	
  
  Con:	
  
     Markers	
  !	
  


  Any	
  suggestions?	
  
  Port	
  Backend	
  to	
  ExtJS???	
  
    PROs	
  and	
  CONs	
  of	
  JQuery	
  vs.	
  ExtJS	
  
  Importer-­‐Pluginsfor	
  Desktop	
  Image-­‐
   Management	
  Software	
  (Lightroom,	
  Aperture,	
  
   iPhoto)	
  
  No	
  LUA	
  skills	
  
  First	
  Prototype	
  is	
  working	
  
  Demonstration	
  

More Related Content

What's hot

Themes and layouts
Themes and layoutsThemes and layouts
Themes and layoutsAbhishekSRC
 
Intro To WordPress Themes
Intro To WordPress ThemesIntro To WordPress Themes
Intro To WordPress Themesdamonsharp
 
There's No Crying In Wordpress! (an intro to WP)
There's No Crying In Wordpress! (an intro to WP)There's No Crying In Wordpress! (an intro to WP)
There's No Crying In Wordpress! (an intro to WP)Grace Solivan
 
Crash Course in Theme Surgery
Crash Course in Theme SurgeryCrash Course in Theme Surgery
Crash Course in Theme SurgeryRational Frank
 
Customizing WordPress Themes
Customizing WordPress ThemesCustomizing WordPress Themes
Customizing WordPress ThemesLaura Hartwig
 
WordPress Theme Development for Designers
WordPress Theme Development for DesignersWordPress Theme Development for Designers
WordPress Theme Development for Designerselliotjaystocks
 
Drupal8 themingdeepdive drupaldevdays-montpellier17042015
Drupal8 themingdeepdive drupaldevdays-montpellier17042015Drupal8 themingdeepdive drupaldevdays-montpellier17042015
Drupal8 themingdeepdive drupaldevdays-montpellier17042015Romain Jarraud
 
MongoDB at Sailthru: Scaling and Schema Design
MongoDB at Sailthru: Scaling and Schema DesignMongoDB at Sailthru: Scaling and Schema Design
MongoDB at Sailthru: Scaling and Schema DesignDATAVERSITY
 
Introduction to YUI PHP Loader
Introduction to YUI PHP LoaderIntroduction to YUI PHP Loader
Introduction to YUI PHP LoaderChad Auld
 
What's New in WordPress 3.0 (for developers)
What's New in WordPress 3.0 (for developers)What's New in WordPress 3.0 (for developers)
What's New in WordPress 3.0 (for developers)Stephanie Leary
 
Intro to WordPress theme development
Intro to WordPress theme developmentIntro to WordPress theme development
Intro to WordPress theme developmentThad Allender
 
Wordpress template hierarchy
Wordpress template hierarchyWordpress template hierarchy
Wordpress template hierarchyStockton Group
 

What's hot (16)

A look at Drupal 7 Theming
A look at Drupal 7 ThemingA look at Drupal 7 Theming
A look at Drupal 7 Theming
 
Themes and layouts
Themes and layoutsThemes and layouts
Themes and layouts
 
Intro To WordPress Themes
Intro To WordPress ThemesIntro To WordPress Themes
Intro To WordPress Themes
 
There's No Crying In Wordpress! (an intro to WP)
There's No Crying In Wordpress! (an intro to WP)There's No Crying In Wordpress! (an intro to WP)
There's No Crying In Wordpress! (an intro to WP)
 
Crash Course in Theme Surgery
Crash Course in Theme SurgeryCrash Course in Theme Surgery
Crash Course in Theme Surgery
 
Wordpress genesis september 3 english rev cg
Wordpress genesis september 3 english rev cgWordpress genesis september 3 english rev cg
Wordpress genesis september 3 english rev cg
 
Customizing WordPress Themes
Customizing WordPress ThemesCustomizing WordPress Themes
Customizing WordPress Themes
 
WordPress Theme Development for Designers
WordPress Theme Development for DesignersWordPress Theme Development for Designers
WordPress Theme Development for Designers
 
Drupal8 themingdeepdive drupaldevdays-montpellier17042015
Drupal8 themingdeepdive drupaldevdays-montpellier17042015Drupal8 themingdeepdive drupaldevdays-montpellier17042015
Drupal8 themingdeepdive drupaldevdays-montpellier17042015
 
MongoDB at Sailthru: Scaling and Schema Design
MongoDB at Sailthru: Scaling and Schema DesignMongoDB at Sailthru: Scaling and Schema Design
MongoDB at Sailthru: Scaling and Schema Design
 
Introduction to YUI PHP Loader
Introduction to YUI PHP LoaderIntroduction to YUI PHP Loader
Introduction to YUI PHP Loader
 
What's New in WordPress 3.0 (for developers)
What's New in WordPress 3.0 (for developers)What's New in WordPress 3.0 (for developers)
What's New in WordPress 3.0 (for developers)
 
Oenology
OenologyOenology
Oenology
 
Migrate in Drupal 8
Migrate in Drupal 8Migrate in Drupal 8
Migrate in Drupal 8
 
Intro to WordPress theme development
Intro to WordPress theme developmentIntro to WordPress theme development
Intro to WordPress theme development
 
Wordpress template hierarchy
Wordpress template hierarchyWordpress template hierarchy
Wordpress template hierarchy
 

Similar to YAG - Yet Another Gallery

YAG - Yet another gallery (2012)
YAG - Yet another gallery (2012)YAG - Yet another gallery (2012)
YAG - Yet another gallery (2012)Daniel Lienert
 
Lesson 8 - Move Approved Elements To Insite Asset Library
Lesson 8 - Move Approved Elements To Insite Asset LibraryLesson 8 - Move Approved Elements To Insite Asset Library
Lesson 8 - Move Approved Elements To Insite Asset LibraryInformatica
 
itPage LDC 09 Presentation
itPage LDC 09 PresentationitPage LDC 09 Presentation
itPage LDC 09 PresentationEric Landmann
 
A Dexterity Intro for Recovering Archetypes Addicts
A Dexterity Intro for Recovering Archetypes AddictsA Dexterity Intro for Recovering Archetypes Addicts
A Dexterity Intro for Recovering Archetypes AddictsDavid Glick
 
Microsoft PowerPoint - &lt;b>jQuery&lt;/b>-3-UI.pptx
Microsoft PowerPoint - &lt;b>jQuery&lt;/b>-3-UI.pptxMicrosoft PowerPoint - &lt;b>jQuery&lt;/b>-3-UI.pptx
Microsoft PowerPoint - &lt;b>jQuery&lt;/b>-3-UI.pptxtutorialsruby
 
Study Notes: Facebook Haystack
Study Notes: Facebook HaystackStudy Notes: Facebook Haystack
Study Notes: Facebook HaystackGao Yunzhong
 
Page Fragments как развитие идеи Page Object паттерна
Page Fragments как развитие идеи Page Object паттернаPage Fragments как развитие идеи Page Object паттерна
Page Fragments как развитие идеи Page Object паттернаStart IT training center
 
Hibernate ORM: Tips, Tricks, and Performance Techniques
Hibernate ORM: Tips, Tricks, and Performance TechniquesHibernate ORM: Tips, Tricks, and Performance Techniques
Hibernate ORM: Tips, Tricks, and Performance TechniquesBrett Meyer
 
Bleen architecture
Bleen architectureBleen architecture
Bleen architectureMyti S.r.l.
 
Improving DSpace Backups, Restores & Migrations
Improving DSpace Backups, Restores & MigrationsImproving DSpace Backups, Restores & Migrations
Improving DSpace Backups, Restores & MigrationsTim Donohue
 
Hppg r819 gallery presentation, search by color introduced
Hppg r819 gallery presentation, search by color introducedHppg r819 gallery presentation, search by color introduced
Hppg r819 gallery presentation, search by color introducedRemigijus Kiminas
 
Modules Building Presentation
Modules Building PresentationModules Building Presentation
Modules Building Presentationhtyson
 
XPages -Beyond the Basics
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the BasicsUlrich Krause
 
Accelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks AutoloaderAccelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks AutoloaderDatabricks
 

Similar to YAG - Yet Another Gallery (20)

YAG - Yet another gallery (2012)
YAG - Yet another gallery (2012)YAG - Yet another gallery (2012)
YAG - Yet another gallery (2012)
 
Lesson 8 - Move Approved Elements To Insite Asset Library
Lesson 8 - Move Approved Elements To Insite Asset LibraryLesson 8 - Move Approved Elements To Insite Asset Library
Lesson 8 - Move Approved Elements To Insite Asset Library
 
itPage LDC 09 Presentation
itPage LDC 09 PresentationitPage LDC 09 Presentation
itPage LDC 09 Presentation
 
A Dexterity Intro for Recovering Archetypes Addicts
A Dexterity Intro for Recovering Archetypes AddictsA Dexterity Intro for Recovering Archetypes Addicts
A Dexterity Intro for Recovering Archetypes Addicts
 
Eclipse e4
Eclipse e4Eclipse e4
Eclipse e4
 
jQuery-3-UI
jQuery-3-UIjQuery-3-UI
jQuery-3-UI
 
jQuery-3-UI
jQuery-3-UIjQuery-3-UI
jQuery-3-UI
 
JQuery-Tutorial
 JQuery-Tutorial JQuery-Tutorial
JQuery-Tutorial
 
Microsoft PowerPoint - &lt;b>jQuery&lt;/b>-3-UI.pptx
Microsoft PowerPoint - &lt;b>jQuery&lt;/b>-3-UI.pptxMicrosoft PowerPoint - &lt;b>jQuery&lt;/b>-3-UI.pptx
Microsoft PowerPoint - &lt;b>jQuery&lt;/b>-3-UI.pptx
 
Study Notes: Facebook Haystack
Study Notes: Facebook HaystackStudy Notes: Facebook Haystack
Study Notes: Facebook Haystack
 
Taxonomy Everywhere
Taxonomy EverywhereTaxonomy Everywhere
Taxonomy Everywhere
 
Image galley ppt
Image galley pptImage galley ppt
Image galley ppt
 
Page Fragments как развитие идеи Page Object паттерна
Page Fragments как развитие идеи Page Object паттернаPage Fragments как развитие идеи Page Object паттерна
Page Fragments как развитие идеи Page Object паттерна
 
Hibernate ORM: Tips, Tricks, and Performance Techniques
Hibernate ORM: Tips, Tricks, and Performance TechniquesHibernate ORM: Tips, Tricks, and Performance Techniques
Hibernate ORM: Tips, Tricks, and Performance Techniques
 
Bleen architecture
Bleen architectureBleen architecture
Bleen architecture
 
Improving DSpace Backups, Restores & Migrations
Improving DSpace Backups, Restores & MigrationsImproving DSpace Backups, Restores & Migrations
Improving DSpace Backups, Restores & Migrations
 
Hppg r819 gallery presentation, search by color introduced
Hppg r819 gallery presentation, search by color introducedHppg r819 gallery presentation, search by color introduced
Hppg r819 gallery presentation, search by color introduced
 
Modules Building Presentation
Modules Building PresentationModules Building Presentation
Modules Building Presentation
 
XPages -Beyond the Basics
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the Basics
 
Accelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks AutoloaderAccelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks Autoloader
 

Recently uploaded

SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 

Recently uploaded (20)

SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 

YAG - Yet Another Gallery

  • 1. TYPO3  Photo  Gallery  Management  
  • 2. Daniel  Lienert     Student  of  Computer  Science     University  of  Karlsruhe   Michael  Knoll     Student  of  Computer  Science     University  of  Karlsruhe  
  • 3.   Introduction     Concepts     Extbase     Missing  parts     Under  Construction  
  • 4.
  • 5.   Searching  TER  for  „gallery“   ▪  114  Extensions  
  • 6.   Comprehensivecomparison:     http://www.auskennbert.de/kategorien/typo3/ typo3-­‐extension-­‐galerien-­‐im-­‐vergleich/     Out-­‐of-­‐date     YAG  isnotincluded  worthless    
  • 7.
  • 8. PROs   +  SomestableExtensions   +  TYPO3  Look  &Feel   +  Communitysupport  
  • 9. CONs   -­‐  TYPO3  Look  &Feel   -­‐  Ugly  Codebase   -­‐  PoorDocumentation   -­‐  No  Backend  Module   -­‐  Not  suitableformanypictures   -­‐  Out-­‐of-­‐date  (last  update  2004...)     YOU  DON‘T  WANT  TO  USE  THEM!  
  • 10.   Clean  Codebase  (Extbaseapproach)     Extendable  (Theming&  API)     Scalable  (T3  caching)     Easy  to  manage  (BE  Module)     Strictseperation  of  gallerymanagement  and   FE  presentation     All  featuresknownfrom  „Big  Galleries“     EXIF,  Lightbox,  Multifile-­‐Upload,  Skinning,  ...  
  • 11.   Someinstallationswith  up  to  15.000  photos   (and  growing)  on  high-­‐trafficsites     Scalable  *check*     Proof-­‐of-­‐conceptforSkinning  (different  3-­‐rd   party  themesavailable  in  TER)     Extendable  *check*     Skinning  *check*  
  • 12.   Well-­‐integrated  in  TYPO3     Flexible  Resolution  handling&caching     Interfaces  for  Desktop  Applications  (e.g.   Lightroom)     Flexible  Filtering  of  images  (tags,  categories,   EXIF  data,  ...)  
  • 13. •  Gallery  List   •  Add,  edit,  delete   •  Drag  &  Drop  sorting  
  • 14. •  Album  List   •  Add,  edit,  delete   •  Drag  &  Drop  sorting   •  Hide  /  unhide   •  Set  as  gallery  thumb  
  • 15. •  Image  List   •  Edit  title  /  description   •  Define  album  thumb   •  Drag  &  Drop  sorting  
  • 16. •  Import  images   •  Flash  multifile   uploader   •  Zip  uploader   •  Import  from  Server   directory  
  • 17. •  Maintenance   •  All  facts  on  one  page   •  Clear  page  cache   only  where  yag  is   installed   •  Clear  /  rebuild   reolution  file  cache  
  • 18. •  Content  element   overview  shows   detailed  info  
  • 19. •  Maintenance   •  Gallery  list   •  Specific  gallery   •  Specific  album   •  Specific  image   •  Select  theme  
  • 20. •  Item  Selector   •  Select  gallery  /   album  /  image  with   an  easy  to  use  JS   powered  selector  
  • 21.   Yes,  we  have  one!  (60  pages)  
  • 22. Looks  like  YOU  want  it!  
  • 23.   Frontend  rendering  is  done  by  themes     Lightwight,  powerfull  and  easy  to  customize     Easy  to  select  while  adding  yag  as  content   element     Later:  More  details  about  the  elements  of  a   theme  
  • 24.   YAG  provides    1½   themes  out  of  the   box  
  • 25.   Single  image   with  detailed   view  
  • 26.   Single  image  with   lightbox  
  • 27.   Several  other  themes  are  available  in  TER     yag_themepack_jquery  (galleryview  /  crosslide)     yag_theme_simpleviewer  (flash  viewer)     yag_theme_perfectlightbox  (alternative  lightbox)     yag_theme_fancybox    (alternative  lightbox)  
  • 28. Extbase  +     YAG  depends  on     Fluid     Extbase  /  Fluid     pt_extlist  (powerfull   list  generator)   pt_extlist   • Listing   • Filters   YAG     pt_tools  (some  pre-­‐ extbase  helper   methods)   pt_tools   • Helper   methods  
  • 29.
  • 30. Category   Gallery   Album   Item   ItemMeta   ResolutionFileCache   „Only“  6  database  tables  
  • 31. Gallery   Album  1   Album  2   Image  1   Image  2   Image  3   Resolution   Resolution   Resolution   1   2   3  
  • 32.   Image  Management  (Backend)     Gallery  –  Album  –  Items     Image  Presentation  (Frontend)     ArbitraryImage-­‐Collections   ▪  Gallery  –  Album  –  Items   ▪  Categories   ▪  Tags   ▪  ...  
  • 33. Source   images   Filter   Filter   Category,   Album,   Tags,   ...   Image  1   Image  2   Image  3   Image  4  
  • 34. resolutionConfigs  {   thumb  {   maxW  =  150   maxH  =  150     }   }   „thumb“,imagID   Image  Repository   Source   Resolution   images   cache  
  • 35.   Automatic  Directory  Structure  (typo3temp)     Fixed  #  of  Images  /  Folder  
  • 36.   Original  Images  are  not  changed     Structured  by  Album  UID     One  folder  /  album  
  • 37.
  • 38. Typoscript   HTML   PHP   • General  Config   • Fluid   • ViewHelper   • Listdefinition   Templates   • Image   resolution   • CSS/JS   Includes   CSS   Javascript   Flash   • Effects   • ..  maybe  ..     • Lighbox  
  • 39. AlbumList.Extlist.ts   AlbumList.ts   GalleryList.Extlist.ts   GalleryList.ts   General.ts   Define  the  cook  and  behaviour   General   l onfiguration  and   pt_extlist  configuration   of  the  resolution  definition.   view   gallery  /  album  /  item   ItemList.Extlist.ts   ItemList.ts   Item.ts   Theme.ts  
  • 40. Code   plugin.tx_yag.settings.themes.myFancyTheme < plugin.tx_yag.settings.themes.default plugin.tx_yag.settings.themes.myFancyTheme { resolutionConfigs { thumb { width = 150c height = 150c } } includeJS.fancy = EXT:myFencyTheme/Resources/…/fancy.js includeCSS.fancy = EXT:myFencyTheme/Resources/…/fancy.css aThemeSpecificVariable = 42 controller.ItemList.list { template = EXT:fancy/…/Templates/…/List.html } }
  • 41.   Select  the  theme  per  plugin  instance     Different  themes  on  the  same  page  posible  
  • 42. (EXIF-­‐)   Meta  Data   YAG   Adding  to  Album   Importer   External  Image   Resource   Filesystem-­‐   Storage  
  • 43.   Currently  implemented:   Crawls  directory  and   Uploads  multiple   Directory   imports  image  files   Multifile   Files  via  SWF  Uploader   Importer   Uploader   and  importsimages   Extractsuploaded  ZIP   Handles  HTTP  requests   ZIP  File   file  and  imports  image   Remote   from  Desktop   Uploader     files   Uploader   applications,  e.g.   Lightroom  
  • 44.
  • 45.   Used  for     Filtering     Paging     Sorting     Generates  Image  Collections     Displayed  as  galleries,  albums,  ...  
  • 46.   Enables  developer  to  implement  their  own   filters     Category  Filter     Tag  Filter     EXIF  Filter     Image-­‐Title  Filter     ...  
  • 47.   Our  goal:     Having  generic  categories  for  multiple  extensions     Having  (ExtJs)  Tree-­‐Widget  for  editing  categories  
  • 48.   Nested  Sets  approach   Category   Name   Left   Right   1   Category  1   1   10   Category  2   2   5   Category   Category   2   3   Category  3   6   9   Category  4   3   4   Category   Category   Category  5   7   8   4   5  
  • 49.   PROs  of  Nested  Sets     Fast  Reading     No  Recursive  Queries     Easy  DB  implementation     CONs  of  Nested  Sets     Slow  Writing  /  Changing     Complex  INSERTs  /  UPDATEs     Complex  PHP  implementation  
  • 50.
  • 51.   Extbase  makes  the  development  of  BE   modules  easy     Use  the  same  Controllers  /  Actions  as  in  FE     …  same  typoscript  settings     …  same  data  models  …       Modules  in  BE  and  FE  only  differs  at  the   presentation  layer  
  • 52.   Extbase  does  not  have  Session  Management   (yet)     Came  up  with  our  own  solution  
  • 53.   Did  not  use  Annotations  /  Reflection     Session  persistence  can  be  part  of  domain  logic     No  „generic  way“  of  injecting  session  data     Makes  use  of  Lifecycle-­‐Manager  (next  slides)     Injects  session  data  when  starting     Persists  session  data  into  session  when  shutting   down  
  • 54.   Extbase  does  not  have  Lifecycle   Management  (yet)     Came  up  with  our  own  Lifecycle   Management  
  • 55. 1.  TYPO3  PageRequest   7.  Lifcycle  Manager  is   2.  Lifecycle  Manager   shut  down   is  started   6.  Lifcycle  Manager   3.  Session-­‐persisted     writes  object  data  to   Use  Object-­‐ object  is  created   Session   Namespace   3.1.  Object-­‐Data  is   5.  Lifcycle  Manager  gets   injected  from  session   shut  down   4.  Object  data  changes  
  • 56.   Problem  1:  Guess  the  key!   $settings[‘plugin‘]...[‘showPager‘]
  • 57.   Problem  2:  Assertions  (over  and  over)!     assert_is_integer($settings[...]);
  • 58.   Solution:  ConfigurationObjects     Keep  Domain  Logic  and  Configuration  seperated     Code-­‐Completion  for  configuration  settings     Do  Assertions  only  once  
  • 59. Code   class Tx_Yag_Domain_Configuration_AlbumList_AlbumListConfig extends Tx_PtExtlist_Domain_Configuration_AbstractConfiguration { /** * @var string */ protected $albumThumbPartial; /* ... */ /** * @return string */ public function getAlbumThumbPartial() { return $this->albumThumbPartial; } }
  • 60. Code   class Tx_Yag_Domain_Configuration_ConfigurationBuilder extends Tx_Yag_Domain_Configuration_AbstractConfigurationBuilder { /** * Holds settings to build configuration objects * @var array */ protected $configurationObjectSettings = array( 'albumList' => array( 'factory' => 'Tx_Yag_Domain_Configuration_AlbumList_AlbumListConfigFactory'), /* ... */ ); /** * Returns (cached) instance of album configuration * * @return Tx_Yag_Domain_Configuration_AlbumList_AlbumListConfig */ public function buildAlbumListConfiguration() { return $this->buildConfigurationGeneric('albumList'); } }
  • 61.   Problem     Folders  and  files  for   ▪  Templates   ▪  Partials   ▪  Layouts     can  only  be  set  for  all  instances  of  plugin     (using  Extbase  Typoscript  conventions)  
  • 62.   Solution:  Set  template  for  each  Controller/ Action  individually   plugin.tx_yag.settings.themes.myFancyTheme  {         /*  ...  */         controller.ItemList.list  {       template  =  EXT:fancy/…/Templates/…/List.html     }   }  
  • 63.   Extbase  in  frontend     Extbase  in  backend  module     Extbase  in  flexform        
  • 64. Code   … <settings.context.selectedAlbumUid> <TCEforms> <label>LLL:EXT:yag/Resources/Private/Language/ locallang.xml:tx_yag_flexform_gallery.selectAlbum</label> <config> <type>select</type> <form_type>user</form_type> <userFunc> user_Tx_Yag_Utility_Flexform_RecordSelector->renderAlbumSelector </userFunc> </config> </TCEforms> </settings.context.selectedAlbumUid> …
  • 65. Code   public function renderAlbumSelector(&$PA, &$fobj) { $this->init(); $template = t3lib_div::getFileAbsFileName('EXT:yag/.../ FlexFormAlbum.html'); $renderer = $this->getFluidRenderer(); $renderer->setTemplatePathAndFilename($template); $renderer->assign('galleries', $galleries); $content = $renderer->render(); return $content; }
  • 66. Code   protected function init() { $this->bootstrap = t3lib_div::makeInstance('Tx_Extbase_Core_Bootstrap'); $this->bootstrap->initialize($configuration); $this->objectManager = t3lib_div::makeInstance('Tx_Extbase_Object_ObjectManager'); } protected function getFluidRenderer() { $request = $this->objectManager->get('Tx_Extbase_MVC_Request'); $request->setControllerExtensionName(self::EXTENSION_NAME); $request->setPluginName(self::PLUGIN_NAME); $this->fluidRenderer = $this->objectManager->get('Tx_Fluid_View_TemplateView'); $controllerContext = $this->objectManager->get('Tx_Extbase_MVC_Controller_ControllerContext'); $controllerContext->setRequest($request); $this->fluidRenderer->setControllerContext($controllerContext); return $this->fluidRenderer; }
  • 67.   Using  „middle  layer“  for       Extensions  of  Extbase,  suitable  for  other   extensions     Usage  of  non-­‐public-­‐API   yag  -­‐  pt_extlist   pt_extbase   Extbase   TYPO3  
  • 68.
  • 69.   Let  FE  Users     Create  /  Edit  /  Delete   ▪  Galleries   ▪  Albums     Upload  /  Edit  /  Delete   ▪  Images     in  Frontend  
  • 70.   Has  already  been  implemented     Changed  to  BE  Management     Dependency  on  Role-­‐Based  Access  Controll   (next)  
  • 72.   Issue:  All  records  are  stored  to  PID   0     Not  possible  to  assign  permission  to  records  on   page  level.     Not  possible  to  split  the  data  between  different   authors     Todo     Add  Sysfolder  /  Page  selector  to  the  BE  module     Add  Sysfolder  /  Page  selector  to  the  CE     Keep  it  usable!  
  • 73.   Issue:  Add  multi  language  support  to  labels   and  descriptions  
  • 75.
  • 76.   We  needed  dynamicly  generated  JavaScript     to  set  environment  variables     For  translation     Problem:  Fluid     No  posibility  to  define  markers  ({})     Solution:       JavscriptViewhelper  /  JSTemplates  
  • 77. Code   {namespace yag=Tx_Yag_ViewHelpers} <yag:Javascript.Template templatePath="EXT:yag/Resources/…/ JSTemplates/ItemAdminList.js" arguments="{ajaxBaseURL: '{f:uri.action(controller:'Ajax')}'}" />
  • 78. Code   $('a.album-linkbar-delete').click(function() { var albumUid = $(this).attr("albumUid"); var album = $('tr#albumUid-' + albumUid); $deleteDialog.html ('###LLL:tx_yag_controller_album.deleteAlbumDescription###'); $deleteDialog.dialog({ buttons: { "Delete album": function() { $.ajax({ url: del_album_url, data: "###pluginNamespace###[album]="+albumUid, success: function(feedback) { if(feedback=='OK') { $deleteDialog.dialog('close');
  • 79.   Pro:     Inline  Javascript  outsourced  in  separate  files     No  weird  Fluid  hacks  needed     Con:     Markers  !     Any  suggestions?  
  • 80.   Port  Backend  to  ExtJS???     PROs  and  CONs  of  JQuery  vs.  ExtJS  
  • 81.   Importer-­‐Pluginsfor  Desktop  Image-­‐ Management  Software  (Lightroom,  Aperture,   iPhoto)     No  LUA  skills     First  Prototype  is  working