Almost every aspect of Universal Content Puller is expandable through a plugin architecture. Whilst the emphasis of Universal Content Puller is to provide a common infrastructure to load and manage content from a diverse range of content sources, many aspects of how that content is processed and displayed are controlled through further pluggable components.
These components are developed by myself, by myself in association with other developers, or wholly by other developers. This description of the system architecture is intended to help users of Universal Content Puller understand and use it, and also act as an introductory page for developers wishing to develop further plugins.
Currently installed sources can be viewed through the Content Sources dashboard page at dashboard/blocks/universal_content_puller/.
For developers considering extending Universal Content Puller, the Universal Content Puller Developer addon provides tools to expose data structures, learn how Universal Content Puller works, and assist with development.
To pull content, add a Universal Content Puller block to a page area or stack as you would any other block. On the Source Selection tab, select the source to pull content from and then enter any parameters specific to that source.
The Cache Settings tab allows caching for the sourced content to be controlled through a single slider control. To disable caching, slide this control all the way to the left.
The cache life can be set from 1 second through to 1 week. However, in many cases a short cache life will actually be less efficient than no cache at all.
When the cache is enabled, further settings are available to choose how broady content is cached across users, groups and pages that a UCP block appears on, and also to add some jittewr to the cache, so that multiple UCP blocks do not all expire their cache at the same time.
Conditional View requires the Magic Data addon to be installed and a minimum of concrete5 version 5.6. Magic Data symbols can be entered and, should they evaluate to false or an equivalent, the pulled content will not be output.
To assist in development of Conditional Views, this tab includes a built in Test facility which will evaluate the entered symbols in the context of the current page and a specified user.
Also included is a template Cache or Blocks by Ajax which renders a pulled source directly from the cache if it is already cahed, or ajax load it if not.
Universal Content Puller sources can include each other recursively. If you are designing nested levels of pulled content between pages, please analyse what you design carefully before doing so. You could create a recursive loop that has the potential to become infinite.
To help prevent runaway recursion, a limit of 100 Universal Content Puller blocks is set for any page rendering. This limit can be changed by defining the constant UNIVERSAL_CONTENT_PULLER_LIMIT in config/site.php.
If you try hard enough, I am sure you could beat this limit and send your web server spiralling into disaster. If inadvertent recursion breaks your site, you can disable Universal Content Puller as described below while analysing the situation and undoing the problem.
In the undesirable circumstance of a Universal Content Puller source breaking a page or your site, the first line of recovery should be to go directly to the dashboard site map and revert the affected page version.
If this fails, Universal Content Puller can be globally disabled by defining the constant UNIVERSAL_CONTENT_PULLER_ENABLE as false in config/site.php.
Plugins for Universal Content Puller from other developers are welcome. Developers should start with the System Architecture and work out from there.
The Universal Content Puller Developer addon provides tools to expose data structures, learn how Universal Content Puller works, and assist with development.