Plone Training
2021

Training Overview

  • Mastering Plone 6 Development
    • 1. About Mastering Plone
      • 1.1. The beginning and the continuation
      • 1.2. Upcoming Trainings
      • 1.3. Previous Trainings
      • 1.4. Trainers
      • 1.5. Using the documentation for a training
        • 1.5.1. The readthedocs theme
        • 1.5.2. Exercises
      • 1.6. Building the documentation locally
        • 1.6.1. Dependencies and new build
        • 1.6.2. Update existing
        • 1.6.3. Sync the browser to your editing
        • 1.6.4. Technical set up to do before a training (as a trainer)
        • 1.6.5. Upgrade the vagrant and buildout to a new Plone-version
      • 1.7. Train the trainer
      • 1.8. Contributing
      • 1.9. License
    • 2. Watch the Training Video
    • 3. Introduction
      • 3.1. Who are you?
      • 3.2. Classroom Protocol
      • 3.3. Documentation
      • 3.4. Further Reading
    • 4. The Case Study
      • 4.1. Background
      • 4.2. Requirements
      • 4.3. Changing requirements
      • 4.4. Tasks
      • 4.5. What will we do?
      • 4.6. What will we not do?
    • 5. What is Plone?
      • 5.1. Core concepts
        • 5.1.1. Traversal
        • 5.1.2. Object publishing
        • 5.1.3. Schema-driven content
        • 5.1.4. Component Architecture
        • 5.1.5. Rest API
        • 5.1.6. Volto Frontend
        • 5.1.7. Classic Frontend
    • 6. Installation & Setup
      • 6.1. Installing Plone
      • 6.2. Installing Volto
      • 6.3. Hosting Plone
      • 6.4. Production Deployment
    • 7. Installing Plone for the Training
      • 7.1. Installing Plone without vagrant
        • 7.1.1. Installing the backend
        • 7.1.2. Installing the frontend
      • 7.2. Installing Plone with Vagrant
        • 7.2.1. Install VirtualBox
        • 7.2.2. Install and configure Vagrant
        • 7.2.3. What Vagrant does
    • 8. The Features of Plone
      • 8.1. Starting and Stopping Plone
      • 8.2. Creating a Plone Site
      • 8.3. Starting and Stopping the frontend
        • 8.3.1. Exercises
      • 8.4. Walkthrough of the UI
      • 8.5. Users
      • 8.6. Configure a Mailserver
      • 8.7. The site structure
      • 8.8. Default content types
      • 8.9. Folders
      • 8.10. Collections
      • 8.11. Content Rules
      • 8.12. History
      • 8.13. Manage members and groups
      • 8.14. Workflows
      • 8.15. Working copy
      • 8.16. Placeful workflows
    • 9. The Anatomy of Plone
      • 9.1. Database
      • 9.2. Zope
      • 9.3. Content Management Framework
      • 9.4. Zope Toolkit / Zope3
      • 9.5. Zope Component Architecture (ZCA)
      • 9.6. Pyramid
      • 9.7. Exercise
      • 9.8. Plone
      • 9.9. REST API
      • 9.10. Volto
    • 10. What’s New in Plone?
      • 10.1. Plone 5.0
        • 10.1.1. Content Types
        • 10.1.2. Default Theme
        • 10.1.3. New UI and widgets
        • 10.1.4. Folder Contents
        • 10.1.5. Resource Registry
        • 10.1.6. Chameleon template engine
        • 10.1.7. Control panel
        • 10.1.8. Date formatting on the client side
        • 10.1.9. plone.app.multilingual
        • 10.1.10. New portlet manager
      • 10.2. Plone 5.1
      • 10.3. Plone 5.2
      • 10.4. Plone 6
    • 11. Volto Basics
    • 12. Configuring and Customizing Plone “Through The Web”
      • 12.1. The Control Panel
        • 12.1.1. General
        • 12.1.2. Content
        • 12.1.3. Users
        • 12.1.4. Security
        • 12.1.5. Advanced
      • 12.2. Portlets
      • 12.3. Viewlets
      • 12.4. ZMI (Zope Management Interface)
        • 12.4.1. Actions (portal_actions)
        • 12.4.2. portal_view_customizations
        • 12.4.3. Further tools in the ZMI
      • 12.5. Summary
    • 13. Customizing Volto Components
      • 13.1. Component shadowing
      • 13.2. The Logo
      • 13.3. The Footer
      • 13.4. The News Item View
      • 13.5. The Summary View
      • 13.6. The Listing Block
      • 13.7. Localization
      • 13.8. Summary
    • 14. Semantic UI
    • 15. Theming in Volto
      • 15.1. Changing the favicon
    • 16. Extending Plone
      • 16.1. Extension technologies
        • 16.1.1. Component Architecture
        • 16.1.2. Configuring Zope Components with ZCML
        • 16.1.3. GenericSetup
    • 17. Extending Plone With Add-on Packages
      • 17.1. Some notable Plone add-ons for a classic Plone setup without Volto frontend
      • 17.2. How to find add-ons
      • 17.3. Installing Plone Add-ons
        • 17.3.1. Making the add-on packages available to Zope
        • 17.3.2. Installing add-ons in your Plone Site
      • 17.4. collective.easyform
      • 17.5. Add page layout management with plone.app.mosaic
      • 17.6. Internationalization
      • 17.7. Summary classic Plone
    • 18. Buildout I
      • 18.1. Minimal Example
      • 18.2. Syntax
      • 18.3. Recipes
      • 18.4. Variables and References
      • 18.5. A real life example
      • 18.6. Mr. Developer
      • 18.7. Extensible
      • 18.8. Be McGuyver
    • 19. Write Your Own Python Add-On to Customize Plone
      • 19.1. Creating the package
      • 19.2. Volto Add-ons
      • 19.3. Eggs
      • 19.4. Inspecting the new package
      • 19.5. Including the package in Plone
      • 19.6. Exercises
      • 19.7. Summary
    • 20. Dexterity I: Content types
      • 20.1. What is a content type?
      • 20.2. The makings of a Plone content type
      • 20.3. Schemas, Fields and Values
      • 20.4. Behaviors
      • 20.5. Modifying existing types
      • 20.6. Creating content types TTW
      • 20.7. Exercises
        • 20.7.1. Exercise 1
    • 21. Dexterity II: Talks
      • 21.1. The type registration
      • 21.2. The fti
      • 21.3. The schema
      • 21.4. The instance class
      • 21.5. Try the new type
      • 21.6. Summary
    • 22. Dexterity: Reference
      • 22.1. Fields included in Plone
      • 22.2. How fields look like
        • 22.2.1. Backend
        • 22.2.2. Frontend
      • 22.3. 3rd party fields
      • 22.4. Datagrid Field
      • 22.5. Widgets
      • 22.6. Directives
        • 22.6.1. Validation and default values
    • 23. Volto View Components: A Default View for “Talk”
    • 24. Behaviors
      • 24.1. Dexterity Approach
      • 24.2. Names and Theory
      • 24.3. Practical example
      • 24.4. Adding it to our talk
      • 24.5. Add a index for the new field
      • 24.6. Add a metadata column for the new field
      • 24.7. Exercises
        • 24.7.1. Exercise 1
    • 25. Creating a dynamic frontpage with Volto blocks
      • 25.1. Add Index as collection criteria
      • 25.2. Add listing block to show featured content
    • 26. Volto View Components: A Listing View for Talks
      • 26.1. Register the view in Volto and Plone
      • 26.2. Display the content of a folder
      • 26.3. Using the search endpoint
      • 26.4. Search options
      • 26.5. Exercises
        • 26.5.1. Exercise 1
        • 26.5.2. Exercise 2
    • 27. Programming Plone
      • 27.1. plone.api
      • 27.2. portal-tools
      • 27.3. Debugging
      • 27.4. Exercise
    • 28. IDEs and Editors
    • 29. Custom Search
      • 29.1. eea.facetednavigation
      • 29.2. collective.collectionfilter
    • 30. Turning Talks into Events
      • 30.1. Add date fields
      • 30.2. Display the dates
      • 30.3. Hiding fields from certain users
      • 30.4. Display the date in the listing
        • 30.4.1. Exercise
      • 30.5. Summary
    • 31. Vocabularies, Registry-Settings and Control Panels
      • 31.1. Introduction
      • 31.2. The Registry
      • 31.3. Registry-records
      • 31.4. Accessing and modifying records in the registry
      • 31.5. Managing custom registry records
      • 31.6. Add a custom control panel
      • 31.7. Vocabularies
      • 31.8. Using vocabularies in a schema
      • 31.9. Summary
    • 32. Upgrade-steps
      • 32.1. Upgrade steps
      • 32.2. Browserlayers
      • 32.3. Add catalog indexes
      • 32.4. Query for custom indexes
      • 32.5. Exercise 1
      • 32.6. Add collection criteria
      • 32.7. Add versioning through GenericSetup
      • 32.8. Summary
    • 33. Testing in Plone
      • 33.1. Testing permissions, features and UI topics
      • 33.2. Testing the rendering of a component
    • 34. Using Third-Party Behaviors
      • 34.1. Add Teaser With collective.behavior.banner
    • 35. Dexterity Types III: Sponsors
      • 35.1. The Python schema
      • 35.2. The Factory Type Information, or FTI
        • 35.2.1. Exercise 1
      • 35.3. Summary
    • 36. The Sponsors Component
      • 36.1. A React component
      • 36.2. The Sponsors Component
        • 36.2.1. Customizing the Footer
        • 36.2.2. Getting the sponsors data
        • 36.2.3. Connection of component and store
        • 36.2.4. Presentation of the prepared data
      • 36.3. Exercise
      • 36.4. Summary
    • 37. Using Volto add-ons
      • 37.1. Volto Add-ons
      • 37.2. Complementing Volto with Plone add-ons
    • 38. Rich Text Editor Settings
    • 39. Custom Block
      • 39.1. Exercise
      • 39.2. Prospect
    • 40. Extending Volto With Custom Add-on Package
      • 40.1. Enrich an existing project with your new released add-on
      • 40.2. Create a new project with your new released add-on
      • 40.3. Footnotes
    • 41. Extending Volto With a FAQ Block Type
      • 41.1. Save your work to Github
      • 41.2. Footnotes
    • 42. Workflow, Roles and Permissions
      • 42.1. Self-registration
      • 42.2. Constrain types
      • 42.3. Grant local roles
      • 42.4. A custom workflow for talks
      • 42.5. Move the changes to the file system
        • 42.5.1. Import/Export the Workflow
        • 42.5.2. Enable self-registration
        • 42.5.3. Grant local roles
    • 43. Relations
      • 43.1. Creating relations in a schema
      • 43.2. Controlling what to relate to
      • 43.3. Use a tailor shaped widget for relations
      • 43.4. Accessing and displaying related items
      • 43.5. Creating RelationFields through the web
      • 43.6. Accessing relations and backrelations from code
      • 43.7. The stack
      • 43.8. RelationValues
    • 44. Creating Reusable Packages
    • 45. More Complex Behaviors
      • 45.1. Using Annotations
      • 45.2. Using Schema
      • 45.3. Writing Code
        • 45.3.1. Exercises
    • 46. A Viewlet for the Votable Behavior
      • 46.1. Voting Viewlet
      • 46.2. Writing the Viewlet code
      • 46.3. The template
      • 46.4. JavaScript code
      • 46.5. Writing 2 simple view helpers
    • 47. Making Our Package Reusable
      • 47.1. Adding permissions
      • 47.2. Using our permissions
      • 47.3. Provide defaults
    • 48. Using starzel.votable_behavior in ploneconf.site
    • 49. Releasing Your Code
    • 50. Buildout II: Getting Ready for Deployment
      • 50.1. The Starzel buildout
      • 50.2. A deployment setup
      • 50.3. Other tools we use
    • 51. Plone REST API
      • 51.1. Installing plone.restapi
      • 51.2. Explore the API
        • 51.2.1. Exercise
      • 51.3. Implementing the talklist
      • 51.4. Submit lightning talks
      • 51.5. Exercise
    • 52. The Future of Plone
    • 53. Optional
    • Using the code for the training
      • The code-package
      • Getting the code for a certain chapter
      • Moving from chapter to chapter
      • Tags
      • Updating the code-package
    • Timetable
      • Ploneconf 2020
      • Ploneconf 2017
      • Version 1.2
      • Version 1.1
  • Mastering Plone 5 Development
    • 1. About Mastering Plone
      • 1.1. Upcoming Trainings
      • 1.2. Previous Trainings
      • 1.3. Trainers
      • 1.4. Using the documentation for a training
        • 1.4.1. The readthedocs theme
        • 1.4.2. Exercises
      • 1.5. Building the documentation locally
        • 1.5.1. Dependencies
      • 1.6. Build new
        • 1.6.1. Update existing
        • 1.6.2. Technical set up to do before a training (as a trainer)
        • 1.6.3. Upgrade the vagrant and buildout to a new Plone-version
      • 1.7. Train the trainer
      • 1.8. Contributing
      • 1.9. License
    • 2. Introduction
      • 2.1. Who are you?
      • 2.2. What will we do?
      • 2.3. What will we not do?
      • 2.4. What to expect
      • 2.5. Classroom Protocol
      • 2.6. Documentation
      • 2.7. Further Reading
    • 3. What is Plone?
      • 3.1. Core concepts
        • 3.1.1. Traversal
        • 3.1.2. Object publishing
        • 3.1.3. Schema-driven content
        • 3.1.4. Component Architecture
    • 4. Installation & Setup
      • 4.1. Installing Plone
      • 4.2. Hosting Plone
      • 4.3. Production Deployment
    • 5. Installing Plone for the Training
      • 5.1. Installing Plone without vagrant
      • 5.2. Installing Plone with Vagrant
        • 5.2.1. Install VirtualBox
        • 5.2.2. Install and configure Vagrant
        • 5.2.3. What Vagrant does
    • 6. The Case Study
      • 6.1. Background
      • 6.2. Requirements
    • 7. The Features of Plone
      • 7.1. Starting and Stopping Plone
        • 7.1.1. Exercises
      • 7.2. Walkthrough of the UI
      • 7.3. Users
      • 7.4. Configure a Mailserver
      • 7.5. Content-Types
      • 7.6. Folders
      • 7.7. Collections
      • 7.8. Content Rules
      • 7.9. History
      • 7.10. Manage members and groups
      • 7.11. Workflows
      • 7.12. Working copy
      • 7.13. Placeful workflows
    • 8. The Anatomy of Plone
      • 8.1. Database
      • 8.2. Zope
      • 8.3. Content Management Framework
      • 8.4. Zope Toolkit / Zope3
      • 8.5. Zope Component Architecture (ZCA)
      • 8.6. Pyramid
      • 8.7. Exercise
    • 9. What’s New in Plone 5, 5.1 and Plone 5.2
      • 9.1. Default Theme
      • 9.2. New UI and widgets
      • 9.3. Folder Contents
      • 9.4. Content Types
      • 9.5. Resource Registry
      • 9.6. Chameleon template engine
      • 9.7. Control panel
      • 9.8. Date formatting on the client side
      • 9.9. plone.app.multilingual
      • 9.10. New portlet manager
      • 9.11. Remove portal_skins
      • 9.12. Plone 5.1
      • 9.13. Plone 5.2
    • 10. Configuring and Customizing Plone “Through The Web”
      • 10.1. The Control Panel
        • 10.1.1. General
        • 10.1.2. Content
        • 10.1.3. Users
        • 10.1.4. Security
        • 10.1.5. Advanced
      • 10.2. Portlets
      • 10.3. Viewlets
      • 10.4. ZMI (Zope Management Interface)
        • 10.4.1. Actions (portal_actions)
        • 10.4.2. portal_view_customizations
        • 10.4.3. CSS Registry (portal_css)
        • 10.4.4. Further tools in the ZMI
      • 10.5. Summary
    • 11. Theming
    • 12. Extending Plone
      • 12.1. Extension technologies
        • 12.1.1. Component Architecture
        • 12.1.2. Configuring Zope Components with ZCML
        • 12.1.3. GenericSetup
    • 13. Extend Plone With Add-On Packages
      • 13.1. Some notable add-ons
      • 13.2. How to find add-ons
      • 13.3. Installing Add-ons
        • 13.3.1. Making the add-on packages available to Zope
        • 13.3.2. Installing add-ons in your Plone Site
      • 13.4. collective.easyform
      • 13.5. Add page layout management with plone.app.mosaic
      • 13.6. Internationalization
      • 13.7. Summary
    • 14. Dexterity I: “Through The Web”
      • 14.1. What is a content type?
      • 14.2. The makings of a Plone content type
      • 14.3. Dexterity and Archetypes - A Comparison
      • 14.4. Modifying existing types
      • 14.5. Creating content types TTW
      • 14.6. Moving contenttypes into code
      • 14.7. Exercises
        • 14.7.1. Exercise 1
        • 14.7.2. Exercise 2
    • 15. Buildout I
      • 15.1. Minimal Example
      • 15.2. Syntax
      • 15.3. Recipes
      • 15.4. References
      • 15.5. A real life example
      • 15.6. Mr. Developer
      • 15.7. Extensible
      • 15.8. Be McGuyver
    • 16. Write Your Own Add-Ons to Customize Plone
      • 16.1. Creating the package
      • 16.2. Eggs
      • 16.3. Inspecting the package
      • 16.4. Including the package in Plone
      • 16.5. Exercises
      • 16.6. Summary
    • 17. Return to Dexterity: Moving contenttypes into Code
      • 17.1. Changing a widget
      • 17.2. Protect fields with permissions
        • 17.2.1. Exercise 1
      • 17.3. Summary
    • 18. Views I
      • 18.1. A simple browser view
    • 19. Page Templates
      • 19.1. TAL and TALES
        • 19.1.1. python expressions
        • 19.1.2. tal:condition
        • 19.1.3. tal:repeat
        • 19.1.4. path expressions
        • 19.1.5. Pure TAL blocks
        • 19.1.6. handling complex data in templates
      • 19.2. Chameleon
      • 19.3. Exercise 1
      • 19.4. METAL and macros
        • 19.4.1. macros in browser views
      • 19.5. Accessing Plone from the template
      • 19.6. Exercise 2
      • 19.7. Accessing other views
      • 19.8. What we missed
    • 20. Customizing Existing Templates
      • 20.1. The view for News Items
      • 20.2. The Summary View
      • 20.3. Finding the right template
      • 20.4. skin templates
      • 20.5. Summary
    • 21. Views II: A Default View for “Talk”
      • 21.1. View Classes
      • 21.2. Browser Views
      • 21.3. Reusing Browser Views
      • 21.4. The default view
      • 21.5. Using helper methods from DefaultView
      • 21.6. The complete template for talks
      • 21.7. Behind the scenes
    • 22. Views III: A Talk List
      • 22.1. Using portal_catalog
      • 22.2. brains and objects
      • 22.3. Querying the catalog
      • 22.4. Exercises
        • 22.4.1. Exercise 1
        • 22.4.2. Exercise 2
      • 22.5. The template for the listing
        • 22.5.1. Exercise
      • 22.6. Setting a custom view as default view on an object
      • 22.7. Summary
    • 23. Testing in Plone
      • 23.1. Types of tests
        • 23.1.1. Unit tests
        • 23.1.2. Integration tests
        • 23.1.3. Functional tests
        • 23.1.4. Acceptance tests
        • 23.1.5. JavaScript tests
        • 23.1.6. Doctests
      • 23.2. Writing tests
      • 23.3. Plone tests
        • 23.3.1. Getting started
      • 23.4. Robot tests
      • 23.5. More information
    • 24. Behaviors
      • 24.1. Dexterity Approach
      • 24.2. Names and Theory
      • 24.3. Practical example
      • 24.4. Adding it to our talk
    • 25. Writing Viewlets
      • 25.1. A viewlet for the featured behavior
      • 25.2. Featured viewlet
      • 25.3. Exercise 1
      • 25.4. Exercise 2
    • 26. Programming Plone
      • 26.1. plone.api
      • 26.2. portal-tools
      • 26.3. Debugging
      • 26.4. Exercise
    • 27. IDEs and Editors
    • 28. Dexterity Types II: Growing Up
      • 28.1. Add a marker interface to the talk type
        • 28.1.1. Marker Interfaces
      • 28.2. Upgrade steps
      • 28.3. Add a browserlayer
        • 28.3.1. Exercise
      • 28.4. Add catalog indexes
      • 28.5. Query for custom indexes
      • 28.6. Exercise 1
      • 28.7. Add collection criteria
      • 28.8. Add versioning through GenericSetup
      • 28.9. Summary
    • 29. Custom Search
      • 29.1. eea.facetednavigation
      • 29.2. collective.collectionfilter
    • 30. Turning Talks into Events
      • 30.1. Exercise 1
      • 30.2. Exercise 2
        • 30.2.1. Summary
    • 31. User Generated Content
      • 31.1. Self-registration
      • 31.2. Constrain types
      • 31.3. Grant local roles
      • 31.4. A custom workflow for talks
      • 31.5. Move the changes to the file system
        • 31.5.1. Import/Export the Workflow
        • 31.5.2. Enable self-registration
        • 31.5.3. Grant local roles
    • 32. Resources
    • 33. Using Third-Party Behaviors
      • 33.1. Add Teaser With collective.behavior.banner
    • 34. Dexterity Types III: Python
      • 34.1. The Python schema
      • 34.2. The Factory Type Information, or FTI
        • 34.2.1. Exercise 1
      • 34.3. The view
      • 34.4. The viewlet
      • 34.5. The template for the viewlet
        • 34.5.1. Exercise 2
        • 34.5.2. Exercise 3
    • 35. Dexterity: Reference
      • 35.1. Fields included in Plone
      • 35.2. How fields look like
      • 35.3. 3rd party fields
      • 35.4. Datagrid Field
      • 35.5. Widgets
      • 35.6. Directives
        • 35.6.1. Validation and default values
    • 36. Relations
      • 36.1. Creating relations in a schema
      • 36.2. Accessing and displaying related items
      • 36.3. Creating RelationFields through the web
      • 36.4. The stack
      • 36.5. RelationValues
      • 36.6. Accessing relations and backrelations from code
    • 37. Manage Settings with Registry, Control Panels and Vocabularies
      • 37.1. The Registry
      • 37.2. A setting
      • 37.3. Accessing and modifying values in the registry
      • 37.4. Add a custom control panel
      • 37.5. Vocabularies
    • 38. Creating a Dynamic Front Page
      • 38.1. The Front Page
      • 38.2. The template
        • 38.2.1. Exercise 1
      • 38.3. Twitter
      • 38.4. Activating the view
    • 39. Creating Reusable Packages
    • 40. More Complex Behaviors
      • 40.1. Using Annotations
      • 40.2. Using Schema
      • 40.3. Writing Code
        • 40.3.1. Exercises
    • 41. A Viewlet for the Votable Behavior
      • 41.1. Voting Viewlet
      • 41.2. Writing the Viewlet code
      • 41.3. The template
      • 41.4. JavaScript code
      • 41.5. Writing 2 simple view helpers
    • 42. Making Our Package Reusable
      • 42.1. Adding permissions
      • 42.2. Using our permissions
      • 42.3. Provide defaults
    • 43. Using starzel.votable_behavior in ploneconf.site
    • 44. Releasing Your Code
    • 45. Buildout II: Getting Ready for Deployment
      • 45.1. The Starzel buildout
      • 45.2. A deployment setup
      • 45.3. Other tools we use
    • 46. Plone REST API
      • 46.1. Installing plone.restapi
      • 46.2. Explore the API
        • 46.2.1. Exercise
      • 46.3. Implementing the talklist
      • 46.4. Submit lightning talks
      • 46.5. Exercise
    • 47. The Future of Plone
    • 48. Optional
    • Using the code for the training
      • The code-package
      • Getting the code for a certain chapter
      • Moving from chapter to chapter
      • Tags
      • Updating the code-package
    • Timetable
      • Ploneconf 2017
      • Version 1.2
      • Version 1.1
  • Plone Theming
    • Basic Customizations
      • Customize Logo
      • Customize CSS/Less Variables
    • TTW Theming I: Introduction
      • Installation
      • Two Approaches To Theming
      • What Is Diazo?
      • Principles
      • Copy Barceloneta Theme
      • Anatomy Of A Diazo Theme
        • Exercise 1 - Inspecting The manifest.cfg
      • CSS Classes For The <body> Element
        • <body> Classes For An Anonymous Visitor
        • <body> Classes For A Manager
        • Exercise 2 - Discussion About The <body> Classes
      • Custom Rules
        • Conditionally Showing Content
      • Customize CSS
    • TTW Theming II: Custom Barceloneta Theme
      • Inheriting From Barceloneta
        • Exercise 1 - Create A New Theme That Inherits From Barceloneta
      • Viewing The Unthemed Plone Site
        • Exercise 2 - Viewing The Unthemed Site
      • Diazo Rule Directives And Attributes
        • CSS Selector Based Attributes
        • XPath Selector Based Attributes
        • Exercise 3 - The <drop> Directive
        • Conditional Attributes
      • Converting An Existing HTML Template Into A Theme
        • Exercise 4 - Convert A HTML Template Into A Diazo Theme
      • Create A Visitor-Only Theme - Conditionally Enabling Barceloneta
        • Exercise 5 - Convert The Theme To Be A Visitor-Only Theme
    • TTW Theming III: Make It Reproducible
    • Theme Package I: Preparations
      • Preparing Your Setup
        • Install npm
        • Install Grunt
        • Setup A Python Virtual Environment
      • Create A Product To Handle Your Diazo Theme
        • Install mr.bob And bobtemplates.plone
        • Install zc.buildout And Bootstrap Your Development Environment
        • Inspect Your Package Source
        • Start Plone And Install Your Theme Product
    • Theme Package II: Diazo Theme
      • Use Your Own Static Mockup
      • Download And Prepare A Static Theme
        • Preparing The Template
        • Include Theme CSS
      • Using Diazo Rules To Map The Theme With Plone Content
      • Customizing The Ruleset
        • Plone Toolbar
        • Unthemed Backend
        • Login Link & Co
        • Top Navigation
        • Breadcrumbs & Co
        • Slider Only On Front Page
        • Title And Description
        • Status Messages
        • Main Content Area
        • Left And Right Columns
        • Footer Area
    • Theme Package III: Customizations
      • Understanding And Using The Grunt Build System
      • Theme manifest.cfg
      • Final CSS Customization
        • Install External CSS And JavaScript Libraries With npm And Use Them In Your Theme
      • More Diazo And plone.app.theming Details
    • Theme Package IV: Templates
      • Overriding A Plone Template
        • Example: Overriding The Event Item Template
      • Creating A New Plone Template
        • Create Dynamic Slider Content In Plone
        • Use The Dynamic Slider Content From Plone
    • Theme Package V: Initial Content
    • Theme Package VI: TinyMCE Templates
      • Create Your Own TinyMCE Templates
      • Activate TinyMCE Templates Plugin
      • Use TinyMCE Templates For Content Creation
    • Theme Package VII: Resource Registries
      • Register CSS And Less Resources In The Registry
    • Advanced Diazo
      • Modify Theme And Content On The Fly
        • Extend Rules
        • Include External Content
      • Recipes And Snippets
        • More Snippets
    • Jbot
      • Installation
      • Usage
      • Additional
    • Creating Custom Components
      • Views
      • Viewlets
      • Portlets
    • About
    • Glossary
  • JavaScript For Plone Developers
    • Setup
      • Installing Mockup
    • JavaScript Development Process
      • Code Style
      • Mockup Contributions
      • Documentation
    • RequireJS And JavaScript Modules
      • Defining A module
      • More information
    • Mockup
      • Mockup Project Structure
      • A Minimal Pattern
    • Writing Documentation For Mockup
    • Through-The-Web Development
      • portal_javascript & portal_css
      • Resource Registries
      • Add Files
      • Create The Resource
      • Create The Bundle And Wire Everything Up
      • Build The Bundle
    • Exercises
      • Exercise 1: Include a JavaScript resource TTW
        • Create your browser view
        • Add your JavaScript file
      • Exercise 2: Include JavaScript In Browser View
        • Add Your JavaScript File
        • Register Static Resource Directory
        • Register JavaScript Resource
        • Create Your Browser View
        • Load Your JavaScript Resource
        • Installation
        • Production
      • Exercise 3: Gallery Integration With Theme
        • Add Your JavaScript File
        • Including JavaScript/CSS Into Your Theme
        • Installation
        • Trying It Out
        • Production
      • Exercise 4: Gallery integration as resources
        • Add your JavaScript files
        • Register static resource directory
        • Register your JS as a resource
        • Bundle resource
        • Bundle
        • Installation
        • Running
        • Production
      • Exercise 5: Simple Pattern
        • Add Your Pattern File
        • Integrating With LESS
        • Creating Your Bundle
        • Register Static Resource Directory
        • Register Your Bundle
        • Installation
        • Running
        • Production
      • Exercise 6: Using A Pattern In A Z3C Form Widget
        • Add Your JavaScript File
        • Register Static Resource Directory
        • Register JavaScript Resource
        • Create A Custom Widget
        • Register Widget Customization
        • Installation
      • Exercise 7: Pattern Wrapping A 3rd Party Library
        • Add Your Pattern File
        • Register Static Resource Directory
        • Register Your Bundle
        • Installation
        • Running
        • Production
      • Exercise 8: Customizing Pattern
        • Add Your Pattern File
        • Register Static Resource Directory
        • Register Your Bundle
        • Installation
        • Running
      • Exercise 9: Overriding a pattern TTW
        • Installation
        • Try current pattern
        • Choose the pattern to override
        • Recompile bundle
        • Testing
      • Exercise 10: NG2 APP Component Rendered In A Browser View
        • Bootstrap
        • Add Your Angular 2 Component
        • Register Static Resource Directory
        • Build The File With Webpack
        • Register JavaScript Resource
        • Create Your Browser View
        • Load Your JavaScript Resource
        • Installation
        • Production
      • Exercise 11: NG2 APP Component In a A bundle
        • Bootstrap
        • Add Your Angular 2 Component
        • Register Static Resource Directory
        • Build The File With Webpack
        • Register JavaScript Resource As A Bundle
        • Installation
        • Running
        • Development
        • Production
      • Exercise 12: NG2 APP In Logged In Bundle
        • Bootstrap
        • Add Your Angular 2 Component
        • Register Static Resource Directory
        • Build The File With Webpack
        • Register JavaScript Resource
        • Installation
        • Running
        • Development
      • Exercise 13: Pattern with React
        • Add Your Pattern File
        • Register Static Resource Directory
        • Register Your Bundle
        • Installation
        • Running
        • Production
    • Scratchpad
      • General Advises
      • Structure
    • About
    • Glossary
  • Automating Plone Deployment
    • Introduction
      • Our Choices
    • Intro To Plone Stack
    • Intro To Ansible
      • Installation
      • Ansible Basics
        • Connecting To Remote Machines
        • Inventories
      • Playbooks
        • Quick Intro To YAML
        • Quick Intro To Jinja2
      • Playbook Structure
        • Variables
        • Notifications And Handlers
        • Roles
    • The Plone Playbook
      • Supported Platforms
        • Quick review of contents
    • Basic Use Of The Playbook
      • Local Configuration File
      • Use With Vagrant
        • Vagrant Ports
        • Some Quick Vagrant
      • Run Against Cloud
        • Smoke Test
        • Diagnosing SSH Connection Failures
        • Running The Playbook
        • Firewalling
    • In Operation
      • Plone Setup And Directories
        • Restart Script
        • Client Logs
        • Cron Jobs
        • Load Balancing
        • Reverse-proxy Caching
        • Web Hosting
        • Postfix
        • Updating System Packages
        • Fail2ban
        • Monitoring
        • Changes Philosophy
    • Customized Use
      • Common Customization Points
        • Plone Setup
        • Web Hosting Options
        • Mail Relay
        • Bypassing Components
        • Multiple Plones Per Host
        • The Plone Role – Using It Independently
    • Maintenance Strategies
      • Virtualenv
      • What Belongs To The playbook And What Doesn’t
      • Git Forks
      • Maintenance Strategies – Multiple Hosts
    • Plone Deployments With Amazon OpsWorks
      • Introduction
      • Deployment Terminology
        • Opsworks
        • Instance Lifecycle
      • Creating Your First Stack
        • Adding An Instance
        • Caveats
      • Deploying Changes
        • Instance Sizes
        • Scaling
        • Configuration
      • Maintenance
        • Backups
        • Updates
        • Monitoring
        • Sending Mail
        • SSH Access
      • What Doesn’t It Do
        • Storage Options
        • Proxy Cache Purging
        • Chef 12
    • About
    • Glossary
  • Plone Deployments With Amazon OpsWorks
    • Introduction
    • Deployment Terminology
      • Opsworks
      • Instance Lifecycle
    • Creating Your First Stack
      • Adding An Instance
      • Caveats
    • Deploying Changes
      • Instance Sizes
      • Scaling
      • Configuration
    • Maintenance
      • Backups
      • Updates
      • Monitoring
      • Sending Mail
      • SSH Access
    • What Doesn’t It Do
      • Storage Options
      • Proxy Cache Purging
      • Chef 12
  • “Through-The-Web” Plone Customization
    • Customizing logo and CSS of default theme
      • Customize Logo
      • Customize CSS/Less Variables
    • Configuring and Customizing Plone
      • The Control Panel
        • General
        • Content
        • Users
        • Security
        • Advanced
        • Change The Logo
        • Portlets
        • Viewlets
        • ZMI (Zope Management Interface)
        • Summary
    • Introduction to Diazo Theming
      • Installation
      • Two Approaches To Theming
      • What Is Diazo?
      • Principles
      • Copy Barceloneta Theme
      • Anatomy Of A Diazo Theme
        • Exercise 1 - Inspecting the manifest.cfg
      • <body> CSS Classes
        • <body> Classes For An Anonymous Visitor
        • <body> Classes For A Manager
      • Custom Rules
        • Conditionally Showing Content
      • Customize CSS
    • Creating a custom theme based on Barceloneta
      • Inheriting From Barceloneta
        • Exercise 1 - Create A New Theme That Inherits From Barceloneta
      • Viewing The Unthemed Plone Site
        • Exercise 2 - Viewing The Unthemed Site
      • Diazo Rule Directives And Attributes
        • CSS Selector Based Attributes
        • XPath Selector Based Attributes
        • Exercise 3 - The <drop> Directive
        • Conditional Attributes
      • Converting An Existing HTML Template Into A Theme
        • Exercise 4 - Convert A HTML Template Into A Diazo Theme
      • Create A Visitor-Only Theme - Conditionally Enabling Barceloneta
        • Exercise 5 - Convert The Theme To Be A Visitor-Only Theme
    • Dexterity
      • What Is A Content Type?
      • The Makings Of A Plone Content Type
      • Dexterity And Archetypes
      • Modifying Existing Types
      • Creating Content Types “Through-The-Web”
      • Moving Content Types Into Code
      • Exercises
        • Exercise 1
        • Exercise 2
    • Mosaic
      • What is Mosaic?
      • Some Comparisons
      • Installation
      • Principle
      • The Mosaic Editor
        • Exercise 1 - Change The Layout Of The Front Page
      • Change The Content Layout
      • Customize A Content Layout
      • The Tiles
        • Exercise 2: Customize The Home Page Layout
      • Create A Reusable Layout
        • Exercise 3: Create A Layout For Talks
      • Manage Custom Layouts
      • Edit The Layout HTML Structure
      • Import Layouts
    • Rapido
      • What is Rapido?
      • A couple of comparisons
      • Installation
      • Principles
      • How To Create A Rapido App
        • Blocks And Elements
        • Include Rapido Blocks In Plone Pages
        • Make Our Blocks Dynamic
        • Create Actions
        • Store Data
        • HTML Templating Vs TAL Templating
        • Create Custom Views
        • Index And Query Records
        • Create Custom Content-rules
        • Other Topics
    • Workflow
      • What Is Workflow?
      • Plone Comes With Several Workflows
      • You Can Add and Customize Workflows
      • Workflow Applies to Included and New Content Types
      • Example Business Process: Home Renovation Permits
        • The Paper-Based Business Process
        • The Online Business Process
      • What is a Workflow Application?
      • Why Use a Workflow Application?
      • A Simple Workflow Application: Submitting Questions
      • Tools for Building Workflow Applications
      • Use Dexterity to Build a Content Type and Form
      • About the Dexterity XML Field Model
      • Viewing the Dexterity Form
      • Create a Folder to Hold Filled Out Forms
      • Grant Access to the Folder
      • Test the Form to Create Content Items
        • Test the Form as a Manager
        • Test the Form as an Anonymous Website Visitor
      • Create a Thank You Page
        • Create a New View for the Question Content Type
        • Set the Default View for the Question Content Type
        • Test the New Default View
      • Add Replying to the New View
      • Design the Workflow
        • Workflow States and Transitions
        • Workflow Security
      • Create the Workflow
      • Create the Workflow States
        • Create the Initial Private State
        • Remove Any Unneeded States
        • Create the Replied State
      • Create the Workflow Transitions
      • Connect States Using Transitions
      • Assign the Workflow to the Question Content Type
      • Display Workflow State in the View
        • Test the View
        • Redirect to Homepage
      • Test the Workflow
        • Bonus Exercise
      • Put It All Together
        • Create a Collection
        • Change the Home Page
        • Bonus Exercise
      • Review
      • Further Reading
    • About
    • Glossary
  • Plone Training Solr
    • Setup
      • Solr Buildout
      • Plone And Solr
        • Control Panel Configuration
        • Configuration With ZCML
      • Committing Strategies
        • Synchronous Immediately
        • Synchronous Batched
        • Asynchronous
      • Exercise
    • Solr GUI And Query Syntax
      • Access Solr GUI
      • Solr Query Syntax
      • Solr Query Via URL
      • Solr Query Via API
      • Advanced Solr Query Syntax
      • Date math
      • Existing (And Non-existing) Queries
      • Faceting
      • Search GUIs
      • Exercise
    • First Steps
      • Maintenance Task
        • Reindex
        • Cleanup
        • Sync Solr Index
        • Purge Solr Index
      • Indexing A New Dexterity Field
      • Boosting
      • Exercise
    • How Does collective.solr Work
      • Base Functionality
      • Transactions
      • Querying Solr With collective.solr
      • Mangler
    • Solr Buildout Configuration
      • Solr Multi Core
      • Stopwords
      • Stemming
      • Synonyms
      • Exercise
    • More Features
      • Autocomplete
      • Suggest
      • Facetting
      • Excercise
    • Solr Testing
      • Exercise
    • Production Setup
      • Multi Core
      • Monitoring
      • Different host setup
      • Further reading
    • Alternative Indexing/Search Solutions
      • alm.solrindex
        • Setup
        • Why Are Results Missing?
        • Customization
      • DIY Solr
      • collective.elasticsearch
      • Google Custom Search
    • About
    • Glossary
  • Plone Workflow
    • Introduction To Workflows
      • What Is A Workflow?
      • What’s In a Workflow?
        • Workflows Control
        • States Control
        • Transitions Control
      • How Does Workflow Work In Plone?
      • Moving Content Through Workflows
    • Basic Roles and Permissions
      • Definitions
        • Roles
      • Giving Out Permissions
      • Permissions
        • Standard Permissions
    • Local Roles
      • Local Roles On Folders
      • Local Roles On Groups
        • Additional Resources
    • Dynamic Roles
      • Using Dynamic Roles
    • Placeful Workflow
      • Getting Started
      • Internals Of Placeful Workflow
    • Multi-chain Workflows
    • Workflow Variables
    • Using GenericSetup to Manage Plone Workflows
      • Getting Started
      • Exporting Workflow Policies
      • Importing Workflow Policies
    • About
    • Glossary
  • Angular SDK for Plone
    • Summary
    • What Is Angular
    • What Is The Plone Angular SDK
      • Traversing
      • A New Integration Approach For Plone
    • Installing The Development Environment
    • Initializing A New Project
    • Using And Customizing The Angular Plone Components
      • Preparing The Plone Backend
      • Adding The @plone/restapi-angular Dependency
      • Connecting The Project To The Plone Backend
    • Integrating A Theme
      • Integrate Bootstrap
    • Override A default Plone Component Template
      • Update The App Component Markup
    • Creating A Custom View For The Talk Content Type
      • Create The Talk Content Type In The Backend
      • Create A View Component For Talks
      • Enable Comments
    • Displaying News On The Home Page
    • Login
    • Adding Quick Links In the Footer
      • Customizing The Link Content Type
      • Displaying The Links
    • Deployment
    • Managing The Plone Configuration From The Angular Project
      • Creating A Theme To Handle The Configuration
      • Pushing The Plone Configuration From The Angular Project
    • Advanced
      • Moving Logic In A Service
      • Reactive Programming With RxJS
      • Enabling Offline & PWA
      • SEO And Server-side Rendering
    • About
    • Glossary
  • React
    • 1. Introduction
      • 1.1. Who are you?
      • 1.2. What will we do?
      • 1.3. What to expect
      • 1.4. Documentation
    • 2. Bootstrapping A React Project
      • 2.1. Installing dependencies
      • 2.2. Bootstrapping A Project
      • 2.3. Running The Project
    • 3. Create React Component
      • 3.1. Generated App Code
      • 3.2. Exercise
      • 3.3. Extra Information
    • 4. Styling Your Component
      • 4.1. Add stylesheet
      • 4.2. Exercise
    • 5. Convert To A Reusable Component
      • 5.1. Create A Reusable component
      • 5.2. Exercise
      • 5.3. Property Validation
    • 6. Use Snapshot Testing
    • 7. How To Use State In Your Component
      • 7.1. Store Questions And Answers In The State
      • 7.2. How to declare the state into functional Component
      • 7.3. Exercise
    • 8. Use Event Handlers
      • 8.1. Toggle Method
      • 8.2. Exercise
      • 8.3. Click Handler
    • 9. Use Callbacks To Delete An Item
      • 9.1. Add Delete Button
      • 9.2. Write The onDelete Handler
      • 9.3. Write A Dummy Delete Handler
      • 9.4. Delete The FAQ Item From The List
    • 10. Use Forms To Add An Item
      • 10.1. Add The Form
      • 10.2. Manage Field Values In The State
      • 10.3. Submit Handler
    • 11. Use Initial Form Data To Edit An Item
      • 11.1. Two Modes For The FAQ Item
      • 11.2. Wiring Everything Together
    • 12. Use Redux To Store Data
      • 12.1. Introduction
      • 12.2. Installing
      • 12.3. Actions
      • 12.4. Reducers
      • 12.5. Combine Multiple Reducers
    • 13. Write Tests For Your Reducers
      • 13.1. Reducer Tests
      • 13.2. Exercise
    • 14. Use Actions To Manipulate The Store
      • 14.1. Wiring The Store
      • 14.2. Use The Data From The Store
      • 14.3. Exercise
    • 15. Using External Data
      • 15.1. Creating A Simple Backend
      • 15.2. Writing Middleware
    • 16. Use Lifecycle Methods
    • 17. Using Different Routes
      • 17.1. Routing
      • 17.2. Writing The View
      • 17.3. Exercise
    • 18. Using Links To Navigate
    • 19. Navigate Using Redirects
    • 20. About
    • 21. Glossary
  • Volto
    • 1. Introduction
      • 1.1. Who are you?
      • 1.2. What will we do?
      • 1.3. What to expect
      • 1.4. Documentation
    • 2. Code Walkthrough
      • 2.1. Actions
      • 2.2. Components
      • 2.3. Config
      • 2.4. Constants
      • 2.5. Helpers
      • 2.6. Icons
      • 2.7. Middleware
      • 2.8. Reducers
      • 2.9. Theme
    • 3. Bootstrapping A Volto Project
      • 3.1. Installing Plone
      • 3.2. Installing Dependencies
      • 3.3. Bootstrapping A Project
      • 3.4. Running The Project
    • 4. Styling
      • 4.1. Semantic UI
      • 4.2. Changing Base Font
      • 4.3. Changing The Breadcrumbs
      • 4.4. Using Overrides
    • 5. Static Resources
      • 5.1. The Public Folder
      • 5.2. Exercise
    • 6. Override Components
      • 6.1. Override The Logo
      • 6.2. Exercise
      • 6.3. Change The Tags Component
    • 7. Internationalization
      • 7.1. Making Text Translatable
      • 7.2. Extracting i18n Strings
      • 7.3. Excercise
      • 7.4. Translate Attributes
      • 7.5. Exercise
    • 8. Override Views
      • 8.1. Exercise
    • 9. Custom Views
      • 9.1. Full View
      • 9.2. Registering The View
      • 9.3. Exercise
    • 10. Custom Widget
      • 10.1. Setup The Content Type
      • 10.2. Registering The Widget
      • 10.3. Exercise
    • 11. Rich Text Editor Settings
      • 11.1. Exercise
    • 12. Actions & Reducers
      • 12.1. Creating The Action
      • 12.2. Creating The Reducer
      • 12.3. Exercise
    • 13. About
    • 14. Glossary
  • Volto Hands-On
    • 1. Introduction
      • 1.1. Who are you?
      • 1.2. What will we do?
      • 1.3. What to expect
      • 1.4. The hands-on exercise
      • 1.5. Documentation
    • 2. Quick Start
      • 2.1. Using the hands on code repository
      • 2.2. Build environments
        • 2.2.1. Plone environment
        • 2.2.2. Install Volto dependencies
        • 2.2.3. Yarn environment
        • 2.2.4. Executing environments
      • 2.3. Volto source code
      • 2.4. Recommended plugins
    • 3. Project requirements
      • 3.1. Tasks
    • 4. Theming
      • 4.1. Basic font family
      • 4.2. custom.overrides
    • 5. Header
      • 5.1. Header styling
      • 5.2. Logo
      • 5.3. Header component
      • 5.4. Component shadowing
    • 6. Footer
    • 7. Breadcrumbs
      • 7.1. Hiding them from the App first level component
    • 8. Blocks
      • 8.1. Brief introduction to Volto blocks
      • 8.2. How to manually enable Blocks on a content type
      • 8.3. Blocks anatomy
        • 8.3.1. Block view component props
        • 8.3.2. Block edit component props
        • 8.3.3. Blocks settings
    • 9. Blocks - Main Slider
      • 9.1. Install react-slick
      • 9.2. Add library styles
      • 9.3. Block view component
      • 9.4. Styling
      • 9.5. Remove the Title block
    • 10. Content types Views
      • 10.1. Success Story
      • 10.2. Creating a view for a custom content type
      • 10.3. Completing the new view
    • 11. Blocks - Highlights
      • 11.1. Basics
      • 11.2. Structure and styling
      • 11.3. Recent launches behavior
    • 12. Blocks - Edit components
      • 12.1. Sidebar
      • 12.2. Object Browser
      • 12.3. Teaser block
        • 12.3.1. Teaser block edit component
    • 13. About
    • 14. Glossary
  • Volto Add-ons Development
    • 1. Introduction
      • 1.1. Who are you?
      • 1.2. What will we do?
      • 1.3. What to expect
        • 1.3.1. Roadmap
      • 1.4. The hands-on exercise
      • 1.5. Before you start
    • 2. Volto add-ons development
      • 2.1. Volto: an overview
      • 2.2. Bootstrap a new Volto project
      • 2.3. Addons - first look
      • 2.4. Bootstrap an add-on
      • 2.5. Create a new block
        • 2.5.1. Improve the block edit
    • 3. Basic working block
    • 4. Improve the block view
      • 4.1. The React HOC Pattern
    • 5. Block editing with a form
      • 5.1. Initial block data as a reusable pattern
    • 6. Customizable columns
      • 6.1. Write a new Volto widget
    • 7. Make the block extendible
      • 7.1. Making use of our new renderers
        • 7.1.1. Renderer within the edit component
        • 7.1.2. Renderer within the view component
    • 8. Add-ons - advanced topics
      • 8.1. Q&A
      • 8.2. Bundle optimization
    • 9. Plone integration with Volto blocks
      • 9.1. Block transformations
      • 9.2. Smart fields
      • 9.3. Searchable text from blocks
    • 10. About
    • 11. Glossary
    • 12. Developer integration with text editors
    • 13. Really short primer on Javascript enhancements
      • 13.1. Destructuring
      • 13.2. Spread
      • 13.3. Arrow functions
  • Migrating Content with Transmogrifier
    • Export Current Site Content
      • Export from Plone
      • Export from Wordpress
      • Write Your Own Export
    • Transmogrifier Basics
      • Transmogrifier Setup and Terminology
      • Add-ons
      • Create a Migration Package
    • Before Running the Import
    • Writing the Import Pipeline
      • Terminology
      • Pipeline Details
      • Other Included Pipeline Steps
      • New Pipeline Step
    • Writing Custom Blueprints
      • Basic Blueprint Tips
      • Practice
    • Running the Import
      • How to Run the Import
      • Common Errors
      • Debugging Other Errors
      • Running the import multiple times
      • Writing tests
    • Advanced Pipeline Tips
      • Multiple pipelines
      • Dates Updater
      • Conditions
      • Changing Types
      • Others
    • Advanced Blueprint Tips
      • Iterator Stages
      • Migrating Users & Groups
      • Updating Rich Text
      • Taking parameters in custom blueprints
    • Glossary
    • Users & Groups Migration
  • How to build your own webframework from scratch
    • About this course
    • The Web and Python
      • WSGI
    • Hello WSGI
      • Running a WSGI application
        • Exercise 1
    • Middlewares
      • A Simple WSGI Middleware
        • Exercise 2
        • Exercise 3
    • Routing
      • Using PATH_INFO
        • Exercise 4
      • Working with URL parameters
        • Exercise 5
    • From Raw WSGI to a framework
    • Exploiting Python’s data model
      • A Dictionary like Session storage
      • Requests read only attributes
      • Quick access to properties
      • Ability to extend
    • Metaclasses
    • Functional Python
    • Summary
  • Indices and tables
  • GatsbyJS
    • Summary
    • What Is GatsbyJS
    • How it works
      • 1) Fetch data
      • 2) Build
      • 3) Deploy
    • Installing The Development Environment
    • Creating a new GatsbyJS site
    • Pages
      • Exercise
        • Components
      • Exercise
    • Data
      • GraphQL
      • Site metadata
    • Source plugins
      • Exercise
    • Transformer plugins
      • Exercise
    • Dynamic pages
    • Building Source Plugins
      • Comparing Plone Site and GatsbyJS Site
      • How It Works
      • GatsbyJS Node
        • Exercise
    • Fetching Data Using Plone REST.API
      • Exploring The Plone REST.API
        • Exercise
    • Search Traversal Method Of Retrieving Data
      • Getting The Full List Of Content
        • Exercise
    • gatsby-source-plone
      • Configuration
      • Exercise
    • gatsby-starter-plone
    • Copying The Plone Site
      • Page Creation
      • Handling Different Data Types
    • RichText Component
      • Images And Files
      • RichText Component
        • Exercise
    • Navigation
      • Breadcrumbs
      • Navigation
    • About
    • Glossary
  • Testing Plone
    • Summary
    • Intro to tests
      • What is a test?
      • Why do we test?
      • Apparent issues with tests
      • Benefits of tests
    • Some theory
      • Test types
    • How to test a Plone add-on
      • Create Package
      • Buildout
    • Testing setup
      • Test runner
      • Testing setup
      • Setup and teardown hooks
      • Tests
      • Assertions
    • Unit tests
      • Create our first unit test
        • Exercise 1
        • Exercise 2
    • Testing a Dexterity content type
      • Create a new content type
      • Test the content type
        • Exercise 1
      • Functional test
    • Testing a view
      • Create a new view
      • Test the view
        • Exercise 1
        • Exercise 2
    • Acceptance testing
    • Robot tests
      • Robot test file format
      • Test scenarios
      • Running robot tests
      • Debugging robot tests
      • Test reports
        • Exercise 1
        • Exercise 2
        • Exercise 3
    • Continuous Integration
      • Travis CI
        • Excercise
      • GitLab
      • tox
        • Excercise
    • About
    • Glossary
  • Deploying and Operating Plone on WSGI
    • 1. Setup a box for the training
      • 1.1. Installing Prerequisites
      • 1.2. Creating a Virtualenv for the Training
    • 2. PEP 3333
    • 3. Deploying Plone with WSGI using zc.buildout, plone.recipe.zope2instance and Waitress
    • 4. Differences to the ZServer setup
    • 5. Understanding the contents of wsgi.ini
      • 5.1. The WSGI pipeline
    • 6. What’s left in zope.conf?
      • 6.1. Exercises
        • 6.1.1. Exercise 1
        • 6.1.2. Exercise 2
    • 7. WSGI options
      • 7.1. http-address
      • 7.2. threads
      • 7.3. wsgi
      • 7.4. wsgi-ini-template
      • 7.5. debug-exceptions
      • 7.6. access-log, z2-log
      • 7.7. access-log-level, z2-log-level
      • 7.8. Advanced logging for WSGI
        • 7.8.1. Exercise 1
      • 7.9. sentry* options
      • 7.10. Options that are currently unavailable for WSGI
    • 8. Bjoern
      • 8.1. Prerequisites
      • 8.2. Use bjoern in our buildout
        • 8.2.1. Exercise 1
    • 9. Gunicorn
      • 9.1. Possible Worker models
      • 9.2. Use gunicorn in our buildout
      • 9.3. Alternative method for using gunicorn
        • 9.3.1. Exercise 1
    • 10. uWSGI
      • 10.1. Possible Worker models
      • 10.2. Using uWSGI in our buildout
        • 10.2.1. Exercise 1
      • 10.3. Using uWSGI Emperor from the distribution
        • 10.3.1. Exercise 2
    • 11. Debugging Plone on WSGI
      • 11.1. Debugging with waitress
      • 11.2. werkzeug debugging
      • 11.3. Debugging uWSGI
    • 12. Useful Add-ons and Utilities
      • 12.1. Sentry
      • 12.2. haufe.requestmonitoring
    • 13. Can I talk to the supervisor?
      • 13.1. Install Plone using pip
      • 13.2. Protocols other than HTTP (FTP, WebDAV, …)

Plone Trainings

  • About
  • Glossary
  • Teachers Training
    • How To Give Technical Training(s)
      • 1. Training theory: education, how people learn and process information
        • Introduction
        • Learning Styles and the Trainer
        • Try to teach one thing at a time
        • Attention Span
        • The more you know, the less you know
      • 2. Before the training: Create material, invite trainees, preparation
        • Who do you want to give a training to
        • Training information
        • Show it all or practice the basics
        • Group size, number of trainers
        • Contact your students before the training
        • Re-use and improve the material that is already available
        • Verify the training location and facilities
        • Prepare for the worst
      • 3. During training day(s): what to expect, do’s and don’ts
        • Structure of your training day
      • 4. After the training: Aftercare, keep in touch, learn, improve
Plone Training
  • »
  • Mastering Plone 5 Development »
  • 29. Custom Search

29. Custom Search¶

If the chapters about views seem complex, the custom search add-ons shown below might be a great alternative until you feel comfortable writing views and templates.

Here are two add-ons that allow you to add custom searches and content listings through the web (“TTW”, requiring no programming: only the web browser) in Plone.

29.1. eea.facetednavigation¶

eea.facetednavigation is a full-featured and a very powerful add-on to improve search within large collections of items. No programming skills are required to configure it since the configuration is done TTW.

It lets you gradually select and explore different facets (metadata/properties) of the site content and narrow down you search quickly and dynamically.

  • Install eea.facetednavigation

  • Enable it on a new folder “Discover talks” by clicking on Actions > Enable faceted navigation.

  • Click on the Faceted > Configure to configure it TTW.

    • Select ‘Talk’ for Portal type, hide Results per page

    • Add a checkboxes widget to the left and use the catalog index Audience for it.

    • Add a select widget for speaker

    • Add a radio widget for type_of_talk

Examples:

  • https://www.dipf.de/en/research/projects

  • https://www.mountaineers.org/courses/courses-clinics-seminars

  • https://www.dyna-jet.com/hochdruckreiniger

See also

We use the new catalog indexes to provide the data for the widgets and search the results. For other use cases we could also use either the built-in vocabularies (https://pypi.org/project/plone.app.vocabularies) or create custom vocabularies for this.

  • Custom vocabularies TTW using Products.ATVocabularyManager

  • Programming using Vocabularies: https://docs.plone.org/external/plone.app.dexterity/docs/advanced/vocabularies.html

29.2. collective.collectionfilter¶

A more lightweight solution for custom searches and faceted navigation is collective.collectionfilter. By default it allows you to search among the results of a collection and/or filter the results by keywords, author or type.

It can also be extended quite easily to allow additional filters (like audience).

Next Previous

© Copyright The text and illustrations in this website are licensed by the Plone Foundation under a Creative Commons Attribution 4.0 International license..

Built with Sphinx using a theme provided by Read the Docs.