SlideShare a Scribd company logo
1 of 50
Implementing a Symfony-based CMS System
               Marcos Labad
about me & this talk
●   Since 1998 in the Internet Industry (Kelkoo,
    Yahoo!, BuyVIP)
●   Technology and Internet passionate
●   Founder of Acilia Internet, Spanish development
    company based on Madrid


    This talk is about real experiences and
    recommendations
contents

●   Project plan: Before hands on starts
●   Why Symfony and Doctrine
●   Choosing the right partners for usability and
    design
●   Techniques and CMS features to evaluate
●   Maintenance and final delivery
project plan
●   Imagine the moment of delivery and plan
    backwards – examine every piece
●   Designate stakeholders
●   Open communication channels, recurrent
    follow-up
●   Tests beginning the first day
                                    Tools like Symfony helps you to
                                    predict project timings and efforts
                                    dramatically. The more projects you
                                    develop, the more accurate you'll
                                    be.
project plan

●   Project management is people management
    and organization

●   Trained and experienced people performs >
    x10 more
project success
         5%




                        People (55%)
                        Communication
                        (40%)
                 40%
                        Other (5%)
55%                     Luck (0%)
why Symfony

●   Very active development and support
●   Learning curve but really good documentation
●   Big Growing Community
●   One of the most complete PHP Framework
●   Admin generator: Rocks!
●   Form framework: Rocks!
why Symfony
●   For the final project owner: easy maintenance
    and support
●   Product based on good practices and design
    patterns: lower risk
●   For the development company: reusable
    developments / development intelligence.
●   For the development company: easy to
    integrate new engineers to the project
why Doctrine

●   Hard choice, we used Propel in the past

●   Great documentation.

●   Our perception: more activity, community
    support
why PHP

●   Used on most of the high traffic websites
    (Facebook, Yahoo!, Wikipedia)
●   Easy to learn, easy to use (Scripting language)
●   Nifty vs. tedious languages
●   #1 language on the web
●   Years of experience and tools   If you reach the point where PHP
                                    is the performance bottleneck,
●   Performance?                    congratulations: You have a
                                    Grade A application faster than
                                    99% webs over the Internet
why not Joomla or Drupal
●   If the project has some complexity or somewhat
    specific features, you'll problably have to
    dismantle it
●   Not optimal for specific data models
●   Fast to implement and install. Really hard (or
    impossible) to customize and maintain
●   It has also a learning curve   You'll face the question: Yes, but
                                   whitehose.gov is made on
                                   Drupal!!

                                   Whitehouse.gov is a simple
                                   project, with common data models
Usability and Design

●   Jobeet Chapter 2 - “The project” is great and
    seems simple, but it is not that simple.

●   Reaching a simple mock-up requires quite a lot
    effort and needs all stakeholders input.

●   You should plan this stage carefully
Simple search or
advanced search?     Unique RSS Feed
How will the         or RSS feed per
results look like?   category?


How many
categories will be   Who can post a
displayed?           job



What are the         How many results
fields needed?       should we display

                     Is there any ad
Can we sort by?      space? How do
                     we manage it?
Usability and Design
●   You will have to face many confronted interest
    in your client (editors want a good backend,
    product developers a cool front-end with no
    ads, business people a big ad space, CEOs a
    cheap and good quality website...)
●   UX and Design professionals are out there.
    Partner with them! You will save time (and
    health)
Usability and Design

●   A great application can be seen as poor
    because of a wrong graphic design

●   A poor application can be seen as great with a
    good graphic design
CMS Features

●   One of the first questions is what to manage.

●   Every piece can live without the “administration”
    software

●   The more management, the more complexity
CMS Models Classification

●   Content (Articles, Videos, Images, Galleries...)

●   Templates (Probably the most complex part)

●   Users & Community (Frontpage, Backend,
    Permissions)
Data
●   Data Model

●   Do we have data to import?

●   Tasks – Initial load. Incremental load

●   301 redirects from old urls to new urls
    (Important)
Backend
●   Intensive use of admin generator

●   Fast for models management

●   Look for solutions for objects relationships
       –   Pop-ups
       –   Lightbox               Extesions of sfWidgetForm Class
       –   JQuery plugins
Shared Characteristics - Behaviours

●   Doctrine Behaviours will help to build shared
    characteristics for models
       –   Visible
       –   Commentable
       –   Tagable
       –   Navigation Related
       –   Attributable
       –   ...
CMS Models - Navigation

●   Navigation is the central taxonomy column in
    the CMS system

●   Nested set – Multiple roots

●   Content and Template models are related to it
CMS Models - Domains

●   CMS accepting multiple sites

●   Content can be asociated to multiple domains,
    but must have a main domain

●   Decision: Multiple categories ?
CMS Models - Articles

●   Texts with several images (or other objects) associated

●   Cover Image – Representative image


●   Creation time, Publish time

●   Multiple templates system
    ●   Virtual fields vs. Real fields
    ●   Inspired in Radius - Radiant CMS (http://radiantcms.org/) and Liquid -
        macro language, similar to HTML
    ●   YAML
Multi-template Articles

    Template (Backend)             Article (Backend)        Article (Frontend)

                                  * Gets template and       * Renders the
    * Skeleton fo the final       ask for necessary         content, based on
    layout. It contains the       information.              the template and the
    HTML + tag based
    template engine
                              +   * Generates Form
                                                        =   data stored in the
                                                            backend.
    syntax                        Widgets.

                                  * Virtual fields -
                                  YAML




Designers / Front-end engineers        Editors
Article Multi-template system
     Template Example

     <div class="post_content">

           <div class="photo_container">
                <snippet:showImage config: { name: vertical_image } >
                      <?php echo $record->tag (236,356) ?>
                      <ul class="options_pics">

                          <li class="full"><a href="<?php echo $record->url(350,450) ?>" rel="facebox">full
picture</a></li>
                             <li class="author"><p><?php echo $record->caption ?><br />
                           <b> <?php echo $record->copy_right ?></b></p></li>
                       </ul>
                </snippet:showImage>
                <blockquote>
               <span></span><br /><snippet:fieldText config: { name: quote } /></blockquote>
           </div><!-- .photo_container -->
YAML Storage

vertical_image:
 id: '190784'
quote: 'Zara to land in India in 2010'
main_text:
 Text: "
Zara group is opening new stores in India,
starting with a major shop in Delhi, .....”
CMS Models -Images

●   Elements (name, file, width, height...)
●   Resize on demand (GD, Imagemagick)
●   Storage
       –   CDN
       –   Custom server optimized (lighthttpd, cherokee...)
       –   Every server (Rsync sycronization, reverse proxy)
Original Image            Thumbnail with
                           Gravity Top




                   Thumbnail
                 without Gravity
Template Management - Navigation

●   Ability to manage and automate layouts, templates
    and modules: not only a template language.

●   Layouts (decorators) and templates are associated to a
    navigation points

●   Hierarchical Inheritance

●   Backend controls template system
Template Management - Navigation

    Template (Backend)            Template Configuration         Page (Frontend)
                                        (Backend)
                                                                * Renders the
    * Skeleton fo the final       * Gets template and ask       content, based on
    layout. It contains the       for necessary                 the template and the
    HTML + tag based
    template engine
                              +   information.              =   data stored in the
                                                                backend.
    syntax                        * Generates Form
                                  Widgets.

                                  * Virtual fields.




Designers / Front-end engineers             Editors
Template Management
Template Example
 <ul class="home_links">
   <li>
     <ul>
      <snippet:eachArticle config: { name: enlace_articulo_moda }>
      <li><a href="<?php echo $record->url ?>">
 <?php echo $record->getTitle() ?>
 </a></li>
       </snippet:eachArticle>
     </ul>
     <p><a href="/moda"> ver todas las noticias de 'moda'</a></p>
   </li>
   <li>
Template Configuration
Other Features and tools

●   User Management and permissions (sfGuardUser)


●   Comments Moderation


●   Custom data models (sport standings, real state listings...)


●   Sphinx search


●   External Feeds


●   Git
Infraestructure
Web
Users          Internet                            Load Balancer




                                            Web Server 1     Web Server 2




 Multiservice Backend
                                 Write Queries
                                                           Read Queries




                          Master DB                                  Slave DB
Performance
                     $timer = sfTimerManager::getTimer('myTimer');

                     // Do things
●   Symfony timer    ...

                     // Stop the timer and add the elapsed time
                     $timer->addTime();

                     // Get the result (and stop the timer if not already stopped)
                     $elapsedTime = $timer->getElapsedTime();


●   Routing cache in versions 1.2.x
Performance

●   Doctrine Query and Results cache

●   Control Hydrations
                                   Cache Manager


●   Symfony View Cache
                                    Load Testing


●   Memcached
delivery and acceptance
●   Maintenance is another topic, will the final
    customer/users need it.

●   Identify what to maintain from the beginning
    (infraestructure, templating, design...)

●   Many times, you'll find yourself maintaining not
    being able to leave the project! Plan
    acceptance
Some Clients feedback
●   “I expected bugs!! Where are they?” (Or where
    are they in the planification?)
●   “I expected a traffic drop. It is increasing since
    first day!!”
●   “Symfony is slow? My site is fast!!” - Many
    times performance issues are not in the
    framework or language (PHP) itself.
That's the Symfony Way
Thanks!


             reach me @
          my company: http://www.acilia.es
          blog: http://www.quevidaesta.com
             twitter: http://twitter.com/esmiz
                      mail: marcos@acilia.es

More Related Content

What's hot

DrupalCon Austin - Absolute Beginner's Guide to Drupal
DrupalCon Austin - Absolute Beginner's Guide to DrupalDrupalCon Austin - Absolute Beginner's Guide to Drupal
DrupalCon Austin - Absolute Beginner's Guide to DrupalRod Martin
 
Blisstering drupal module development ppt v1.2
Blisstering drupal module development ppt v1.2Blisstering drupal module development ppt v1.2
Blisstering drupal module development ppt v1.2Anil Sagar
 
Introduction to Drupal Basics
Introduction to Drupal BasicsIntroduction to Drupal Basics
Introduction to Drupal BasicsJuha Niemi
 
Best Practices for Migrating a Legacy-Based CMS to Drupal
Best Practices for Migrating a Legacy-Based CMS to DrupalBest Practices for Migrating a Legacy-Based CMS to Drupal
Best Practices for Migrating a Legacy-Based CMS to DrupalAcquia
 
Web Components v1
Web Components v1Web Components v1
Web Components v1Mike Wilcox
 
jQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesjQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesTeamstudio
 
Responsive Layout Frameworks for XPages Application UI
Responsive Layout Frameworks for XPages Application UIResponsive Layout Frameworks for XPages Application UI
Responsive Layout Frameworks for XPages Application UIChris Toohey
 
Plone at the University of Washington
Plone at the University of WashingtonPlone at the University of Washington
Plone at the University of Washingtonmwinkle1
 
jQuery Comes to XPages
jQuery Comes to XPagesjQuery Comes to XPages
jQuery Comes to XPagesTeamstudio
 

What's hot (9)

DrupalCon Austin - Absolute Beginner's Guide to Drupal
DrupalCon Austin - Absolute Beginner's Guide to DrupalDrupalCon Austin - Absolute Beginner's Guide to Drupal
DrupalCon Austin - Absolute Beginner's Guide to Drupal
 
Blisstering drupal module development ppt v1.2
Blisstering drupal module development ppt v1.2Blisstering drupal module development ppt v1.2
Blisstering drupal module development ppt v1.2
 
Introduction to Drupal Basics
Introduction to Drupal BasicsIntroduction to Drupal Basics
Introduction to Drupal Basics
 
Best Practices for Migrating a Legacy-Based CMS to Drupal
Best Practices for Migrating a Legacy-Based CMS to DrupalBest Practices for Migrating a Legacy-Based CMS to Drupal
Best Practices for Migrating a Legacy-Based CMS to Drupal
 
Web Components v1
Web Components v1Web Components v1
Web Components v1
 
jQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesjQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPages
 
Responsive Layout Frameworks for XPages Application UI
Responsive Layout Frameworks for XPages Application UIResponsive Layout Frameworks for XPages Application UI
Responsive Layout Frameworks for XPages Application UI
 
Plone at the University of Washington
Plone at the University of WashingtonPlone at the University of Washington
Plone at the University of Washington
 
jQuery Comes to XPages
jQuery Comes to XPagesjQuery Comes to XPages
jQuery Comes to XPages
 

Similar to Implementing a Symfony Based CMS in a Publishing Company

LvivCSS: Web Components as a foundation for Design System
LvivCSS: Web Components as a foundation for Design SystemLvivCSS: Web Components as a foundation for Design System
LvivCSS: Web Components as a foundation for Design SystemVlad Fedosov
 
Drupal performance and scalability
Drupal performance and scalabilityDrupal performance and scalability
Drupal performance and scalabilityTwinbit
 
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013Mack Hardy
 
Using WordPress for Rapid Prototyping
Using WordPress for Rapid PrototypingUsing WordPress for Rapid Prototyping
Using WordPress for Rapid PrototypingDrew Morris
 
Drupal in 5mins + Previewing Drupal 8.x
Drupal in 5mins + Previewing Drupal 8.xDrupal in 5mins + Previewing Drupal 8.x
Drupal in 5mins + Previewing Drupal 8.xWong Hoi Sing Edison
 
Introduction To Drupal
Introduction To DrupalIntroduction To Drupal
Introduction To DrupalLauren Roth
 
An Introduction To Palomino
An Introduction To PalominoAn Introduction To Palomino
An Introduction To PalominoLaine Campbell
 
Absolute Beginners Guide to Drupal
Absolute Beginners Guide to DrupalAbsolute Beginners Guide to Drupal
Absolute Beginners Guide to DrupalRod Martin
 
Company Visitor Management System Report.docx
Company Visitor Management System Report.docxCompany Visitor Management System Report.docx
Company Visitor Management System Report.docxfantabulous2024
 
symfony_from_scratch
symfony_from_scratchsymfony_from_scratch
symfony_from_scratchtutorialsruby
 
symfony_from_scratch
symfony_from_scratchsymfony_from_scratch
symfony_from_scratchtutorialsruby
 
Web Components
Web ComponentsWeb Components
Web ComponentsFITC
 
Developing Custom WordPress Themes for Clients
Developing Custom WordPress Themes for ClientsDeveloping Custom WordPress Themes for Clients
Developing Custom WordPress Themes for ClientsSteven Slack
 
Becoming A Drupal Master Builder
Becoming A Drupal Master BuilderBecoming A Drupal Master Builder
Becoming A Drupal Master BuilderPhilip Norton
 
Normalizing x pages web development
Normalizing x pages web development Normalizing x pages web development
Normalizing x pages web development Shean McManus
 
The Importance Things of Full Stack Development
The Importance Things of Full Stack DevelopmentThe Importance Things of Full Stack Development
The Importance Things of Full Stack DevelopmentMike Taylor
 

Similar to Implementing a Symfony Based CMS in a Publishing Company (20)

The Technical Side of Harvard.edu Redesign
The Technical Side of Harvard.edu RedesignThe Technical Side of Harvard.edu Redesign
The Technical Side of Harvard.edu Redesign
 
LvivCSS: Web Components as a foundation for Design System
LvivCSS: Web Components as a foundation for Design SystemLvivCSS: Web Components as a foundation for Design System
LvivCSS: Web Components as a foundation for Design System
 
Drupal performance and scalability
Drupal performance and scalabilityDrupal performance and scalability
Drupal performance and scalability
 
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
 
Using WordPress for Rapid Prototyping
Using WordPress for Rapid PrototypingUsing WordPress for Rapid Prototyping
Using WordPress for Rapid Prototyping
 
Drupal in 5mins + Previewing Drupal 8.x
Drupal in 5mins + Previewing Drupal 8.xDrupal in 5mins + Previewing Drupal 8.x
Drupal in 5mins + Previewing Drupal 8.x
 
Introduction To Drupal
Introduction To DrupalIntroduction To Drupal
Introduction To Drupal
 
An Introduction To Palomino
An Introduction To PalominoAn Introduction To Palomino
An Introduction To Palomino
 
Absolute Beginners Guide to Drupal
Absolute Beginners Guide to DrupalAbsolute Beginners Guide to Drupal
Absolute Beginners Guide to Drupal
 
Company Visitor Management System Report.docx
Company Visitor Management System Report.docxCompany Visitor Management System Report.docx
Company Visitor Management System Report.docx
 
symfony_from_scratch
symfony_from_scratchsymfony_from_scratch
symfony_from_scratch
 
symfony_from_scratch
symfony_from_scratchsymfony_from_scratch
symfony_from_scratch
 
Front end frameworks
Front end frameworksFront end frameworks
Front end frameworks
 
Web Components
Web ComponentsWeb Components
Web Components
 
Developing Custom WordPress Themes for Clients
Developing Custom WordPress Themes for ClientsDeveloping Custom WordPress Themes for Clients
Developing Custom WordPress Themes for Clients
 
Becoming A Drupal Master Builder
Becoming A Drupal Master BuilderBecoming A Drupal Master Builder
Becoming A Drupal Master Builder
 
Drupal in-depth
Drupal in-depthDrupal in-depth
Drupal in-depth
 
Normalizing x pages web development
Normalizing x pages web development Normalizing x pages web development
Normalizing x pages web development
 
The Importance Things of Full Stack Development
The Importance Things of Full Stack DevelopmentThe Importance Things of Full Stack Development
The Importance Things of Full Stack Development
 
Automation in Drupal
Automation in DrupalAutomation in Drupal
Automation in Drupal
 

Recently uploaded

Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
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
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
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
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetEnjoy Anytime
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
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
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
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
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Hyundai Motor Group
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
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
 

Recently uploaded (20)

Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
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...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
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
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
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
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
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
 

Implementing a Symfony Based CMS in a Publishing Company

  • 1. Implementing a Symfony-based CMS System Marcos Labad
  • 2. about me & this talk ● Since 1998 in the Internet Industry (Kelkoo, Yahoo!, BuyVIP) ● Technology and Internet passionate ● Founder of Acilia Internet, Spanish development company based on Madrid This talk is about real experiences and recommendations
  • 3. contents ● Project plan: Before hands on starts ● Why Symfony and Doctrine ● Choosing the right partners for usability and design ● Techniques and CMS features to evaluate ● Maintenance and final delivery
  • 4. project plan ● Imagine the moment of delivery and plan backwards – examine every piece ● Designate stakeholders ● Open communication channels, recurrent follow-up ● Tests beginning the first day Tools like Symfony helps you to predict project timings and efforts dramatically. The more projects you develop, the more accurate you'll be.
  • 5. project plan ● Project management is people management and organization ● Trained and experienced people performs > x10 more
  • 6. project success 5% People (55%) Communication (40%) 40% Other (5%) 55% Luck (0%)
  • 7. why Symfony ● Very active development and support ● Learning curve but really good documentation ● Big Growing Community ● One of the most complete PHP Framework ● Admin generator: Rocks! ● Form framework: Rocks!
  • 8. why Symfony ● For the final project owner: easy maintenance and support ● Product based on good practices and design patterns: lower risk ● For the development company: reusable developments / development intelligence. ● For the development company: easy to integrate new engineers to the project
  • 9. why Doctrine ● Hard choice, we used Propel in the past ● Great documentation. ● Our perception: more activity, community support
  • 10. why PHP ● Used on most of the high traffic websites (Facebook, Yahoo!, Wikipedia) ● Easy to learn, easy to use (Scripting language) ● Nifty vs. tedious languages ● #1 language on the web ● Years of experience and tools If you reach the point where PHP is the performance bottleneck, ● Performance? congratulations: You have a Grade A application faster than 99% webs over the Internet
  • 11. why not Joomla or Drupal ● If the project has some complexity or somewhat specific features, you'll problably have to dismantle it ● Not optimal for specific data models ● Fast to implement and install. Really hard (or impossible) to customize and maintain ● It has also a learning curve You'll face the question: Yes, but whitehose.gov is made on Drupal!! Whitehouse.gov is a simple project, with common data models
  • 12.
  • 13. Usability and Design ● Jobeet Chapter 2 - “The project” is great and seems simple, but it is not that simple. ● Reaching a simple mock-up requires quite a lot effort and needs all stakeholders input. ● You should plan this stage carefully
  • 14. Simple search or advanced search? Unique RSS Feed How will the or RSS feed per results look like? category? How many categories will be Who can post a displayed? job What are the How many results fields needed? should we display Is there any ad Can we sort by? space? How do we manage it?
  • 15. Usability and Design ● You will have to face many confronted interest in your client (editors want a good backend, product developers a cool front-end with no ads, business people a big ad space, CEOs a cheap and good quality website...) ● UX and Design professionals are out there. Partner with them! You will save time (and health)
  • 16. Usability and Design ● A great application can be seen as poor because of a wrong graphic design ● A poor application can be seen as great with a good graphic design
  • 17. CMS Features ● One of the first questions is what to manage. ● Every piece can live without the “administration” software ● The more management, the more complexity
  • 18. CMS Models Classification ● Content (Articles, Videos, Images, Galleries...) ● Templates (Probably the most complex part) ● Users & Community (Frontpage, Backend, Permissions)
  • 19. Data ● Data Model ● Do we have data to import? ● Tasks – Initial load. Incremental load ● 301 redirects from old urls to new urls (Important)
  • 20. Backend ● Intensive use of admin generator ● Fast for models management ● Look for solutions for objects relationships – Pop-ups – Lightbox Extesions of sfWidgetForm Class – JQuery plugins
  • 21.
  • 22. Shared Characteristics - Behaviours ● Doctrine Behaviours will help to build shared characteristics for models – Visible – Commentable – Tagable – Navigation Related – Attributable – ...
  • 23. CMS Models - Navigation ● Navigation is the central taxonomy column in the CMS system ● Nested set – Multiple roots ● Content and Template models are related to it
  • 24.
  • 25.
  • 26. CMS Models - Domains ● CMS accepting multiple sites ● Content can be asociated to multiple domains, but must have a main domain ● Decision: Multiple categories ?
  • 27. CMS Models - Articles ● Texts with several images (or other objects) associated ● Cover Image – Representative image ● Creation time, Publish time ● Multiple templates system ● Virtual fields vs. Real fields ● Inspired in Radius - Radiant CMS (http://radiantcms.org/) and Liquid - macro language, similar to HTML ● YAML
  • 28.
  • 29. Multi-template Articles Template (Backend) Article (Backend) Article (Frontend) * Gets template and * Renders the * Skeleton fo the final ask for necessary content, based on layout. It contains the information. the template and the HTML + tag based template engine + * Generates Form = data stored in the backend. syntax Widgets. * Virtual fields - YAML Designers / Front-end engineers Editors
  • 30. Article Multi-template system Template Example <div class="post_content"> <div class="photo_container"> <snippet:showImage config: { name: vertical_image } > <?php echo $record->tag (236,356) ?> <ul class="options_pics"> <li class="full"><a href="<?php echo $record->url(350,450) ?>" rel="facebox">full picture</a></li> <li class="author"><p><?php echo $record->caption ?><br /> <b> <?php echo $record->copy_right ?></b></p></li> </ul> </snippet:showImage> <blockquote> <span></span><br /><snippet:fieldText config: { name: quote } /></blockquote> </div><!-- .photo_container -->
  • 31.
  • 32. YAML Storage vertical_image: id: '190784' quote: 'Zara to land in India in 2010' main_text: Text: " Zara group is opening new stores in India, starting with a major shop in Delhi, .....”
  • 33. CMS Models -Images ● Elements (name, file, width, height...) ● Resize on demand (GD, Imagemagick) ● Storage – CDN – Custom server optimized (lighthttpd, cherokee...) – Every server (Rsync sycronization, reverse proxy)
  • 34. Original Image Thumbnail with Gravity Top Thumbnail without Gravity
  • 35. Template Management - Navigation ● Ability to manage and automate layouts, templates and modules: not only a template language. ● Layouts (decorators) and templates are associated to a navigation points ● Hierarchical Inheritance ● Backend controls template system
  • 36.
  • 37. Template Management - Navigation Template (Backend) Template Configuration Page (Frontend) (Backend) * Renders the * Skeleton fo the final * Gets template and ask content, based on layout. It contains the for necessary the template and the HTML + tag based template engine + information. = data stored in the backend. syntax * Generates Form Widgets. * Virtual fields. Designers / Front-end engineers Editors
  • 38.
  • 39.
  • 40. Template Management Template Example <ul class="home_links"> <li> <ul> <snippet:eachArticle config: { name: enlace_articulo_moda }> <li><a href="<?php echo $record->url ?>"> <?php echo $record->getTitle() ?> </a></li> </snippet:eachArticle> </ul> <p><a href="/moda"> ver todas las noticias de 'moda'</a></p> </li> <li>
  • 42.
  • 43. Other Features and tools ● User Management and permissions (sfGuardUser) ● Comments Moderation ● Custom data models (sport standings, real state listings...) ● Sphinx search ● External Feeds ● Git
  • 44. Infraestructure Web Users Internet Load Balancer Web Server 1 Web Server 2 Multiservice Backend Write Queries Read Queries Master DB Slave DB
  • 45. Performance $timer = sfTimerManager::getTimer('myTimer'); // Do things ● Symfony timer ... // Stop the timer and add the elapsed time $timer->addTime(); // Get the result (and stop the timer if not already stopped) $elapsedTime = $timer->getElapsedTime(); ● Routing cache in versions 1.2.x
  • 46. Performance ● Doctrine Query and Results cache ● Control Hydrations Cache Manager ● Symfony View Cache Load Testing ● Memcached
  • 47. delivery and acceptance ● Maintenance is another topic, will the final customer/users need it. ● Identify what to maintain from the beginning (infraestructure, templating, design...) ● Many times, you'll find yourself maintaining not being able to leave the project! Plan acceptance
  • 48. Some Clients feedback ● “I expected bugs!! Where are they?” (Or where are they in the planification?) ● “I expected a traffic drop. It is increasing since first day!!” ● “Symfony is slow? My site is fast!!” - Many times performance issues are not in the framework or language (PHP) itself.
  • 50. Thanks! reach me @ my company: http://www.acilia.es blog: http://www.quevidaesta.com twitter: http://twitter.com/esmiz mail: marcos@acilia.es