Skip to content

Instantly share code, notes, and snippets.

@designermonkey
designermonkey / data_1.xml
Created February 12, 2013 23:06
Using Names and Matches together in XSL templates, we can choose and apply templates dynamically, based on content provided within the XML being transformed. I've searched for ages on how to do this properly, and a number of sources led me to this solution.
<data>
<datasource>
<section handle="test-section">Test Section</section>
<entry>
<page-path handle="about">/about</page-path>
<page-title handle="about">About</page-title>
<title handle="about-this-company">About This Company</title>
<template>
<item id="2" handle="content" section-handle="page-templates" section-name="Page Templates">Content</item>
</template>
@nathanhornby
nathanhornby / master.xsl
Last active July 11, 2022 20:06
An HTML5 master utility template for SymphonyCMS (XSLT).
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<xsl:text disable-output-escaping="yes">&lt;</xsl:text>!DOCTYPE html<xsl:text disable-output-escaping="yes">&gt;</xsl:text>
<xsl:text disable-output-escaping="yes"><![CDATA[
<!--[if lt IE 7 ]> <html lang="en" class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7 ]> <html lang="en" class="no-js lt-ie9 lt-ie8"> <![endif]-->
@mmattax
mmattax / oauth2test.php
Last active May 6, 2020 13:30
Formstack OAuth2 Flow
<?php
define('CLIENT_ID', 'YOUR_CLIENT_ID');
define('CLIENT_SECRET', 'YOUR_CLIENT_SECRET');
define('REDIRECT_URL', 'YOUR_REDIRECT_URL'); // for testing, use the URL to this PHP file.
define('AUTHORIZE_URL', 'https://www.formstack.com/api/v2/oauth2/authorize');
define('TOKEN_URL', 'https://www.formstack.com/api/v2/oauth2/token');
if (!empty($_GET['code'])) {
@davidhund
davidhund / dabblet.css
Created October 5, 2012 09:33
CSS only 'lightbox'
/**
* CSS only 'lightbox'
*/
body {
font: normal 1.5em/1.5 sans-serif;
background: #0cf;
color: #444;
min-height: 100%;
padding: 2em 10em;
@LeVM
LeVM / Default (OSX).sublime-keymap
Created September 27, 2012 18:58
Sublime Text 2 - View in multiple broswers
{ "keys": ["alt+1"], "command": "open_browser", "args": {"keyPressed": "1"} },
{ "keys": ["alt+2"], "command": "open_browser", "args": {"keyPressed": "2"} },
{ "keys": ["alt+3"], "command": "open_browser", "args": {"keyPressed": "3"} },
{ "keys": ["alt+4"], "command": "open_browser", "args": {"keyPressed": "4"} }
@tbjers
tbjers / menu.js
Created September 3, 2012 17:12
Express resources with authentication middleware
module.exports = {
menu: {
'wall': { title: 'Wall', name: 'wall' },
'logs': { title: 'Logs', name: 'logs', submenu: {
'system': { title: 'System', name: 'system' }
} },
'stats': { title: 'Stats', name: 'stats' },
'admin': { title: 'Admin', name: 'admin', submenu: {
'users': { title: 'Users', name: 'users' },
'grants': { title: 'Grants', name: 'grants' }

Providers: An Introduction

Providers is a concept that was introduced with Symphony 2.3 which allows extensions to natively provide new Data Source types. This allowed for a more seamless experience for users and opened up a world of possibilities for extension developers. The upcoming Symphony 2.3.1 release brings Providers to Events as well, allowing developers to provide new event types selectable from the native Event editor.

For Users

For users, the benefits are more flexible and powerful DataSources and Events that can start to do things that previously required custom code. Extensions such as Cacheable DataSource, Union DataSource and Remote DataSource all bring powerful functionality to the fingertips of every Symphony ninja (and those in training). The addition of Events means that we can now create extensions that abstract common API's (such as Github) to read and write information without any knowledge of the underlying API.

For Developers

@andrewminton
andrewminton / master.xml
Created August 9, 2012 09:26
Remote Datasource test
<data>
<preferences>
<sitename>Client - Portfolio</sitename>
<languages>
<entry id="1" handle="english" lang="en">English</entry>
<entry id="2" handle="francais" lang="fr">Francais</entry>
</languages>
<stylesheets><entry id="1"><url link="http://link-to-main.stylesheet.css"/></entry></stylesheets>
<scripts><entry id="1"><url link="http://link-to-main.stylesheet.css"/></entry></scripts>
<navlinks>
@DavidOliver
DavidOliver / event.save_order.php
Created July 10, 2012 13:58
Symphony CMS event to save a customer order
<?php
require_once(TOOLKIT . '/class.event.php');
Class eventsave_order extends Event{
const ROOTELEMENT = 'save-order';
public $eParamFILTERS = array(
'etm-new-order-notification'
@DavidOliver
DavidOliver / SymCMS - Getting data notes.mkd
Last active March 29, 2019 09:02
Notes on getting data from within Symphony CMS

Written based on hacking away at a custom event which aimed to take its data solely from entry data and $_SESSION values, and not posted values (which I understand may have been open to DOM hacking and required "ugly" frontend hidden fields).

Things I think I've learned

Use Xpath in PHP when possible

I was traversing the XMLElement object generated by SymQL (or Entry object generated by EntryManager) with the object's methods and foreach to get values, which seems to require a lot of effort and code:

php