<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>Symphony – Extensions</title>
    <link>http://www.getsymphony.com</link>
    <atom:link href="http://www.getsymphony.com/get-involved/feeds/extensions/" rel="self" type="application/rss+xml"/>
    <description>Symphony Extensions</description>
    <language>en</language>
    <generator>Symphony CMS</generator>
    <item>
      <title>Edit Plus</title>
      <link>http://www.getsymphony.com/download/extensions/view/96948/</link>
      <pubDate>Sat, 11 May 2013 10:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/96948/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Code editor with syntax highlighting&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By Petertron&lt;/strong&gt;&lt;/p&gt;Edit Plus is a code editor for XSLT, CSS and JS. The current version includes syntax highlighting for XSLT.</description>
    </item>
    <item>
      <title>Tabnavigation</title>
      <link>http://www.getsymphony.com/download/extensions/view/100135/</link>
      <pubDate>Fri, 26 Apr 2013 09:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/100135/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Extension that provides back-end tabs for Symphony CMS&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By mgussekloo&lt;/strong&gt;&lt;/p&gt;This extension for Symphony CMS enables tabs in the main menu in the backend. Useful for simplifying complex content structures.</description>
    </item>
    <item>
      <title>Markdown Live</title>
      <link>http://www.getsymphony.com/download/extensions/view/100052/</link>
      <pubDate>Wed, 24 Apr 2013 10:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/100052/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Quickly preview Markdown textarea fields&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By gwilson&lt;/strong&gt;&lt;/p&gt;Adds a button beneath Markdown text area fields that opens a quick preview of the formatted text.

Works with Markdown, Markdown Extra and Markdown Extra with Smartypants fields. Supports multiple Markdown fields on one page.</description>
    </item>
    <item>
      <title>Multilingual</title>
      <link>http://www.getsymphony.com/download/extensions/view/99524/</link>
      <pubDate>Tue, 09 Apr 2013 09:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/99524/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Manipulates datasources for multilingual filtering and output.&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By jensscherbl&lt;/strong&gt;&lt;/p&gt;See symphonyextensions.com for details.</description>
    </item>
    <item>
      <title>Symphony Checkout</title>
      <link>http://www.getsymphony.com/download/extensions/view/98473/</link>
      <pubDate>Mon, 11 Mar 2013 10:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/98473/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Payment Gateways and Transactions&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By davjand&lt;/strong&gt;&lt;/p&gt;Symphony Checkout is an extension that aims to bring more robust payment functionality to symphony. Inspired by paypal payments and PGI loader, Symphony Checkout provides a Transaction field that can be used to store the relevent data to process a transaction.

A 'Transaction' field goes into a section whoes entries represent a payment. The field can then map in data from the other fields in the entry (such as names, addresses, emails etc) in order to pass the relevent data to a payment processor. The field can then post the data to the payment processor via an event and then reconcile the transaction into the field.

Currently only sagepay server integration is supported but a test payment gateway class is provided which can be extended for any other payment gateway.

NB: Currently the price field is grabbed from the section which means that it has to be pre populated. For use on a 'basket' based ecommerce website, your basket extension needs to save the data into the section. There are obviously security issues here that need to be resolved but this extension currently doesn't cater for that. I have a cart extension (davjand/symphony_cart) that could potentially be integrated in the future.

Read more on github</description>
    </item>
    <item>
      <title>Database Integration Manager</title>
      <link>http://www.getsymphony.com/download/extensions/view/98436/</link>
      <pubDate>Fri, 08 Mar 2013 10:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/98436/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Database Deployment&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By davjand&lt;/strong&gt;&lt;/p&gt;Symphony's database structure doesn't currently lend its self to a continuous integration workflow. There are ways to do it as evidenced by some other great extensions but from bitter experience, it is very easy to accidentally corrupt your database. And this is just for simple workflows with one developer, it gets even more complicated with several developers in which if queries are executed in the wrong order, you get some horrible database issues.

How it works

DIM provides a method of locking the database structure when a user is making changes. Once the changes are completed, no further users can edit the database structure until they are running the latest version. Workflow is something like as follows:

Example Workflow

DIM is setup and configured on the staging server (server mode)
DIM is setup and configured on the local install (client mode)
Authentication details are setup on the server and local installs (multi-user support)
The database structure is completely locked now. No pages, events or sections can be edited. NB: Database entries can still be created/edited/deleted etc.

The local user requests a database checkout which is recorded on the staging server
At this point the user can make changes to their local symphony install. If another user tries to checkout then this will be denied

The local user adds a section and checks in the database, creating a new version.
At this point the new version is logged on the staging server but not complete as the version only exists locally. The version file must be uploaded to the staging server (My workflow uses GIT to do this).

Once the staging server has been updated to the latest version, then (4) can happen again.

See Github for complete readme</description>
    </item>
    <item>
      <title>Filemanager</title>
      <link>http://www.getsymphony.com/download/extensions/view/86548/</link>
      <pubDate>Thu, 21 Feb 2013 08:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/86548/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Select, upload, move and delete files.&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By iwyg&lt;/strong&gt;&lt;/p&gt;Filemanager

Dependencies

If you are looking for a 2.2.x compatible version, please checkout the release.2.2.x branch.

Filemanager has two hard dependencies

Require js for Symphony CMS
Backbone js for Symphony CMS
so if you want to use filemanager, please install these extensions first.
(It is not necessary to install Backbone.js since it only provides the
javascript source for backbone.js and underscore.js. Placing sym_backbonejs extension in
your extensions directory without actually installing it shlould work fine). 

Notes on Multiple field instances

As a major change, version 1.0.0 now allows you to have multiple filemager
instances per section. Filemanager keeps its files and folders in sync, though it's
beste practice not to share the same directories between different filemanager fields. 

Pitfalls

This mainly refers to developers who are testing on windows/mampp environments

In case you dont't have PECL extension finfo_open installed and the
deprecated mime_content_type is not available on your system, the file
mimetype checking will fallback to application/octet-stream. 

If you want to use the fileupload feature in this case, include application/octet-stream in your allowed mimetype settings. 
This results in all files getting validated on the serverside, though clientside validation will work as expected (depending on the browser. e.g. IE will not).

Configuration

Preferences



Default MIME types: define the default MIME types which should be allowed for
uploading. This will be overriddin if you set default MIME types on the
fields setting.
ignore files: define which files shoud be ignored in the directory listing by default.
Don't put in here different regular expressions but regexp fragments, e.g. if
you want to ignore all files with  .jpg and  .gif extensions, write
.jpe?g$ .gif$ which becomes a regular expression that looks like /(.jpe?g$|.gif$)/i.
You can extend this per field in the fields' setting panel. 
Field Settings



Directory options:

Set the rootdirectory within workspace and select which directories should be excluded. You can also choose to allow
moving, removing and/or creating directories. Uncheck Show filesearch if you don't need fielsearch on this field (since 1.0.5).



Allow fileupload:

Check this, if you want to allow uploading files. After you save your current
section, more options will become available, as they are: 



Unique Filenames: check this, if you want to have unique filenames
Allowed MIME types: define the MIME types that should be allowed for
uploading. This will override the defaults set in preferences for this field.


File options:

Extend the default fileextensions that should be ignored (see Preferences) and
set if you want to allow moving files to another location and/or allow deleting
files.



Select options:

Limit the amount of files that can be selected per entry. 0 equals unlimited,
-1 prevents selecting files.

You may allow re-ordering selected files and choose a displaymode (compact
and preview).

The Field



Selections

The Selection field is the actual field (the one which will hold all data).
Selecting a file is easy: just click on a file title in the Filebrowser panel
to select a file and click the remove button (or a selected file title
once again) to remove it form the selection. 

Since version 1.0.4 holding down shift allows you to select multiple files at
once.

display mode compact



display mode preview



Uploads

You can add or remove a upload section for each directory within your selected
rootdirectory (given your configuration allows fileuploads).

Uploaded files will show up in the filebrowser as soon as they are validated.



Filebrowser



This is the heart of the Filemanager field. Depending on your configuration, you
can move and delete files and directories, create new directories or upload
files from your local harddrive. 

Search for files



Results are shown while you are typing. You can add searchresults directly to your selection by
clicking on the a result node.

Meta View



Each fileview also has a meta view panel. Click on a files' infobutton to
display additional file information such as file size, file type and a file
preview (if available).

Changelog

1.0.8, 2013-02-21

bugfix: legacy method call
validate uploaded file against all error codes
1.0.7, 2012-08-08

bugfix: opera fileupload
bugfix: retain selection order
1.0.6, 2012-06-20

bugfixes
1.0.5, 2012-06-04

better handling when file selection is deactivated.
searchview is now optional (but activated by default).
1.0.4, 2012-05-25

Fixed a bug with uploads on multiple instances.
you may now select and unselect multiple files at once
1.0.3, 2012-05-15

Fixed a bug with file selection limit.
Selecting files can now be deactivated (e.g. to use it as a standanlone filemanager)
updated lang.de
1.0.2, 2012-05-10

Symphony 2.3
1.0.1, 2012-05-09

minor css fix
1.0.0, 2012-04-25

filemanager field can now hav multiple instances 
added filesearch view 
selections can now be reordered
selection view can now be displayed in two different modes (preview and compact)  
design changes
beta 1.3.2, 2012-04-19

fixed a bug, were files selection would save if there a whitespace character in the files' name
beta 1.3.1, 2012-04-18

success message in file deletion now works as expected
fixed an error where the upload progress indicator wouldn't complete animation
beta 1.3, 2012-04-17

fixed an error when a directory wasn't accessible (dev 1.4.3)
improved error handling (dev 1.4.3)
replaced some method calls for compatibility reasons (dev 1.4.3)
File ignoring now works as expected (dev 1.4.2)
added support for multiplatform installations (pathhandling etc.) (dev 1.4)
False error handling for failed uploads (dev 1.4)
There was an error while creating new directories. New directories were always created in the workspace root folder (dev 1.4)
file upload for legacy browser (iframe-transport mode) (dev 1.3)
Metaviews now retain their states when a directory node gets updated (dev 1.3)
Fixed some possible pitfalls in case PECL extension finfo_open is not available (dev 1.3)
Fixed some possible putfalls in case of a broken default file ignore regexp fragment (dev 1.3)
beta 1.2, 2012-04-12

fixed broken default file-ignore RegExp
added update method that will handle broken default regexp form previous verions
Filebrowser: Folders now auto open and close when dragging over them
beta 1.1, 2012-04-11

fixed directory update behaviour
deprecated field setting that would cause an error 
beta 1, 2012-04-11

initial release   
</description>
    </item>
    <item>
      <title>APIPage</title>
      <link>http://www.getsymphony.com/download/extensions/view/95838/</link>
      <pubDate>Fri, 08 Feb 2013 08:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/95838/</guid>
      <description>&lt;h4&gt;&lt;em&gt;api, frontend&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By iwyg&lt;/strong&gt;&lt;/p&gt;Synopsis

Easily generate api pages with Symphony CMS.   

Dependencies

php &gt;= 5.3.6
all other dependencies should already be met by Symphony CMS
Usage

Install as usual.
set default format and format url parameter in System/Preferences
set pagetype to API (do not set any pagetype other then API when using the content type mappings extension)
set your template's output format to xml, e.g.: 

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;
    &lt;xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /&gt;

    &lt;xsl:template match="/"&gt;
        &lt;response&gt; &lt;!-- do your transformations here --&gt;&lt;/response&gt;
    &lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;

do your data transformation as you would usually do.      
FAQ

Q: why no php 5.2?
A: Brace yourself, php 5.5 is comming.
Q: I can do all this using a xml to json stylesheet. So why using this extension?
A: Sure you can. The downside of doing so is, that all these stylesheets are a bit restricted and perform expensive string operations. The extensions XMLtoJSON parser uses the php C extension SimpleXML, which is much faster. It's reliable and it's tested.  
TODOS

make XMLtoJSON parser exchangable
add more output formats like yml, python, etc. 
</description>
    </item>
    <item>
      <title>Fingerprint</title>
      <link>http://www.getsymphony.com/download/extensions/view/97402/</link>
      <pubDate>Thu, 07 Feb 2013 15:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/97402/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Create a fingerprint of the hidden inputs for a given form.&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By Lewis&lt;/strong&gt;&lt;/p&gt;Fingerprint allows you to create a fingerprint of the hidden inputs for a given form, ensuring that users do not change the values of the hidden inputs prior to submitting the form.</description>
    </item>
    <item>
      <title>Sections event</title>
      <link>http://www.getsymphony.com/download/extensions/view/96490/</link>
      <pubDate>Tue, 29 Jan 2013 08:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/96490/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Handles forms for multiple sections at once&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By vladG&lt;/strong&gt;&lt;/p&gt;This extension bundles an event and corresponding form controls for easier &amp; integrated control of your frontend forms in one place.

If you ever had to submit data from Frontend to more than 1 section and those sections are linked together through a SBL/SBL+ field, you had to customize your event.

Using this approach, those relations are handled on-the-fly and no more customizations are required.

Features:

One event to rule them all. It takes the form data and dispatches the processing for all sections where it should be. It also takes care of linking the entries to each other.
Up to date Form controls. More complex fields have arisen lately. @nickdunn's Form Controls have fallen behind. The Section Form Controls offer updated and flexible utilities to help with the new fields and challenges.
Built in multiple entries support. Multiple entries are now supported by default without needing to apply another filter. Using Section Form Controls, refactoring the XSLT code to support multiple entries at once becomes a breeze.
</description>
    </item>
    <item>
      <title>Admin CSS Override: @media Print Edition</title>
      <link>http://www.getsymphony.com/download/extensions/view/96933/</link>
      <pubDate>Fri, 25 Jan 2013 15:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/96933/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Great for making PDFs of invoices etc.&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By wjnielsen&lt;/strong&gt;&lt;/p&gt;This extension allows overriding Symphony's Admin CSS PRINT styles by additional CSS rules. It simply appends a custom stylesheet to the head of admin pages.

This is probably the simplest extension ever - at least as simple as Admin CSS Override!</description>
    </item>
    <item>
      <title>Dynamic Text Group</title>
      <link>http://www.getsymphony.com/download/extensions/view/70780/</link>
      <pubDate>Fri, 18 Jan 2013 15:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/70780/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Dynamically add a text field or text field groups to a section entry&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By brockpetrie&lt;/strong&gt;&lt;/p&gt;This field provides a method to dynamically add groups of text fields and text-representable fields (including radio, checkbox and dropdown inputs) to an entry. An example of its use would be for creating tracklists in a section for record albums. This extension would allow you to create as many track entries in each album entry as needed.

Usage

Add the dynamictextgroup folder to your Extensions directory
Enable the extension from the Extensions page
Add the Dynamic Text Group field to your section, then save your section to enable the Field Editor
Go nuts
Field Editor

The Field Editor allows for easy manipulation and customization of each field's instance. When adding a new subfield, the label MUST be unique or it'll crash and burn. This is because it names the SQL columns based on your input, and SQL column names must be unique.

v3.0 now uses Select2 as its select box mechanism. This means that dynamic values in your select list are now possible, though you'll have to get your hands pretty dirty by creating an instantiation function in assets/dynamictextgroup.publish.js (instantiating it with a unique classname), and then entering that classname (without the leading .) in the Custom Override field within the Select Box field's options dropdown. This will attach your unique class to the select element, allowing for your jQuery instantiation plugin to find it and do its magic. I've included an example that dynamically pulls movies from Rotten Tomatoes to give you a starting point; just enter 'rottentomatoes-example' in the Custom Override option (please don't abuse my API key, I included it as a kindness; go register for your own if you want to actually use it, it takes like 20 seconds). In the distant future I'd like to make implementing these custom selects more user-friendly, but the potential use cases are so varied that it's scary and daunting. Anyway, with a bit of tinkering, it shouldn't be too hard for you to set this up to pull dynamic data from your Symphony site via the APIPage plugin.

Change log

Version 3.0 beta 1

Symphony 2.3 compatibility.
Switched Select Box mechanism to use Select2, so it's now Select Box on steroids. Dynamic select values and more!
Just a heads up: I'm planning on renaming this extension to Dynamic Field Groups at some point in the future, so brace yourselves.
Version 2.0 

See v2.0
Version 1.0 

Initial release. See v1.0
</description>
    </item>
    <item>
      <title>Static Asset Versioning</title>
      <link>http://www.getsymphony.com/download/extensions/view/96541/</link>
      <pubDate>Thu, 17 Jan 2013 08:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/96541/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Provides hashes for static assets&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By creativedutchmen&lt;/strong&gt;&lt;/p&gt;This extension will provide a sha1 hash of your static assets in the XML. In a way it is similar to the Asset Compiler extension, except that it does not alter your output, so it can also be used with require.js or script.js.

As a sample, this is the output when the folders workspace/js and workspace/css are selected, and Twitter's bootstrap is used (css is concatenated):

  &lt;assets&gt;
    &lt;js&gt;
      &lt;app-ck.js&gt;77d68d889&lt;/app-ck.js&gt;
      &lt;app.js&gt;1a3ac2a00&lt;/app.js&gt;
      &lt;bootstrap-alert.js&gt;9cfbeb5d6&lt;/bootstrap-alert.js&gt;
      &lt;bootstrap-button.js&gt;a8f204c81&lt;/bootstrap-button.js&gt;
      &lt;bootstrap-carousel.js&gt;265e52c5f&lt;/bootstrap-carousel.js&gt;
      &lt;bootstrap-collapse.js&gt;320469b1c&lt;/bootstrap-collapse.js&gt;
      &lt;bootstrap-dropdown.js&gt;2664c0490&lt;/bootstrap-dropdown.js&gt;
      &lt;bootstrap-modal.js&gt;e12c769aa&lt;/bootstrap-modal.js&gt;
      &lt;bootstrap-popover.js&gt;99aee04c5&lt;/bootstrap-popover.js&gt;
      &lt;bootstrap-scrollspy.js&gt;bd739439a&lt;/bootstrap-scrollspy.js&gt;
      &lt;bootstrap-tab.js&gt;8b3264cc1&lt;/bootstrap-tab.js&gt;
      &lt;bootstrap-tooltip.js&gt;b9809fcb0&lt;/bootstrap-tooltip.js&gt;
      &lt;bootstrap-transition.js&gt;aa978472d&lt;/bootstrap-transition.js&gt;
      &lt;bootstrap-typeahead.js&gt;01f6c6fab&lt;/bootstrap-typeahead.js&gt;
      &lt;carousel.js&gt;c01d4b6d4&lt;/carousel.js&gt;
      &lt;flickr-widget.js&gt;acdac461d&lt;/flickr-widget.js&gt;
      &lt;paginate-ck.js&gt;6788645c4&lt;/paginate-ck.js&gt;
      &lt;paginate.js&gt;ec9b205bd&lt;/paginate.js&gt;
      &lt;twitter-ck.js&gt;25429fa03&lt;/twitter-ck.js&gt;
      &lt;twitter.js&gt;20ecf0567&lt;/twitter.js&gt;
    &lt;/js&gt;
    &lt;css&gt;
      &lt;style.css&gt;53b2ef39e&lt;/style.css&gt;
    &lt;/css&gt;   &lt;/assets&gt;


This extension does not compile, minify, concatenate or do anything else with your assets, it will just provide you with enough information to ensure your visitors always see the latest stylesheets or scripts, even if you have an agressive cache in place.</description>
    </item>
    <item>
      <title>Language: German</title>
      <link>http://www.getsymphony.com/download/extensions/view/20470/</link>
      <pubDate>Mon, 07 Jan 2013 09:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/20470/</guid>
      <description>&lt;h4&gt;&lt;em&gt;German translation for Symphony&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By Nils&lt;/strong&gt;&lt;/p&gt;Deutsche Übersetzung für Symphony.</description>
    </item>
    <item>
      <title>Anti Brute Force</title>
      <link>http://www.getsymphony.com/download/extensions/view/72904/</link>
      <pubDate>Tue, 18 Dec 2012 15:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/72904/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Secure your backend login page against brute force attacks&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By Nitriques&lt;/strong&gt;&lt;/p&gt;Prevents people and software to brute force your authors accounts.

SPECS

After x failed attempt, the IP address will be banned for y min;x and y are settings in the preferences page 
Features colored list: Black list, Grey list, White list.
Features a unban via email capabilities; Must be enabled in the preferences page
Backend content page for managing blocked IPs and colored lists
A Facade/Singleton class -ABF- for developers to leverage antibruteforce capabilities
(ex.: email reports or use with the member extension)
Please read the README.md file on github for full information and for issues</description>
    </item>
    <item>
      <title>Improved Entry Editor</title>
      <link>http://www.getsymphony.com/download/extensions/view/95485/</link>
      <pubDate>Thu, 13 Dec 2012 09:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/95485/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Enable in-place fields re-ordering and collapsing.&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By eKoeS&lt;/strong&gt;&lt;/p&gt;See the README or the symphonyextensions.com entry for details.</description>
    </item>
    <item>
      <title>Asset Compiler</title>
      <link>http://www.getsymphony.com/download/extensions/view/95243/</link>
      <pubDate>Tue, 27 Nov 2012 09:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/95243/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Concatenate &amp; minify Javascript &amp; CSS assets&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By firegoby&lt;/strong&gt;&lt;/p&gt;Asset Compiler

Symphony CMS extension to concatenate &amp; minify Javascript &amp; CSS assets and update Symphony's output with the newly compiled, SHA1-tagged, filename.

Version: 1.4
Date: 5th February 2013
Requirements: Symphony 2.3
Author: Chris Batchelor
Synopsis

Asset Compiler scans an XSLT Template (master.xsl by default) for CSS and Javascript assets with an attribute of data-compile='true'. These assets are concatenated (in-order) into a single, minified file and tagged with a unique hash (to ensure fresh caching). Symphony's HTML output is updated, removing any data-compile='true' assets and replacing them with the single, minified file (just before closing &lt;/head&gt; for CSS and just before closing &lt;/body&gt; for Javascripts).

There are also a checkbox On/Off switches to control whether to serve the compiled assets. Javascript compilation is via an CURL API call to Google's Closure Compiler.

Installation

Extract files into extension/asset-compiler directory
Enable extension in System &gt; Extensions
Add a data-compile='true' attribute to any &lt;link&gt; or &lt;script&gt; element in master.xsl you wish to be compiled. All other stylesheets and javascripts in the template are ignored.
In System &gt; Preferences click Compile All Assets
Tick one or both of Serve Compiled Javascript/Stylesheet Assets and click Save Changes
Note: the assets can be in any folder under the Symphony root, absolute paths for the domain (e.g. /workspace/styles) are trimmed of their leading / and appended to Symphony root prior to concatenation.

Updating Multiple Manifests

Asset Compiler stores the latest compiled filenames in manifest/config.php. If you use Rowan Lewis' "Dual Manifest Folders" setup you can check the Advanced: Save compilation details to ALL manifest.*/config.php files checkbox to ensure all your manifests are updated at the same time.

Frequently Asked Questions

How do I alter the compression/minification level for Google Closure Compiler (Javascript)?

Alter the closure_compression config entry in manifest/config.php. It must be one of the following 3 options: WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS or ADVANCED_OPTIMIZATIONS. By default it is set to WHITESPACE_ONLY to ensure maximum compatibility.

How do I change which XSLT Template is read? Default: master.xsl

Alter the xslt_template config entry in manifest/config.php, it should be relative to Symphony's root directory

How do I change the stylesheet output directory? Default: styles

Alter the styles_path config entry in manifest/config.php, it should be relative to Symphony's root directory

How do I change the javascripts output directory? Default: scripts

Alter the scripts_path config entry in manifest/config.php, it should be relative to Symphony's root directory</description>
    </item>
    <item>
      <title>Page HTTP Caching</title>
      <link>http://www.getsymphony.com/download/extensions/view/94851/</link>
      <pubDate>Wed, 14 Nov 2012 09:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/94851/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Control HTTP caching on a per-Symphony-page basis&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By DavidOliver&lt;/strong&gt;&lt;/p&gt;Control HTTP cache headers on a per-Symphony-page basis.

Guidelines and information

The default Symphony CMS Cache-Control response header values for frontend pages indicate that the web browser should re-request pages from the origin server. This is a good default, and ensures that the most recent dynamic content is displayed on each page load.

For websites with content that is not updated extremely frequently, it may be preferable to indicate that pages can be cached by web browsers and, optionally, by intermediary caches such as web proxies, for a certain length of time. Doing so will allow pages to be displayed without HTTP requests re-hitting the origin webserver, potentially saving valuable CPU and memory resources. Additionally, the time taken for pages to be displayed in-browser can be substantially decreased, resulting in more of instantaneous feel to the visitor.

Page HTTP Caching enables HTTP caching by allowing control of the following values in the HTTP Cache-Control response header:

intermediary caches (public or private)
max-age (in seconds)
If the majority of a website’s pages include content that must be completely fresh, such as user login status, or content that is updated extremely frequently, Page HTTP Caching is likely not suitable.

Recommended reading

These articles are helpful in choosing caching methods and deciding on which HTTP cache settings to use.

Symphony CMS: A guide to caching extensions

Caching Tutorial for Web Authors and Webmasters

Increasing Application Performance with HTTP Cache Headers

Cache Control Directives Demystified

Usage

Once you have installed Page HTTP Caching, visit the Symphony CMS Preferences page and select the HTTP caching settings that your pages should use by default.

If your content includes sensitive data such as user information, it is recommended not to enable intermediary caches.

The max-age settings (in seconds) determines how long a browser may choose to serve a page from its cache instead of making an HTTP request. You will want to tailor this value to your website’s content and users.

You may also control these same settings per-Symphony-page if required when editing pages.</description>
    </item>
    <item>
      <title>Backend Views</title>
      <link>http://www.getsymphony.com/download/extensions/view/71466/</link>
      <pubDate>Mon, 08 Oct 2012 09:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/71466/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Use Data Sources to filter entries in the Symphony backend.&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By eKoeS&lt;/strong&gt;&lt;/p&gt;Ever wanted to use datasources to filter entries in the backend? Backend Views allows you to do that in three clicks!

The 1st click is to go to the Preferences
The 2nd click is to create a new "View" from a list of valid Data Sources
The 3rd click is on Save
Here you go!

Issues

Post issues on the issue tracker.</description>
    </item>
    <item>
      <title>HTML5 Doctype</title>
      <link>http://www.getsymphony.com/download/extensions/view/79977/</link>
      <pubDate>Sat, 06 Oct 2012 17:00:00 +1000</pubDate>
      <guid>http://www.getsymphony.com/download/extensions/view/79977/</guid>
      <description>&lt;h4&gt;&lt;em&gt;Convert XHTML to HTML5&lt;/em&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;By bauhouse&lt;/strong&gt;&lt;/p&gt;I was looking for a solution for being able to indent XML plus use HTML5. According to Content with Style, there are some problems with XSLT and HTML 5.

I was able to create an HTML 5 Doctype with the following output instruction:

&lt;xsl:output
    method="html"
    doctype-public="XSLT-compat"
    omit-xml-declaration="yes"
    encoding="UTF-8"
    indent="yes" /&gt;


Unfortunately, there is no indenting. It seems method="html" defaults to returns, but no indenting. But using method="xml" does output with indenting, however, there is an empty attribute string for the missing doctype-system attribute.

Nick Dunn advocated the polyglot compatible HTML5 doctype. This approach would output the doctype legacy string, as advocated by the W3C for legacy systems.

But, there were problems with this approach:


  We’ve just hit a snag where we needed to output XML (XHTML) so that we could include Facebook namespaces (which didn’t work when the output type was html). The last resort is an HTML string parsing hack.


Nick came up with the HTML5 Doctype extension as a hack to override the output of the XSLT processor to replace the XHTML doctype with an HTML5 doctype. The hack was deemed folly and Nick was happy to hand over the responsibility to maintain the extension to myself.

I made some modifications to Nick's original code to fix some performance and output issues. I am using the approach that I originally described in the XSLT and HTML5 thread, where I split the output into two parts and only parse the first part (currently set to the first 15 lines) and then join them back together again.

So, I am officially releasing the extension on the Symphony site. By the way, Michael Eichelsdörfer has tested it and finds that it performs very well.

Usage

Enable this extension and every page will be processed to test whether the output contains the XHTML doctype strings. If these strings are found within the first 15 lines of the document, they will be replaced with the HTML5 doctype strings. Use the following output element in your master XSL stylesheet.

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;

&lt;xsl:output method="xml"
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
    omit-xml-declaration="yes"
    encoding="UTF-8"
    indent="yes" /&gt;

&lt;xsl:template match="/"&gt;
    &lt;h1&gt;&lt;xsl:value-of select="$website-name" /&gt;&lt;/h1&gt;
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;


We assume that the first four lines of the XSLT-generated XHTML document will look like this:

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"&gt;
  &lt;head&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;


The extension will preserve attributes applied to the html element, such as lang or class attributes and will replace the meta element to set the content type and character set with the minimalist HTML5 version.

&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;


By setting the output to XHTML with the indent attribute set to yes, the output will preserve indenting and properly close elements, whether they are self-closing elements or empty elements.</description>
    </item>
  </channel>
</rss>
