Sympal is a content management system built on Symfony and Doctrine. It provides common CMS functionality through plugins while leveraging Symfony's flexibility. Key features include menus, breadcrumbs, content types, inline editing, and a plugin manager for installing additional functionality. Configuration is controlled through YAML files or a web interface.
Symfony2: What's all the buzz about?
Follow along as we download, install and get a hands-on experience using Symfony2. This presentation shows you how to get started with Symfony and introduces you to the large group of new PHP libraries coming from the Symfony2 community. You'll see examples of how to create pages, use template inheritance, and create a simple JSON API.
One user's experience as Lead Developer on Nebul.us upgrading a symfony application for deployment to Amazon's cloud-based infrastructure. We will discuss the obstacles met along the way, including juggling master and slave database connections and writing uploaded files to S3. Additionally, integration with the symfony configuration and environments system will be demonstrated, allowing one application to be developed locally and seamlessly deployed to the cloud.
Symfony2: What's all the buzz about?
Follow along as we download, install and get a hands-on experience using Symfony2. This presentation shows you how to get started with Symfony and introduces you to the large group of new PHP libraries coming from the Symfony2 community. You'll see examples of how to create pages, use template inheritance, and create a simple JSON API.
One user's experience as Lead Developer on Nebul.us upgrading a symfony application for deployment to Amazon's cloud-based infrastructure. We will discuss the obstacles met along the way, including juggling master and slave database connections and writing uploaded files to S3. Additionally, integration with the symfony configuration and environments system will be demonstrated, allowing one application to be developed locally and seamlessly deployed to the cloud.
Symfony und Ember.js auf einer Seite #codetalks14Paul Seiffert
Internetnutzer sind es heutzutage gewohnt, dass Webseiten unmittelbar auf Interaktion reagieren und ohne häufiges Nachladen funktionieren. Techniken, die solche Webseiten ermöglichen, sollten durch die Zuhilfenahme zuverlässiger Frameworks umgesetzt werden. Serverseitig ist für viele Entwickler Symfony das Mittel der Wahl, im Browser kann es Ember.js sein, das vor allem im Bereich der Single-Page-Applikationen glänzt. Mit beiden zusammen kann also nichts mehr schief gehen, oder?
Dieser Vortrag zeigt Symfony und Ember.js in Kombination und wie man umdenken muss, wenn man gewohnt ist, klassische Webseiten zu entwickeln. Speziell geht er auf die dabei auftretenden Herausforderungen im Templating, Routing und bei der Model-Synchronisierung ein.
Drupal8 modernization (new object-oriented base) and adoption of many Symfony components is a huge step in connecting these two amazing communities and amazing projects. Drupal8 is not powered by full-stack Symfony and there is still many differences between these two relatives, but still, Symfony developers should master it easily. This talk is for Symfony developers who don't have experience with Drupal8. It will guide you through routing, controllers, hooks, events, Drupal Console, DI and many other interesting elements that power Drupal8 under the hood. It will also show how to build custom modules Symfony way.
If you have used Facebook's React library, then you are familiar with the concept of application state. React components are, at their core (and as noted in the official documentation), simple state machines. This declarative approach to building a UI may take some adjusting to, but it ultimately simplifies kludgy imperative code into smaller, much more manageable pieces.
This pattern of manipulating state and responding to those changes can be implemented to great effect using the Symfony Event Dispatcher. This talk will step through this state-based approach to building an easily maintained and testable PHP application, tease out a few gotchas, and share real-world applications.
s React.js a library or a framework? In any case, it is a new way of working that represents a revolution in the way of building web projects. It has very particular characteristics that allow us, for instance, to render React code from the server side, or to include React components from Twig tags. During this talk we will present React.js, we will explore how to take advantage of it from PHP projects and we will give answers to practical problems such as universal (isomorphical) rendering and the generation of React.js forms from Symfony forms without duplication of efforts.
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
New Symfony Tips & Tricks (SymfonyCon Paris 2015)Javier Eguiluz
This talk included tens of tips and tricks, new features and rarely used options for Symfony and its ecosystem. Besides the full-stack Symfony framework, other related technologies were mentioned, like Doctrine, Composer, Twig, PHPUnit and Monolog.
Slides from my Docker workshop at PHPCon 2016. From a simple docker run command through own images and Dockerfiles to docker-compose setup supporting scalable app testing on local environment
We talked about some interesting things that came to php since the release of php 7. Covered the new features in php 7.1 in more detail and took a look at what is known already for php 7.2.
Progressively enhance your Symfony 4 app using Vue, API Platform, Mercure and...Les-Tilleuls.coop
Thanks to the new capabilities of the web platform (web components, Progressive Web Apps…) and the rise of modern JS libraries (Vue, React, Angular) almost all modern Symfony applications must leverage the frontend ecosystem.
Symfony 4 embed many gems that make it easy to integrate modern JavaScript within the framework, including the first component entirely written in JS: Webpack Encore.
In Symfony 4.2, another component that is super convenient for apps containing JS code has been released: Panther, a PHP library compatible with BrowserKit, that drives real web browsers to create end-to-end (E2E) tests with ease.
During this talk, I'll show you how to cleanly integrate modern JavaScript code with Symfony and Twig and how to test such applications using Panther.
The examples will use VueJS, because it’s probably the easiest JS framework to get started with as a PHP developer, but all the tips and tricks will be applicable with other libraries such as React or Angular.
Finally, we'll add some real time capabilities to our app using Mercure.rocks
Symfony 4 is a very different framework from the previous versions. Symfony 4 provides a new developer experience on a very stable foundation. Learn more about how you can quickly develop new applications and how you can grow your projects from a micro-style app to a full monolith or a set of micro-services.
Magento Meetup New Delhi- Console
This slide is all about-
What is console?
What are the benefits of using console?
Why should we use console?
Why there is a console in Magento2?
Thanks to the new capabilities of the web platform (web components, Progressive Web Apps…) and the rise of modern JS libraries (Vue, React, Angular) almost all modern Symfony applications must leverage the frontend ecosystem.
Symfony 4 embed many gems that make it easy to integrate modern JavaScript within the framework, including the first component entirely written in JS: Webpack Encore.
In Symfony 4.2, another component that is super convenient for apps containing JS code has been released: Panther, a PHP library compatible with BrowserKit, that drives real web browsers to create end-to-end (E2E) tests with ease.
During this talk, I'll show you how to cleanly integrate modern JavaScript code with Symfony and Twig and how to test such applications using Panther.
The examples will use VueJS, because it’s probably the easiest JS framework to get started with as a PHP developer, but all the tips and tricks will be applicable with other libraries such as React or Angular.
Finally, we'll add some real time capabilities to our app using Mercure.rocks
Symfony und Ember.js auf einer Seite #codetalks14Paul Seiffert
Internetnutzer sind es heutzutage gewohnt, dass Webseiten unmittelbar auf Interaktion reagieren und ohne häufiges Nachladen funktionieren. Techniken, die solche Webseiten ermöglichen, sollten durch die Zuhilfenahme zuverlässiger Frameworks umgesetzt werden. Serverseitig ist für viele Entwickler Symfony das Mittel der Wahl, im Browser kann es Ember.js sein, das vor allem im Bereich der Single-Page-Applikationen glänzt. Mit beiden zusammen kann also nichts mehr schief gehen, oder?
Dieser Vortrag zeigt Symfony und Ember.js in Kombination und wie man umdenken muss, wenn man gewohnt ist, klassische Webseiten zu entwickeln. Speziell geht er auf die dabei auftretenden Herausforderungen im Templating, Routing und bei der Model-Synchronisierung ein.
Drupal8 modernization (new object-oriented base) and adoption of many Symfony components is a huge step in connecting these two amazing communities and amazing projects. Drupal8 is not powered by full-stack Symfony and there is still many differences between these two relatives, but still, Symfony developers should master it easily. This talk is for Symfony developers who don't have experience with Drupal8. It will guide you through routing, controllers, hooks, events, Drupal Console, DI and many other interesting elements that power Drupal8 under the hood. It will also show how to build custom modules Symfony way.
If you have used Facebook's React library, then you are familiar with the concept of application state. React components are, at their core (and as noted in the official documentation), simple state machines. This declarative approach to building a UI may take some adjusting to, but it ultimately simplifies kludgy imperative code into smaller, much more manageable pieces.
This pattern of manipulating state and responding to those changes can be implemented to great effect using the Symfony Event Dispatcher. This talk will step through this state-based approach to building an easily maintained and testable PHP application, tease out a few gotchas, and share real-world applications.
s React.js a library or a framework? In any case, it is a new way of working that represents a revolution in the way of building web projects. It has very particular characteristics that allow us, for instance, to render React code from the server side, or to include React components from Twig tags. During this talk we will present React.js, we will explore how to take advantage of it from PHP projects and we will give answers to practical problems such as universal (isomorphical) rendering and the generation of React.js forms from Symfony forms without duplication of efforts.
Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.
New Symfony Tips & Tricks (SymfonyCon Paris 2015)Javier Eguiluz
This talk included tens of tips and tricks, new features and rarely used options for Symfony and its ecosystem. Besides the full-stack Symfony framework, other related technologies were mentioned, like Doctrine, Composer, Twig, PHPUnit and Monolog.
Slides from my Docker workshop at PHPCon 2016. From a simple docker run command through own images and Dockerfiles to docker-compose setup supporting scalable app testing on local environment
We talked about some interesting things that came to php since the release of php 7. Covered the new features in php 7.1 in more detail and took a look at what is known already for php 7.2.
Progressively enhance your Symfony 4 app using Vue, API Platform, Mercure and...Les-Tilleuls.coop
Thanks to the new capabilities of the web platform (web components, Progressive Web Apps…) and the rise of modern JS libraries (Vue, React, Angular) almost all modern Symfony applications must leverage the frontend ecosystem.
Symfony 4 embed many gems that make it easy to integrate modern JavaScript within the framework, including the first component entirely written in JS: Webpack Encore.
In Symfony 4.2, another component that is super convenient for apps containing JS code has been released: Panther, a PHP library compatible with BrowserKit, that drives real web browsers to create end-to-end (E2E) tests with ease.
During this talk, I'll show you how to cleanly integrate modern JavaScript code with Symfony and Twig and how to test such applications using Panther.
The examples will use VueJS, because it’s probably the easiest JS framework to get started with as a PHP developer, but all the tips and tricks will be applicable with other libraries such as React or Angular.
Finally, we'll add some real time capabilities to our app using Mercure.rocks
Symfony 4 is a very different framework from the previous versions. Symfony 4 provides a new developer experience on a very stable foundation. Learn more about how you can quickly develop new applications and how you can grow your projects from a micro-style app to a full monolith or a set of micro-services.
Magento Meetup New Delhi- Console
This slide is all about-
What is console?
What are the benefits of using console?
Why should we use console?
Why there is a console in Magento2?
Thanks to the new capabilities of the web platform (web components, Progressive Web Apps…) and the rise of modern JS libraries (Vue, React, Angular) almost all modern Symfony applications must leverage the frontend ecosystem.
Symfony 4 embed many gems that make it easy to integrate modern JavaScript within the framework, including the first component entirely written in JS: Webpack Encore.
In Symfony 4.2, another component that is super convenient for apps containing JS code has been released: Panther, a PHP library compatible with BrowserKit, that drives real web browsers to create end-to-end (E2E) tests with ease.
During this talk, I'll show you how to cleanly integrate modern JavaScript code with Symfony and Twig and how to test such applications using Panther.
The examples will use VueJS, because it’s probably the easiest JS framework to get started with as a PHP developer, but all the tips and tricks will be applicable with other libraries such as React or Angular.
Finally, we'll add some real time capabilities to our app using Mercure.rocks
Capistrano is an open source tool for running scripts on multiple servers. It’s primary use is for easily deploying applications. While it was built specifically for deploying Rails apps, it’s pretty simple to customize it to deploy other types of applications.
capifony is a deployment recipes collection that works with both symfony and Symfony2 applications.
How to Clear Cache in a Symfony Cross ApplicationMike Taylor
How to clear cache in a Symfony cross application, multi server environment in Symfony How to clear cache in a cross application, multi server environment in Symfony
Come to this talk prepared to learn about the Doctrine PHP open source project. The Doctrine project has been around for over a decade and has evolved from database abstraction software that dates back to the PEAR days. The packages provided by the Doctrine project have been downloaded almost 500 million times from packagist. In this talk we will take you through how to get started with Doctrine and how to take advantage of some of the more advanced features.
Doctrine 2: Enterprise Persistence Layer for PHPJonathan Wage
Doctrine 2 is an object relational mapper (ORM) for PHP 5.3+ that sits on top of a powerful database abstraction layer (DBAL). One of its key features is the option to write database queries in a proprietary object oriented SQL dialect called Doctrine Query Language (DQL), inspired by Hibernates HQL. This provides developers with a powerful alternative to SQL that maintains flexibility without requiring unnecessary code duplication.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
Dr. Sean Tan, Head of Data Science, Changi Airport Group
Discover how Changi Airport Group (CAG) leverages graph technologies and generative AI to revolutionize their search capabilities. This session delves into the unique search needs of CAG’s diverse passengers and customers, showcasing how graph data structures enhance the accuracy and relevance of AI-generated search results, mitigating the risk of “hallucinations” and improving the overall customer journey.
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionAggregage
Join Maher Hanafi, VP of Engineering at Betterworks, in this new session where he'll share a practical framework to transform Gen AI prototypes into impactful products! He'll delve into the complexities of data collection and management, model selection and optimization, and ensuring security, scalability, and responsible use.
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfPeter Spielvogel
Building better applications for business users with SAP Fiori.
• What is SAP Fiori and why it matters to you
• How a better user experience drives measurable business benefits
• How to get started with SAP Fiori today
• How SAP Fiori elements accelerates application development
• How SAP Build Code includes SAP Fiori tools and other generative artificial intelligence capabilities
• How SAP Fiori paves the way for using AI in SAP apps
Unlocking Productivity: Leveraging the Potential of Copilot in Microsoft 365, a presentation by Christoforos Vlachos, Senior Solutions Manager – Modern Workplace, Uni Systems
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Removing Uninteresting Bytes in Software FuzzingAftab Hussain
Imagine a world where software fuzzing, the process of mutating bytes in test seeds to uncover hidden and erroneous program behaviors, becomes faster and more effective. A lot depends on the initial seeds, which can significantly dictate the trajectory of a fuzzing campaign, particularly in terms of how long it takes to uncover interesting behaviour in your code. We introduce DIAR, a technique designed to speedup fuzzing campaigns by pinpointing and eliminating those uninteresting bytes in the seeds. Picture this: instead of wasting valuable resources on meaningless mutations in large, bloated seeds, DIAR removes the unnecessary bytes, streamlining the entire process.
In this work, we equipped AFL, a popular fuzzer, with DIAR and examined two critical Linux libraries -- Libxml's xmllint, a tool for parsing xml documents, and Binutil's readelf, an essential debugging and security analysis command-line tool used to display detailed information about ELF (Executable and Linkable Format). Our preliminary results show that AFL+DIAR does not only discover new paths more quickly but also achieves higher coverage overall. This work thus showcases how starting with lean and optimized seeds can lead to faster, more comprehensive fuzzing campaigns -- and DIAR helps you find such seeds.
- These are slides of the talk given at IEEE International Conference on Software Testing Verification and Validation Workshop, ICSTW 2022.
Communications Mining Series - Zero to Hero - Session 1DianaGray10
This session provides introduction to UiPath Communication Mining, importance and platform overview. You will acquire a good understand of the phases in Communication Mining as we go over the platform with you. Topics covered:
• Communication Mining Overview
• Why is it important?
• How can it help today’s business and the benefits
• Phases in Communication Mining
• Demo on Platform overview
• Q/A
UiPath Test Automation using UiPath Test Suite series, part 5DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 5. In this session, we will cover CI/CD with devops.
Topics covered:
CI/CD with in UiPath
End-to-end overview of CI/CD pipeline with Azure devops
Speaker:
Lyndsey Byblow, Test Suite Sales Engineer @ UiPath, Inc.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Threats to mobile devices are more prevalent and increasing in scope and complexity. Users of mobile devices desire to take full advantage of the features
available on those devices, but many of the features provide convenience and capability but sacrifice security. This best practices guide outlines steps the users can take to better protect personal devices and information.
National Security Agency - NSA mobile device best practices
Sympal A Cmf Based On Symfony
1. Sympal - a CMS based on Symfony
Sympal
Content Management System Based on Symfony
Jonathan H. Wage: Sympal a CMS Based on Symfony 1
2. Sympal - a CMS based on Symfony
Sympal is a Content Management System built
on top of Symfony and Doctrine.
It is an evolution of many smaller CMS systems
used in projects over the years.
Jonathan H. Wage: Sympal a CMS Based on Symfony 2
3. Sympal - a CMS based on Symfony
• Collection of Symfony plugins
– sfSympalPlugin
• sfFeed2Plugin
• sfFormExtraPlugin
• sfSuperCachePlugin
• sfSympalMenuPlugin
• sfSympalPagesPlugin
• sfSympalPluginManagerPlugin
• sfSympalUserPlugin
• sfTaskExtraPlugin
• sfWebBrowserPlugin
Jonathan H. Wage: Sympal a CMS Based on Symfony 3
4. Sympal - a CMS based on Symfony
The Idea
Jonathan H. Wage: Sympal a CMS Based on Symfony 4
5. Sympal - a CMS based on Symfony
• The idea spawned from a need
• Custom functionality in Symfony is
easy
• Standard CMS functionality is not
so easy
Jonathan H. Wage: Sympal a CMS Based on Symfony 5
6. Sympal - a CMS based on Symfony
• A project with 75% custom functionality
and 25% CMS functionality.
• The 75% custom is no problem
• But what about that 25%?
• It sometimes ends up taking more time
than the 75% custom!
• We repeat ourselves a lot when it
comes to CMS functionality
Jonathan H. Wage: Sympal a CMS Based on Symfony 6
7. Sympal - a CMS based on Symfony
So the idea is to provide what something
like Drupal gives you with a powerful MVC
framework and ORM under the hood.
Jonathan H. Wage: Sympal a CMS Based on Symfony 7
8. Sympal - a CMS based on Symfony
The name Sympal was coined by my friend
and ex co-worker Josh Reynolds a few
years ago while brainstorming. Sympal was
born that day and I began recording notes
and collecting code from old projects.
Symfony + Drupal = Sympal
Jonathan H. Wage: Sympal a CMS Based on Symfony 8
9. Sympal - a CMS based on Symfony
The code has existed in my own private
repositories for a long time but not until the
last few months have I started to formalize
it in to a working product and made it
available to the public
Jonathan H. Wage: Sympal a CMS Based on Symfony 9
10. Sympal - a CMS based on Symfony
Highlights
Jonathan H. Wage: Sympal a CMS Based on Symfony 10
11. Sympal - a CMS based on Symfony
• CLI or web installation
• Menus
• Breadcrumbs
• Content types
• Inline or backend content editing
• Content slots
• Plugin manager - Download/Install/Uninstall Sympal
plugins from the CLI or web browser.
• Configuration controlled via YAML or a web form
• Security - users, groups and permissions
Jonathan H. Wage: Sympal a CMS Based on Symfony 11
12. Sympal - a CMS based on Symfony
• Events
• Sending E-Mail
• Multiple Sites
• Multiple Themes/Layouts
• Internationalized URLs
• Map menus to content
• Change url of content without breaking old urls
• SEO
• Logged in user Dashboard
• Uses YUI for JS framework
Jonathan H. Wage: Sympal a CMS Based on Symfony 12
13. Sympal - a CMS based on Symfony
Installation
Jonathan H. Wage: Sympal a CMS Based on Symfony 13
14. Sympal - a CMS based on Symfony
• Install from your browser
• Or from the command line
• Use in new or existing projects
Jonathan H. Wage: Sympal a CMS Based on Symfony 14
15. Sympal - a CMS based on Symfony
Install from your browser
Jonathan H. Wage: Sympal a CMS Based on Symfony 15
16. Sympal - a CMS based on Symfony
• Install from the command line
$ php symfony sympal:install --interactive
• Interactive option prompts you for
the same information as the
browser installation
• Omit --interactive and default
values will be used
Jonathan H. Wage: Sympal a CMS Based on Symfony 16
17. Sympal - a CMS based on Symfony
Once installed you will see the
default Sympal website.
Jonathan H. Wage: Sympal a CMS Based on Symfony 17
18. Sympal - a CMS based on Symfony
Menus
Jonathan H. Wage: Sympal a CMS Based on Symfony 18
19. Sympal - a CMS based on Symfony
• Only requires one query
• Multiple menus
• Sub-menus
• No matter how large or how
complex they only ever require one
query.
• Menus can optionally be cached for
0 queries.
Jonathan H. Wage: Sympal a CMS Based on Symfony 19
20. Sympal - a CMS based on Symfony
YUI tree view for managing menus
Jonathan H. Wage: Sympal a CMS Based on Symfony 20
21. Sympal - a CMS based on Symfony
Drag and drop ordering
Jonathan H. Wage: Sympal a CMS Based on Symfony 21
22. Sympal - a CMS based on Symfony
Right click a menu leaf to manage
Jonathan H. Wage: Sympal a CMS Based on Symfony 22
23. Sympal - a CMS based on Symfony
Rendering menus is done with a
Symfony helper
// returns instance of sfSympalMenuSite which extends sfSympalMenu
$menu = get_sympal_menu('footer');
// sfSympalMenu implements __toString() which invokes rendering
echo $menu;
Jonathan H. Wage: Sympal a CMS Based on Symfony 23
24. Sympal - a CMS based on Symfony
Use custom menu class
class myMenuClass extends sfSympalMenuSite
{
}
echo get_sympal_menu('footer', true, 'myMenuClass');
Jonathan H. Wage: Sympal a CMS Based on Symfony 24
25. Sympal - a CMS based on Symfony
• Specify global custom menu class
in configuration
all:
sympal_config:
menu_class: myMenuClass
• Now all your menus use that class
Jonathan H. Wage: Sympal a CMS Based on Symfony 25
26. Sympal - a CMS based on Symfony
• Core of menu system is database
agnostic
• sfSympalMenu implements the basic
menu functionality
• sfSympalMenuSite extends
sfSympalMenu and implements the
binding to the Doctrine MenuItem
model
Jonathan H. Wage: Sympal a CMS Based on Symfony 26
27. Sympal - a CMS based on Symfony
Using sfSympalMenu standalone
$menu = new sfSympalMenu('My Test Menu');
$menu->addChild('Google', 'http://www.google.com');
$sensio = $menu->addChild('Sensio', 'http://www.sensio.com');
$sensio->addChild('Sensio Labs', 'http://www.sensiolabs.com');
$sensio->addChild('The Symfony MVC Framework', 'http://www.symfony-project.com');
$sensio->addChild('The Symfony Components', 'http://components.symfony-
project.org');
$sensio->addChild('The Doctrine ORM', 'http://www.doctrine-project.org');
$menu->addChild('Yahoo', 'http://www.yahoo.com');
echo $menu;
Jonathan H. Wage: Sympal a CMS Based on Symfony 27
28. Sympal - a CMS based on Symfony
• Serves multiple purposes
– Breadcrumbs
– Admin bar menu
– Floating editor panel
• Building hierarchical structure
through OO interface
• Rendering HTML for the hierarchy
Jonathan H. Wage: Sympal a CMS Based on Symfony 28
29. Sympal - a CMS based on Symfony
• Connect to events to alter these
objects before they are rendered
• Sympal plugins can add items to
the admin bar, menus, floating
editor panel, etc.
• Install a Sympal plugin and the
functionality appears in your site
and is instantly available.
Jonathan H. Wage: Sympal a CMS Based on Symfony 29
30. Sympal - a CMS based on Symfony
• The rendering of menus are done through these functions
which can be overridden and customized.
– render()
– renderChild()
– renderChildBody()
– renderLink()
– renderLabel()
• Rendering is split in to multiple methods to allow you to
override only the pieces you need to change.
Jonathan H. Wage: Sympal a CMS Based on Symfony 30
31. Sympal - a CMS based on Symfony
• Admin bar rendering is customized
with sfSympalMenuAdminBar class
• Overrides renderChild() method so
that the proper HTML is generated
for YUI to work
Jonathan H. Wage: Sympal a CMS Based on Symfony 31
32. Sympal - a CMS based on Symfony
Breadcrumbs
Jonathan H. Wage: Sympal a CMS Based on Symfony 32
33. Sympal - a CMS based on Symfony
• Breadcrumbs don’t require any
additional queries
• Generated from the same
information used for menus
• Also generated with special child
class of sfSympalMenuSite named
sfSympalMenuBreadcrumbs
Jonathan H. Wage: Sympal a CMS Based on Symfony 33
34. Sympal - a CMS based on Symfony
Rendering breadcrumbs are done with a Symfony helper,
similar to the menus
// Get the current menu item to render breadcrumbs for
// Or render breadcrumbs for any Doctrine MenuItem instance
$menuItem = sfSympalToolkit::getCurrentMenuItem();
// Returns instance of sfSympalMenuBreadcrumbs
$breadcrumbs = get_sympal_breadcrumbs($menuItem);
echo $breadcrumbs;
Jonathan H. Wage: Sympal a CMS Based on Symfony 34
35. Sympal - a CMS based on Symfony
Content Types
Jonathan H. Wage: Sympal a CMS Based on Symfony 35
36. Sympal - a CMS based on Symfony
• Sympal comes bundled with two
content types
– Page - Simple title and body
– ContentList - Content type which allows you to specify
information to render a list of another type of content.
• Specify the query
• Sorting
• Limit
• Conditions of list, etc.
• What template to render the list with
Jonathan H. Wage: Sympal a CMS Based on Symfony 36
37. Sympal - a CMS based on Symfony
• Easily add new content types
through Sympal plugins
• Generate a new Sympal plugin that
contains the skeleton for a new
content type which can be installed
Jonathan H. Wage: Sympal a CMS Based on Symfony 37
38. Sympal - a CMS based on Symfony
Generate the new Sympal plugin
$ php symfony sympal:plugin-generate Article --content-type=Article
sfSympalArticlePlugin/
config/
doctrine/
schema.yml
routing.yml
sfSympalArticlePluginConfiguration.class.php
data/
fixtures/
install.yml
lib/
LICENSE
package.xml.tmpl
README
Jonathan H. Wage: Sympal a CMS Based on Symfony 38
39. Sympal - a CMS based on Symfony
• Inspect the generated plugin
• Have a look at the default
schema.yml created
---
Article:
actAs: [sfSympalContentType]
columns:
title: string(255)
body: clob
Jonathan H. Wage: Sympal a CMS Based on Symfony 39
40. Sympal - a CMS based on Symfony
• Now we can install the generated plugin
$ php symfony sympal:plugin-install Article
• Installation does the following
– Generates models, forms, etc. for schema
– Creates tables in the database
– Adds a sample content list for content type
– Adds a sample content record for content type
– Adds a menu item to the primary menu which is
mapped to the content list for the new content
type
Jonathan H. Wage: Sympal a CMS Based on Symfony 40
41. Sympal - a CMS based on Symfony
When we go to add new content we
can now add Articles
Jonathan H. Wage: Sympal a CMS Based on Symfony 41
42. Sympal - a CMS based on Symfony
We can click the menu item added
to the primary menu to view the list
of articles.
Jonathan H. Wage: Sympal a CMS Based on Symfony 42
43. Sympal - a CMS based on Symfony
Click the sample article to view it
Jonathan H. Wage: Sympal a CMS Based on Symfony 43
44. Sympal - a CMS based on Symfony
• Rendering of content types utilizes
Content Templates
• Use different templates to render
different content types
• Use different templates to render
individual content records
• By default it just uses some basic
templates
Jonathan H. Wage: Sympal a CMS Based on Symfony 44
45. Sympal - a CMS based on Symfony
Inline Editing
Jonathan H. Wage: Sympal a CMS Based on Symfony 45
46. Sympal - a CMS based on Symfony
Sympal allows you to edit your
content inline when logged in as an
authorized content editor.
Jonathan H. Wage: Sympal a CMS Based on Symfony 46
47. Sympal - a CMS based on Symfony
When you double click some
content to edit the inline editor will
come up
Jonathan H. Wage: Sympal a CMS Based on Symfony 47
48. Sympal - a CMS based on Symfony
Edit model columns inline in
addition to content slots
Jonathan H. Wage: Sympal a CMS Based on Symfony 48
49. Sympal - a CMS based on Symfony
Plugin Manager
Jonathan H. Wage: Sympal a CMS Based on Symfony 49
50. Sympal - a CMS based on Symfony
• Download, install and uninstall plugins
• Works from the CLI or web browser
• Sympal plugin manager tries to get a
plugin through the symfony
plugin:install task first then tries to find
the plugin in SVN and check it out
Jonathan H. Wage: Sympal a CMS Based on Symfony 50
51. Sympal - a CMS based on Symfony
From the command line
Jonathan H. Wage: Sympal a CMS Based on Symfony 51
52. Sympal - a CMS based on Symfony
From the web browser
Jonathan H. Wage: Sympal a CMS Based on Symfony 52
53. Sympal - a CMS based on Symfony
Jonathan H. Wage: Sympal a CMS Based on Symfony 53
54. Sympal - a CMS based on Symfony
Configuration
Jonathan H. Wage: Sympal a CMS Based on Symfony 54
55. Sympal - a CMS based on Symfony
Controlled via YAML
all:
sympal_config:
menu_class: sfSympalMenuSite
yui_path: http://yui.yahooapis.com/2.7.0/build
super_admin_signin_url: @sympal_dashboard
enable_all_modules: true
admin_module_web_dir: /sfSympalPlugin
load_default_css: true
Jonathan H. Wage: Sympal a CMS Based on Symfony 55
56. Sympal - a CMS based on Symfony
• Or YAML can be controlled via a
web form
• When configuration form is saved
the YAML file is written
Jonathan H. Wage: Sympal a CMS Based on Symfony 56
57. Sympal - a CMS based on Symfony
• Since the configuration uses the
symfony app.yml it can be controlled at
different levels of symfony
– Project
– Application
– Module
Jonathan H. Wage: Sympal a CMS Based on Symfony 57
58. Sympal - a CMS based on Symfony
• Other items related to content records can be
configured at different levels. For example the
layout can be controlled
– Globally
– Per site
– Per content type
– Per content record
• This means you can customize the layout an
individual content record uses.
Jonathan H. Wage: Sympal a CMS Based on Symfony 58
59. Sympal - a CMS based on Symfony
Security
Jonathan H. Wage: Sympal a CMS Based on Symfony 59
60. Sympal - a CMS based on Symfony
• sfSympalUserPlugin is forked version of
sfDoctrineGuardPlugin
– Users
– Groups
– Permissions
– Forgot Password
– Registration
• Menus, content records, etc. can all be locked down with
permissions.
Jonathan H. Wage: Sympal a CMS Based on Symfony 60
61. Sympal - a CMS based on Symfony
List users
Jonathan H. Wage: Sympal a CMS Based on Symfony 61
62. Sympal - a CMS based on Symfony
Edit users
Jonathan H. Wage: Sympal a CMS Based on Symfony 62
63. Sympal - a CMS based on Symfony
List groups
Jonathan H. Wage: Sympal a CMS Based on Symfony 63
64. Sympal - a CMS based on Symfony
Edit group
Jonathan H. Wage: Sympal a CMS Based on Symfony 64
65. Sympal - a CMS based on Symfony
List permissions
Jonathan H. Wage: Sympal a CMS Based on Symfony 65
66. Sympal - a CMS based on Symfony
Edit permission
Jonathan H. Wage: Sympal a CMS Based on Symfony 66
67. Sympal - a CMS based on Symfony
Sympal Admin Generator
Theme
Jonathan H. Wage: Sympal a CMS Based on Symfony 67
68. Sympal - a CMS based on Symfony
• Sympal comes with custom admin
generator them
• Tabbed forms for fieldsets and
embedded forms
Jonathan H. Wage: Sympal a CMS Based on Symfony 68
69. Sympal - a CMS based on Symfony
Easily click Filters to popup the
filters form
Jonathan H. Wage: Sympal a CMS Based on Symfony 69
70. Sympal - a CMS based on Symfony
Floating Editor Panel
Jonathan H. Wage: Sympal a CMS Based on Symfony 70
71. Sympal - a CMS based on Symfony
When logged in as editor and viewing a content
record a floating editor panel is displayed
Jonathan H. Wage: Sympal a CMS Based on Symfony 71
72. Sympal - a CMS based on Symfony
Content Slot Types
Jonathan H. Wage: Sympal a CMS Based on Symfony 72
73. Sympal - a CMS based on Symfony
• A content slot in Sympal is an
arbitrary piece of content and has a
type.
• Sympal comes bundled with a few
content slot types
Jonathan H. Wage: Sympal a CMS Based on Symfony 73
74. Sympal - a CMS based on Symfony
• The default slot types offered by
Sympal are
– Markdown
– MultiLineText
– RichText
– Text
• Add your own custom slot types for
your projects
Jonathan H. Wage: Sympal a CMS Based on Symfony 74
75. Sympal - a CMS based on Symfony
YUI Rich Text Editor
Jonathan H. Wage: Sympal a CMS Based on Symfony 75
76. Sympal - a CMS based on Symfony
The RichText slot type uses the YUI
rich text editor
Jonathan H. Wage: Sympal a CMS Based on Symfony 76
77. Sympal - a CMS based on Symfony
The YUI rich text editor also
implements the ability to upload
and embed images inline
Jonathan H. Wage: Sympal a CMS Based on Symfony 77
78. Sympal - a CMS based on Symfony
Sending E-Mails
Jonathan H. Wage: Sympal a CMS Based on Symfony 78
79. Sympal - a CMS based on Symfony
• A reoccurring need
• Re-implementing the functionality
over and over wasting time
• We need a standard way to send
and manage our e-mail templates
• Sympal offers a solution
Jonathan H. Wage: Sympal a CMS Based on Symfony 79
80. Sympal - a CMS based on Symfony
In your actions you can easily
create new e-mails and send them
class my_moduleActions extends sfActions
{
public function executeSome_action(sfWebRequest $request)
{
$variables = array(
'name' => 'Jonathan H. Wage'
);
$email = $this->newEmail('email_module/test', $variables);
$email->send('jonwage@gmail.com');
}
}
Jonathan H. Wage: Sympal a CMS Based on Symfony 80
81. Sympal - a CMS based on Symfony
• The templates used for a Sympal e-
mail are just a partial or component
• In the previous example we use a
partial named _test.php
Hello <?php echo $name ?>,
This is a test e-mail that we are sending to <?php echo $name ?>
Jonathan H. Wage: Sympal a CMS Based on Symfony 81
82. Sympal - a CMS based on Symfony
• The first line of the template is the
subject
• The second line and after is the
body of the e-mail
• This way the contents of the e-
mail(subject and body) are
managed in one place
Jonathan H. Wage: Sympal a CMS Based on Symfony 82
83. Sympal - a CMS based on Symfony
• The newEmail() method returns an
instance of sfSympalMail
• sfSympalMail is a wrapper around
your mail sending program which
defaults to Swift in Sympal
Jonathan H. Wage: Sympal a CMS Based on Symfony 83
84. Sympal - a CMS based on Symfony
Multiple Sites
Jonathan H. Wage: Sympal a CMS Based on Symfony 84
85. Sympal - a CMS based on Symfony
• Sympal can handle multiple sites
• A sympal site is directly bound to a
symfony application
• This is how Sympal knows which
site you are in and can limit the
data to only that site
Jonathan H. Wage: Sympal a CMS Based on Symfony 85
86. Sympal - a CMS based on Symfony
Jonathan H. Wage: Sympal a CMS Based on Symfony 86
87. Sympal - a CMS based on Symfony
Search Engine Optimization
Jonathan H. Wage: Sympal a CMS Based on Symfony 87
88. Sympal - a CMS based on Symfony
• SEO capabilities are built in
• You can specify global title,
keywords and description for your
project.
• They can also be overridden by
each site or even by individual
content records
Jonathan H. Wage: Sympal a CMS Based on Symfony 88
89. Sympal - a CMS based on Symfony
• sfSympalAutoSEOPlugin
– Who is going to write it? :)
– Automatically generate SEO for content
records from the final rendered HTML
• Parse the first <h1> tag value for the meta title
• Build a list of top words used in the content
record for the meta keywords
• Parse the first <p> tag value for the meta
description
– Write good content and you’ll have SEO
Jonathan H. Wage: Sympal a CMS Based on Symfony 89
90. Sympal - a CMS based on Symfony
Dashboard
Jonathan H. Wage: Sympal a CMS Based on Symfony 90
91. Sympal - a CMS based on Symfony
When a user logs in and has some credentials he’ll be
forwarded to his dashboard. A super administrator would
see everything. Something like the below...
Jonathan H. Wage: Sympal a CMS Based on Symfony 91
92. Sympal - a CMS based on Symfony
• Dashboard is generated using the
sfSympalMenu classes
• The menu instance used to
generate the dashboard is passed
through an event so you can easily
add to it by connecting to an event
Jonathan H. Wage: Sympal a CMS Based on Symfony 92
93. Sympal - a CMS based on Symfony
Connect to dashboard event and
add to the menu object
class sfSympalTestPluginConfiguration extends sfPluginConfiguration
{
public function initialize()
{
$this->dispatcher->connect('sympal.load_dashboard_boxes',
array($this, 'loadDashboardBoxes')
);
}
public function loadDashboardBoxes(sfEvent $event)
{
$menu = $event['menu'];
$menu->addChild('My New Box', '@route_name');
}
}
Jonathan H. Wage: Sympal a CMS Based on Symfony 93
94. Sympal - a CMS based on Symfony
Multiple Themes
Jonathan H. Wage: Sympal a CMS Based on Symfony 94
95. Sympal - a CMS based on Symfony
• Sympal offers the ability to have
themes and you can configure in
multiple places what them to use
– Globally
– Per site
– Per content type
– Or per content record
Jonathan H. Wage: Sympal a CMS Based on Symfony 95
96. Sympal - a CMS based on Symfony
• We can now easily have Sympal theme plugins
that you can download and instantly have a
new theme to change to
• We already have three themes available that
you can download and use
– sfSympalPlugin - The default theme included with
Sympal
– sfSympalJwageThemePlugin - The theme used on my
personal website, jwage.com
– sfSympalDoctrineThemePlugin - The theme which
powers the Doctrine website
Jonathan H. Wage: Sympal a CMS Based on Symfony 96
97. Sympal - a CMS based on Symfony
Doctrine Theme
Sympal Theme
Jonathan H. Wage: Sympal a CMS Based on Symfony 97
98. Sympal - a CMS based on Symfony
Sympal CLI Tasks
Jonathan H. Wage: Sympal a CMS Based on Symfony 98
99. Sympal - a CMS based on Symfony
Sympal comes with some other
pretty useful tasks for improving
your productivity when working in
Symfony
Jonathan H. Wage: Sympal a CMS Based on Symfony 99
100. Sympal - a CMS based on Symfony
• Most notable CLI tasks
– sympal:delete-model - Delete a model from your
project. Finds and deletes model, form and filter files all
in one command
– sympal:report-statistics - This task will report back to the
Symfony Plugins API what all plugins you’re using in
your project and will add them to your stack.
– sympal:event-list - Report a list of events that are
available for a URL in your application
• See who has connected to an event
Jonathan H. Wage: Sympal a CMS Based on Symfony 100
101. Sympal - a CMS based on Symfony
Show a list of all available events
for a URL
Jonathan H. Wage: Sympal a CMS Based on Symfony 101
102. Sympal - a CMS based on Symfony
Show only the events which have
been connected to
Jonathan H. Wage: Sympal a CMS Based on Symfony 102
103. Sympal - a CMS based on Symfony
Inspect an individual event to see
who has connected to it and more
importantly where!
Jonathan H. Wage: Sympal a CMS Based on Symfony 103
104. Sympal - a CMS based on Symfony
More on Sympal Events
Jonathan H. Wage: Sympal a CMS Based on Symfony 104
105. Sympal - a CMS based on Symfony
• Some might say I have overused
the Symfony events system in
Sympal
• But, I really like it and I find it very
useful in the CMS context. It allows
for things to be very flexible and
“changeable” by use of events.
Jonathan H. Wage: Sympal a CMS Based on Symfony 105
106. Sympal - a CMS based on Symfony
• A re-occurring question
– How can I add to a model of another plugin,
or a model in my project from a plugin.
– Before Sympal this was not possible but now
if you models simply actAs sfSympalRecord
or sfSympalContentType you can connect to
an event which is notified during the setup of
a Doctrine model
Jonathan H. Wage: Sympal a CMS Based on Symfony 106
107. Sympal - a CMS based on Symfony
• Add a new column to the Sympal User
model
• The schema for the model looks like
this User:
tableName: users
actAs: [Timestampable, sfSympalRecord]
columns:
first_name: string(255)
last_name: string(255)
# ...
Jonathan H. Wage: Sympal a CMS Based on Symfony 107
108. Sympal - a CMS based on Symfony
• The actAs: [sfSympalRecord]
allows us to connect to two events
– sympal.user.set_table_definition
– sympal.user.set_up
• The set table definition allows us to
add new columns, indexes, etc.
• The set up allows us to add
relationships, add behaviors, etc.
Jonathan H. Wage: Sympal a CMS Based on Symfony 108
109. Sympal - a CMS based on Symfony
Now lets connect to the set table
definition event and add a new column
class sfSympalTestPluginConfiguration extends sfPluginConfiguration
{
public function initialize()
{
$this->dispatcher->connect('sympal.user.set_table_definition',
array($this, 'setUserTableDefinition')
);
}
public function setUserTableDefinition(sfEvent $event)
{
$model = $event->getSubject();
$model->hasColumn('my_new_column', 'string', 255);
}
}
Jonathan H. Wage: Sympal a CMS Based on Symfony 109
110. Sympal - a CMS based on Symfony
• We have a lot more events and I can’t talk about them all
• But I will try and list some of the other notable events
– sympal.user.pre_signin
– sympal.user.post_signin
– sympal.load_breadcrumbs
– sympal.<model_name>.method_not_found
– sympal.post_render_page_content
– sympal.load_tools
Jonathan H. Wage: Sympal a CMS Based on Symfony 110
111. Sympal - a CMS based on Symfony
With the Symfony events and the PHP __call()
magic function we can fake “extending” a class
by invoking a method_not_found event and
letting users connect to it
class sfSympalTestPluginConfiguration extends sfPluginConfiguration
{
public function initialize()
{
$this->dispatcher->connect('sympal.user.method_not_found',
array(new myUserExtension(), 'extend')
);
}
}
Jonathan H. Wage: Sympal a CMS Based on Symfony 111
112. Sympal - a CMS based on Symfony
Now lets define the
myUserExtension class and add
some new functionality
class myUserExtension extends sfSympalExtendClass
{
public function getFullName()
{
return trim($this->getFirstName().' '.$this->getLastName());
}
}
Jonathan H. Wage: Sympal a CMS Based on Symfony 112
113. Sympal - a CMS based on Symfony
Now when I work with a User model
instance I will be able to access my
getFullName() method
$user = new User();
$user->first_name = 'Jonathan';
$user->last_name = 'Wage';
echo $user->getFullName(); // Jonathan Wage
Jonathan H. Wage: Sympal a CMS Based on Symfony 113
114. Sympal - a CMS based on Symfony
What is next?
Jonathan H. Wage: Sympal a CMS Based on Symfony 114
115. Sympal - a CMS based on Symfony
• Continued development of Sympal
• Work towards a 1.0 release
• Spread the word and try and get as
much feedback as possible
Jonathan H. Wage: Sympal a CMS Based on Symfony 115
116. Sympal - a CMS based on Symfony
What do we need?
Jonathan H. Wage: Sympal a CMS Based on Symfony 116
117. Sympal - a CMS based on Symfony
• Users, testers, feedback, etc.
• Development help, documentation
help
• For development, we need the
most help with the frontend
Jonathan H. Wage: Sympal a CMS Based on Symfony 117
118. Sympal - a CMS based on Symfony
• Frontend development
– YUI/JS/CSS guru
– Usability guru
• Backend development
– Familiarity with Symfony and Doctrine
obviously
– Familiarity with other popular CMS in any
other languages to help with functionality and
implementation
Jonathan H. Wage: Sympal a CMS Based on Symfony 118
119. Sympal - a CMS based on Symfony
Questions?
Jonathan H. Wage
jonathan.wage@sensio.com
+1 415 992 5468
sensiolabs.com | doctrine-project.org | sympalphp.org | jwage.com
You can contact Jonathan about Doctrine and Open-Source or
for training, consulting, application development, or business
related questions at jonathan.wage@sensio.com
Jonathan H. Wage: Sympal a CMS Based on Symfony 119