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

Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 

Recently uploaded (20)

Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 

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