Open-Xchange offers to publish an increasing amount of internal data like contacts, documents, appointments. This data can be published in a way that it is machine-readable using OXMF and it can be customized in it's look and feel using common web techniques like CSS.
Within freemarker, you are given a list called contacts, which contains all contacts of the given publication. This is the central element of the publication. Freemarker enables you to access every attribute of the class Contact that has both a setter and a getter. See the JavaDoc for the class to find out about attributes or use the example template of your OX.
This is the basic loop over the list of contacts that you get:
<#list contacts as contact> <div class="ox_contact"> <span class="ox_company">$contact.company</span> <span class="ox_company">$contact.uRL</span> <span class="ox_note">$contact.note</span> </div> </#list>
You are given a list called infostore, which contains all infostore items of the given publication. This is the central element of the publication. Freemarker enables you to access every attribute of the class Infostore that has both a setter and a getter. See the JavaDoc for the class to find out about attributes or use the example template of your OX.
<#list infostore as infoitem> <div class="an_infoitem"> <span key="ox_title">$infoitem.title</span> <span key="ox_url">$infoitem.URL</span> <span key="ox_title">$infoitem.version</span> <span key="ox_creationDate">$infoitem.creationDate</span> <span key="ox_lastModified">$infoitem.lastModified</span> <span key="ox_comment">$infoitem.description</span> </div> </#list>
The calendar is a bit trickier than the others, because appointments can be recurring series with exceptions. So their data structure is a bit more complicated. That is why there is currently no Publish/Subscribe system in place, the freemaker templating is just used to render print views. There are two approaches to render the calendar.
The first approach uses a text-processor style: Your are given a list of appointments (all non-recurring, they have been broken up for you already) sorted by start date and a list of formatting information (like "between appointment 1 and 2 starts a new day"). You are free to ignore most of the formatting information (if you want to make a plain list of appointments, for example).
|appointments||A list of appointments, all single day appointments with no recurrence information, sorted by starting date.|
|formattingInfo||A list of formatting information, each entry containing a position (position zero is before the first appointment) and a flag that explains what it marks.|
|"0"||Day break: Following appointment starts on a new day|
|"1"||Week break: Following appointment starts on a new week|
|"2"||Month break: Following appointment starts on a new month|
|"3"||Year break: Following appointment starts on a new year|
|"10"||Day name: This element contains the name of the new day|
|"11"||Fill day: Place holder if the list covers a day that as no appointment in there (so you do not have to guess when to place fillers in more complex designs)|
These fields are contained within all publication templates, independent of the type.
|publication||The complete publication object.|
|request||The http request that was sent to show this publication.|
|dateFormat||The format of the date, usually in the java.text.SimpleDateFormat.|
|timeFormat||Like date format, just for displaying times during the day (without the year, month or day).|
|privacy||The privacy text meant to be published on the displayed page (*).|
|userContact||The contact that is responsible for the publication of this page (*).|
(*) Note: Several countries legally require you to publish this information. Leave it out at your own peril.
The first time you create a publication, you get to select the templates. If you chose a template provided by the hoster, a copy is created in your own infostore folder. If you chose one of your own, it is not copied again, of course.
Please note that this means that you do not get updates that the hoster does on their default templates once you copied an existing template.
The default templates of all existing items to publish can be found in the folder /opt/open-xchange/templates/ of every Open-Xchange installation, if the packages open-xchange-publish-microformats and/or open-xchange-calendar-printing are installed:
$ dpkg -L open-xchange-publish-microformats | grep templates /opt/open-xchange/templates /opt/open-xchange/templates/contacts_oxmf_uncensored.tmpl /opt/open-xchange/templates/infostore.tmpl /opt/open-xchange/templates/contacts_hcard_censored.tmpl /opt/open-xchange/templates/contacts_oxmf_censored.tmpl /opt/open-xchange/templates/contacts.tmpl /opt/open-xchange/templates/contacts_hcard_uncensored.tmpl
$ dpkg -L open-xchange-calendar-printing | grep templates /opt/open-xchange/templates /opt/open-xchange/templates/cp_monthview_table.tmpl /opt/open-xchange/templates/cp_monthview_list.tmpl /opt/open-xchange/templates/cp_workweekview_table.tmpl /opt/open-xchange/templates/cp_weekview_table.tmpl /opt/open-xchange/templates/cp_dayview_table.tmpl
The archive http://software.open-xchange.com/OX6/doc/publishing-templates.zip contains a complete example for Contacts and Infostore publishing. In order to use it, just copy the complete _data directory on a web server.
Adapt the path to files contacts.tmpl and infostore.tmpl and replace it with the files in /opt/open-xchange/templates.
If you want to change the colors or images, just edit _data/css/pubsub.css and replace the images in the _data/img/ directory.
When these files are changed, new published items in Open-Xchange will get this look and feel. Check out the online help or the user guides on how to publish using Open-Xchange.