<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title> blog</title>
		<link>http://www.silverstripe.org/blog/</link>
		<atom:link href="http://www.silverstripe.org/blog/" rel="self" type="application/rss+xml" />
		<description></description>

		
		<item>
			<title>The Trials and Tribulations of a Freelancer</title>
			<link>http://www.silverstripe.org/the-trials-and-tribulations-of-a-freelancer/</link>
			<description>&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/Image_3.png&amp;quot; width=&amp;quot;200&amp;quot; height=&amp;quot;200&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;em&amp;gt;Guest blogger Ryan Wachtl is an independant US-based web developer and runs the SilverStripe user group in Madison. Prior to this, Ryan wrote about &amp;lt;a href=&amp;quot;http://www.silverstripe.org/silverstripe-paypal-mini-cart-integration/&amp;quot;&amp;gt;SilverStripe PayPal Mini Cart Integration&amp;lt;/a&amp;gt;.&amp;lt;br/&amp;gt;&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I recently celebrated my fifth year of freelancing as a web professional. This had me thinking about how I’ve grown over the years, both personally and professionally, and I’ve learned that, as a freelancer, the lines often blur between the two. Many of you may also freelance, either full-time, part-time, or on the side. You may have left a corporate or agency job in pursuit of greater control and more freedom, or maybe you’ve never freelanced, or like me, maybe you’ve always freelanced. Regardless of your current situation I hope you’ll find something useful to take away from this as I share my experience with you. At the end of this post I offer up my advice to any struggling freelancers out there.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;First I should clarify what I mean by &amp;lt;em&amp;gt;I’ve always freelanced&amp;lt;/em&amp;gt;. This has been the case ever since I found myself, somewhat unexpectedly, working in the web industry back in 2007. I had worked for a hand full of employers prior to that, but they were in unrelated areas like retail, horticulture, and even in a lab. Before I fell in love with web technologies I was studying to be a scientist, specifically in the field of plant biology. I still try to stay current in the field, and I did ultimately graduate with degrees in biology and human biology, but about a year prior I took on my first web project, one that would set me on a new path. My friends had just started a bicycle company and were in need of a web presence. I had hacked together a site or two before this in 2000/2001 (before web standards had become wide spread), but I was turned off by all the inline font tags, table-based layouts, lack of good CSS support in browsers, and the horrible abuse of JavaScript. My friend&#39;s new company website was &amp;lt;a href=&amp;quot;http://www.onecycles.com/&amp;quot;&amp;gt;my first paid web gig&amp;lt;/a&amp;gt; and the one that ignited a new passion inside me.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Shortly after my first paid project I left my part-time job and set out to self teach myself as much as I could about HTML and CSS over the next three months. I spent the following year taking on a few more projects, adding Javascript and PHP to my tool belt, all while finishing up my last year of college and a rather large undergrad research project. In the summer of 2008 I graduated and was sent into the world to fend for myself. Rather than continue onto graduate school or take an entry level job in biology, I set out to pursue a full-time career as a freelancer. Little did I know that I was in for some challenges.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;In the beginning&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Things did not come easy at first. During my first couple years I struggled with time management, work/life balance, and had my share of failed projects and client relationships. I found myself so obsessed with productivity that I was actually spending more time trying out various management tools than I was doing actual client work. I wasn’t entirely confident with my skill level so I would price out projects based on a low hourly rate and then quote a flat rate for the project. This put me in a position of working long hours for little pay and in the end I found I was not getting a great deal of satisfaction from my work. Accepting calls from clients at all hours of the day and stringing out the length of projects to offer a false sense of job security had me questioning whether or not this freelancing thing was really for me. My health started to decline due to all the stress (I had no health insurance at the time), I started to feel isolated, and I had nothing to show for it. I knew that if I was going to survive as a freelancer, I needed to figure out how turn things around.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;Discovering my worth&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;The first step I had to take was to figure out &amp;lt;a href=&amp;quot;http://freelanceswitch.com/rates/&amp;quot;&amp;gt;what my time was worth&amp;lt;/a&amp;gt;, this included being realistic about how many billable hours I could actually fit into a day. I found out that freelancing is about more than just producing designs or writing code, I needed to handle accounting, marketing, and other business related housekeeping tasks, not to mention the daily emails that come in after you’ve worked with dozens of clients over the years. To get at my current hourly rate I worked backwards, first setting a revenue goal for the year and breaking that down into the number of days I wanted to work and the percentage of time I could invoice. About 60% of my work day is billable now, if you’re doing better than this congratulations you’re ahead of the curve. Getting my rates and time management sorted is something that just took time, I needed the experience to be able to estimate project scope and time more accurately, and gain the confidence to ask for what I was worth in return for my services. I’ve been able to double my revenue over the last two years and while I’m still not getting rich, everyday I feel like I’m moving more and more in the right direction. When it comes to matters of time and money I think Alan Weiss put it best in &amp;lt;a href=&amp;quot;http://www.amazon.com/Million-Dollar-Consulting-Alan-Weiss/dp/0071622101&amp;quot;&amp;gt;&amp;lt;em&amp;gt;Million Dollar Consulting&amp;lt;/em&amp;gt;&amp;lt;/a&amp;gt;:&amp;lt;/p&amp;gt;<br />&amp;lt;blockquote&amp;gt;<br />&amp;lt;p&amp;gt;“Wealth is not money, but discretionary time. You need to make the money necessary to have maximum discretion as to how you spend your time”&amp;lt;/p&amp;gt;<br />&amp;lt;/blockquote&amp;gt;<br />&amp;lt;h3&amp;gt;Finding my niche&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;The second step that really turned things around for me was finding my niche. I had been building websites on SilverStripe from the beginning (after a long search for a quality CMS), but I didn’t actively seek out SilverStripe related work and thus found my time spent working with other platforms like WordPress, Magento, and Drupal, at the request of clients. At the onset of 2011 I decided to focus solely on providing front-end and back-end development for SilverStripe projects. Shortly after, I organized a &amp;lt;a href=&amp;quot;http://www.meetup.com/SilverStripeMadison/&amp;quot;&amp;gt;local SilverStripe user group&amp;lt;/a&amp;gt; and started to seek out agencies that were using SilverStripe who needed help with overflow. I still work with a few of my own clients, but making the switch to working on portions of a project, as opposed to managing an entire project, has cut down on a lot of my non-billable administrative work and allows me to focus on producing quality design and code. I now have nice working relationships with a handful of agencies across the United States and I get to pair my skills up with other great designers, developers, and strategists.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;The three constraints&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;And finally, the other major step I took, or more so the final hurdle I overcame, was to improve my project management skills. Once I realized how the three constraints in project management (scope, time and cost) impacted the ultimate success of my projects, I was able to gain control of my schedule and prevent projects from going horribly awry due to scope creep, unrealistic deadlines, and other conflicts that can arise within the three constraints. Early on I had a few projects that either failed to come to completion or failed to perform post production because I tried to fulfill a clients wish list of features with whatever budget they had. I am now wiser, and instead of focusing solely on features, I start all new projects with a list of goals (both user and business goals) and figure out how best to accomplish those goals within a given budget, or in some cases, what budget I feel is required to make it a successful project. I’ve been able to steer clear of problem projects when I see that a given budget does not match up with the expected results. For me, a successful project is more than just shipping a product and getting paid for my work. I need to see that the small businesses, agencies, and non-profits that I work with are getting value from my work and in turn are achieving their goals. Forming quality long-term business relationships and seeing other businesses grow as a result of my work is how I found job satisfaction.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;Forward&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;I’ve come a long way, but I’ve still room to learn and grow. I have yet to put together a decent portfolio and should stop making excuses about doing so. I can be kind of hard on myself and keep thinking; &amp;lt;em&amp;gt;my next projects will be so much better and they will be worthy of show.&amp;lt;/em&amp;gt; I really just need to start putting myself and my work out there more. While I’m really comfortable on the front-end, I’m still working on becoming a better programmer, like getting more into test-driven development (something SilverStripe is already nicely setup for) and delving further into object-oriented programming with both Javascript and PHP. I would also like to share more. I owe much of my success to all those that I’ve learned from. Far too many to name, but from your personal blogs, to stack overflow contributors, and to all of you in the SilverStripe community, I sincerely thank you. I need to return some of that, I need to take a little extra time to write about the solutions to the problems I come across.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;Lessons Learned &amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;My advice to struggling freelancers.&amp;lt;/p&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Raise your rates.&amp;lt;/strong&amp;gt; You’re likely not charging enough. After I raised my rates I gained more respect from my clients. It also encourages me to work smarter and be held accountable for delivering something that warrants said rates. You may need to juggle several different rates as you ease existing customers into it. Be honest and upfront with them, explain why you made the change and how it servers them better. Look at other trade and professional services in your area (plumbers, electricians, computer repair, etc.), I’ve found it a good gauge for setting hourly rates for a local market.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Get out and socialize. &amp;lt;/strong&amp;gt;Let’s face it, freelancing can get lonely. Get out to conferences, they can seem a little cost prohibitive at times but the connections you make there are more than worth it. Join &amp;lt;a href=&amp;quot;http://www.meetup.com/&amp;quot;&amp;gt;Meetup.com&amp;lt;/a&amp;gt; groups, present at them, or form your own if there are none. I’ve found that one of the best ways to learn new skills is to try teaching them to someone else. You’ll quickly discover your core competencies, and see where you may need improvement. Also check your area for co-working spaces.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Specialize, but not too much.&amp;lt;/strong&amp;gt; I’ve found success in directing my efforts towards all things SilverStripe, but I also maintain a generic skill set. If you find yourself deep into one particular framework or project, don’t lose sight of the underlying technologies used in the project. For example, I work with jQuery a lot, but spend time now and then making sure I understand the abstraction and write vanilla Javascript. That is, decouple your proficiencies from the context of your tools and you’ll have a lot more job security and flexibilty.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Build long-term relationships. &amp;lt;/strong&amp;gt;Take care of your clients and they will take care of you. As a freelancer I’ve found that the majority of my work comes through direct referrals. I don’t believe in bad clients, but I do believe in bad designers and developers. Most client relation problems are the result of poor communication. It’s your job to educate the client and clearly set expectations. But yes, sometimes it just doesn’t work out, learn from your mistakes and move on.&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;Well, that’s my story (in short). Are you a freelancer? What has your experience been like? Leave a comment below or hit me up on &amp;lt;a href=&amp;quot;https://twitter.com/#!/ryanwachtl&amp;quot;&amp;gt;Twitter&amp;lt;/a&amp;gt;. If you find yourself struggling like I was, get in touch and maybe I can offer some more advice. Despite it’s hostile nature, freelancing&amp;lt;em&amp;gt; can be&amp;lt;/em&amp;gt; a very rewarding experience.&amp;lt;/p&amp;gt;</description>
			<pubDate>Wed, 08 Feb 2012 10:26:05 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/the-trials-and-tribulations-of-a-freelancer/</guid>
		</item>
		
		<item>
			<title>The Magic of Community Work</title>
			<link>http://www.silverstripe.org/the-magic-of-community-work/</link>
			<description>&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage298194-Caption.iT-Blue-Fairy-Face-in-Hole-Maker.jpg&amp;quot; width=&amp;quot;298&amp;quot; height=&amp;quot;194&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;Last week I realised that I am asking you guys quite a bit these days; more pull requests, themes, blog posts, hackfests and meetup presentations. And yeah, every once in a while there is yet another community member who is stuck and needs your help.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I can tell you are getting tired, you have a full time job where you do overtime already, a nagging wife or husband at home and the kids don’t let you sleep either. And then Schuman comes along and wants you to do yet another thing!&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;My enlightening moment came during a Twitter exchange with Ben Tucker a few days ago.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;SilverStripe @silverstripe&amp;lt;br/&amp;gt;&amp;lt;em&amp;gt;&amp;lt;a href=&amp;quot;https://twitter.com/#!/silverstripe/status/161626429342224384&amp;quot;&amp;gt;Anyone working on a theme for the contest? Anything else we can help with? What does it need to make your entry possible?#themecontest ^KS&amp;lt;/a&amp;gt;&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Ben Tucker @SticksTucker&amp;lt;br/&amp;gt;&amp;lt;em&amp;gt;&amp;lt;a href=&amp;quot;https://twitter.com/#!/SticksTucker/status/161627510776406016&amp;quot;&amp;gt;@silverstripe The contest needs to do my job, move my house, and eat and sleep for me so I can have time to put something together!#toobusy  &amp;lt;/a&amp;gt;&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;SilverStripe @silverstripe&amp;lt;br/&amp;gt;&amp;lt;em&amp;gt;&amp;lt;a href=&amp;quot;https://twitter.com/#!/silverstripe/status/161651882807410688&amp;quot;&amp;gt;@stickstucker It is a great CMS, but I am afraid it doesn&#39;t have magical powers. Wish it could be the answer to all our problems. ;) ^KS&amp;lt;/a&amp;gt;&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Ben Tucker @SticksTucker&amp;lt;br/&amp;gt;&amp;lt;em&amp;gt;&amp;lt;a href=&amp;quot;https://twitter.com/#!/SticksTucker/status/161687787400212480&amp;quot;&amp;gt;@silverstripe Fair enough. Keep those things in mind for SS4 though, yeah?&amp;lt;/a&amp;gt;&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Seriously, I wish I could do magic tricks and get an awesome CMS and Framework 3.0 out for you and solve all your private and professional issues at the same time. All that without you having to move a finger. That would be awesome! I would have a Tooth Fairy tiara, a magic stick and wings on my back.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Well unfortunately our innocent days of Fairy faith are over and we all know that whatever we want in life takes hard work to get it. Now it is all about setting priorities, because each day has only so many hours.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Investing unpaid work into open source is then often not on the top of your priority list. And I don’t blame you. You are not alone; the SilverStripe teams working here in the office have the same prioritisation issue. Paid client work versus free work for the greater good. Sounds like an easy decision when bills and employees need to get paid, right? &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;We keep hanging in there, so that SilverStripe 3.0 will see the light of day. We’ve been working on it for two years now. The babe is almost ready. It just needs to grow a little further. We believe it will maybe not change the world, but will be a massive step into the future of web development.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;SilverStripe is the tool you use daily to create the most beautiful and useful web applications. You use it every day and you know it inside out, you know its strengths and its weaknesses. You can tweak and model it and make it do whatever you want. (That’s probably more than you can say about any other partner you’ve ever had). And it needs your love to keep shining and working for and with you.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;There are a few among us who work very hard to keep this tool alive and kicking. Huge thanks to our friend from Austria; &amp;lt;a href=&amp;quot;https://github.com/Zauberfisch&amp;quot;&amp;gt;@Zauberfisch&amp;lt;/a&amp;gt;. He worked long hours in the recent weeks on a more user friendly upload control for SilverStripe 3. (@Zauberfisch; I wish I knew your name, but you have beautiful scales.)&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Here is what Zauberfisch has to say about himself:&amp;lt;/p&amp;gt;<br />&amp;lt;blockquote&amp;gt;<br />&amp;lt;p&amp;gt;I am actually an employee, but the company uses SilverStripe, and I just came to love SS, so now I spend a big part of my spare time on it. Besides the websites I build at work, and private for friends and such, I am always in #silverstripe on IRC to provide support. I helped lx-berlin with the NetefxValidator, which we now maintain together. And I am planning to do a lot more work on SS, and also modules. Coding is my work and my hobby. I guess that’s it, there is not much more I can think of right now. Oh yeah, and people can vote for me at the SS Theme Contest this weekend.&amp;lt;/p&amp;gt;<br />&amp;lt;/blockquote&amp;gt;<br />&amp;lt;p&amp;gt;Other top contributors of the last 6 months:&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/wolfv&amp;quot;&amp;gt;Wolf Vollprecht&amp;lt;/a&amp;gt;, &amp;lt;a href=&amp;quot;https://github.com/frankmullenger&amp;quot;&amp;gt;Frank Mullenger&amp;lt;/a&amp;gt;, &amp;lt;a href=&amp;quot;https://github.com/jthomerson&amp;quot;&amp;gt;Jeremy Thomerson&amp;lt;/a&amp;gt; and &amp;lt;a href=&amp;quot;https://github.com/AngryPHPNerd&amp;quot;&amp;gt;Dominik Beerbohm&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Huge thanks also to &amp;lt;a href=&amp;quot;https://github.com/willrossi&amp;quot;&amp;gt;Will Rossiter&amp;lt;/a&amp;gt; who moved on from SilverStripe as a company, but didn’t leave the tool or the community behind. He’s still a big contributor to the tool development and the community. Thanks to &amp;lt;a href=&amp;quot;https://github.com/simonwelsh&amp;quot;&amp;gt;Simon Welsh&amp;lt;/a&amp;gt; who makes great improvements on the framework and never misses a SilverStripe hackfest. Thanks to all the SilverStripe supporters helping out in the forum, the developer mailinglist, on Twitter and Facebook.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://www.ohloh.net/p/silverstripe/contributors?query=&amp;amp;amp;sort=latest_commit&amp;amp;amp;commit=Update&amp;quot;&amp;gt;More stats on the top Framework contributors and the CMS contributors.&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I am sorry if I missed anyone, you are all very important; you make the tool and the community grow and develop. And the more evangelists we have the bigger the community and the more shoulders we have to shift the work.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Don’t give up. You make it work and keep the engine running and if you are stuck then go and ask. I’ll do my best to get you help, if you haven’t find it already in this great community.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Find tickets to work on in our &amp;lt;a href=&amp;quot;http://open.silverstripe.org/&amp;quot;&amp;gt;bug tracker&amp;lt;/a&amp;gt; - &amp;lt;a href=&amp;quot;http://open.silverstripe.org/report/109&amp;quot;&amp;gt;here&#39;s a couple marked as &amp;quot;easy&amp;quot;&amp;lt;/a&amp;gt;. And check out: http://silverstripe.org/contribute/ for more ways to help out.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;In the meantime, I put my useless magic dust back into the drawer and wait for your themes, because the Theme Contest is still running!&amp;lt;/p&amp;gt;</description>
			<pubDate>Thu, 02 Feb 2012 12:21:13 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/the-magic-of-community-work/</guid>
		</item>
		
		<item>
			<title>Theme Contest: The Game Changer</title>
			<link>http://www.silverstripe.org/theme-contest-the-game-changer/</link>
			<description>&amp;lt;p&amp;gt;You should never move the goal post after the race has started, but this is an exception that should work to your advantage.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I figured that you might need more time to get a full theme up and  running. I understand that you all have a lot of other stuff on your  plate, and that it might be hard to find the time you would need to get  it done.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Unfortunately, I can’t extend the deadline any further since that  would put the entire SS3 release schedule at risk. But we&#39;ve decided to  start off with basic design submission, with your code being sent to us  within the week following. This gives you the chance to start casting  votes while you are still working on turning your design into a fully  working theme.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;So how does it work:&amp;lt;/p&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Upload your design as a screenshot now and start casting votes&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;The public voting ends 12 February 2012&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;The top 5 winners have until 19 February to send in their code to &amp;lt;a href=&amp;quot;mailto:contest@bluehousegroup.com&amp;quot;&amp;gt;contest@bluehousegroup.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;If your code isn’t in by 19 February, we&#39;ll unfortunately have to exclude you from the contest&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;We will announce the winner on 20 February 2012&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;All submitted themes that are fully developed will be part of a theme module for SS3&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;h3&amp;gt;Technical requirements&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;I know we said we didn’t want you to use Java Script, but since we&#39;ve  had quite a few people complaining about it, we&#39;ve decided that you can use  it if it helps you to build a proper theme. But please bear in mind, we encourage usability rather than flashy effects.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Please let me know if there are any further concerns.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;The prize&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;I am still reluctant to throw in cash because open source is a lot,  but not about money. So I decided to give you some sweet toys to hack and play with. And yes, in cases where you built your theme in a team, you will both get one each. (But  two is definitely the limit.) That way, you don’t have to share custody!&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;So here’s what&#39;s up for grabs, on top of the kudos from a high class panel jury and getting your name out there:&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;1st Place&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Samsung Galaxy Tab (10.1-Inch, 16 GB, Wi-Fi)&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;-Android Honeycomb 3.1&amp;lt;br/&amp;gt;-Dual Core Tegra 2 processor, 1GB RAM&amp;lt;br/&amp;gt;-Wi-FiTM, 802.11 a/b/g/n 2.4GHz, 5GHz&amp;lt;br/&amp;gt;-Memory Capacity: 16GB&amp;lt;br/&amp;gt;-Display: 10.1&amp;quot; WXGA (1280x800)&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;2nd Place&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;LEGO MINDSTORMS NXT 2.0&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;The “NXT” generation of buildable, programmable robots is here!&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;3rd - 5th Place&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;NZD $50 Apple i-Tunes voucher&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I hope that helps you get cracking and give your best for the default theme of SilverStripe 3.0. Goodluck!&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://apps.facebook.com/ss-theme-contest/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://apps.facebook.com/ss-theme-contest/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;</description>
			<pubDate>Fri, 27 Jan 2012 17:11:54 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/theme-contest-the-game-changer/</guid>
		</item>
		
		<item>
			<title>The Hidden Caveats of Working in Your Second Language</title>
			<link>http://www.silverstripe.org/the-hidden-caveats-of-working-in-your-second-language/</link>
			<description>&amp;lt;h3&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/resizedimage162238-IMG02102.jpg&amp;quot; width=&amp;quot;162&amp;quot; height=&amp;quot;238&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Guest blogger Aaron Carlino is a web developer who is better known in the SilverStripe community by his whimsical pseudonym &amp;lt;a href=&amp;quot;https://github.com/unclecheese&amp;quot;&amp;gt;Uncle Cheese&amp;lt;/a&amp;gt;. This is his second time writing as guest blogger. Prior to this, Aaron wrote &amp;lt;a href=&amp;quot;http://www.silverstripe.org/why-design-comes-first-true-confessions-of-a-guilty-coder/&amp;quot;&amp;gt;Why Design Comes First: True Confessions of a Guilty Coder&amp;lt;/a&amp;gt;.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;A Disadvantageous Advantage&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;They say it’s an English-speaking world. I disagree.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Why? For one, it’s a patently false statement. The numbers do not support the claim of an English-speaking world. Globally, English speakers are outnumbered vastly by Mandarin speakers by a margin of two-to-one. No one ever says it’s a Mandarin-speaking world, do they?&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Maybe we’ll hear more about Mandarin when the hinterlands of China are juiced with high speed Internet, and rice farmers trade in their plows for PCs, but until then, it’s hard to deny that English has a certain edge, at least in the technology-loving sectors of the globe. It would seem then, that in an English-speaking world, the native speakers of this language would be given inherent advantages. Right?&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Maybe not. I, for one, feel disadvantaged as a native English speaker. The more I work with international clients, the more I realize that the responsibility and drive to learn English is distributed inequitably across the industrialized world. In Western Europe, fluency in English is a learned skill as fundamental as penmanship. In my corner of the world, the ability to speak anything other than English is a whimsical novelty act that gets dusted off twice a year at dinner parties. This is why I feel disadvantaged as a native English speaker. I get to evade the learning process that the rest of the world has thrust upon them.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I’ve always been fascinated by multilingualism. In high school, I immersed myself in my French classes, and I got really good at it. Today, living only an hour south of Quebec, my proficiency is pretty well honed, and I’d say I’m only a month of residence in Paris away from fluency. I won’t deny that the process of learning a second language is partially driven by ego. It makes me feel like I’m repaying some sort of self-imposed debt to the rest of the world. Beyond that, though, believe it or not, it actually has some practical perks in its own right.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Just over two years ago, I received an email from an entrepreneur in France who wanted to work with a SilverStripe developer who spoke French. As it turned out, all those French posts I made in the forums would really pay off. We’ve had a great working relationship ever since. I’ve thoroughly enjoyed the opportunity to work in my second language. It stimulates a part of my brain that craves challenges and discovery.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;In the end, however, it’s still a working relationship that comes with its own needs and idiosyncrasies, and introducing a second language can be a handicap in many ways that I never could have predicted. So here is a list of caveats of working in a second language, from a native English speaker who has no business being bilingual.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;Caveat #1: You can’t be assertive&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Project managers all over the world know how important it is to have good boundaries with your client. You give a centimeter, they take a kilometer. A centimeter here, a centimeter there, and before you know it, your budget is kilometers behind you and you have a metric ton of stress weighing you down. Conversely, a little assertiveness and self-advocacy can go a long way in a client relationship. It earns you respect and makes the project more tenable and enjoyable.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;But what happens to assertion when it has to be delivered in your second language? It depends heavily on your level of fluency in the language. If your command of the language is anything short of perfect, you’re going to find yourself at a significant disadvantage.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;The brain learns language in stages. At first, we’re just cerebral dictionaries – translating one noun, verb, or adjective to another. It’s a slow, laborious process that takes up a lot of brain bandwidth. As we become more comfortable, that lookup overhead becomes less expensive, and we free up more cycles for things like sentence structure and pronunciation. We start adding some of the polish and flair to our second language, and given enough practice, we might even fool a native speaker into thinking we actually know what we’re doing.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Those stages are all about diction and mechanics. It isn’t until we have a strong command of a second language that any sort of rhetorical component can be introduced. It’s hard to express emotion in your second language when your brain is so busy just trying to keep up with the demand for real-time translations, so demonstrating assertiveness is nearly impossible unless all of the other stages have been mastered.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;What does this mean for a client relationship? Well, imagine the scenario:&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Client: I need this for tomorrow.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;What you want to say: I’m sorry, I can’t do it. That request is out of scope and we’re over budget. Can we pencil that in for phase two?&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;What you know how to say: No, I can’t do it.  It’s a bad request.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Who’s in charge, here? &amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;Caveat #2: Your intelligence is underrepresented&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Language bias is everywhere, in almost every culture. Here in the United States, non-English speakers have faced adversity for decades, and we continue to see movements to make English the national language – a motion that would be punishing to our some 45 million non-English speaking residents. But the USA does not stand alone in this category. The French, for instance, are known for an unforgiving pride in their language, and I got to experience that first hand. I don’t even want to tell you how many Parisians snubbed me at the Métro before someone finally decided my pronunciation of “carte orange” was good enough.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;We all assess one another’s intelligence based on their command of language to a certain degree. It’s natural. Language is the best sales representative we have for our intellect. If our representative doesn’t do a good job, it’s an uphill battle from there.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;President George W. Bush was routinely torched by the media for linguistic blunders that are now legendary. The overall message was that he was too intellectually bankrupt to be our president. The truth, however, is that, while Mr. Bush’s intelligence may have been lower than almost every other president, it wasn’t outlandishly low by national standards. The problem wasn’t so much his intelligence as it was the disparity between his intelligence and his aptitude for language. His inability to speak well gave the public a perception that he was much dimmer than he actually was. As we know, in this age of rich media and real-time information, perception of the truth trumps absolute truth every time.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;On the other hand, those who are adept with language are imbued with a perception of inflated intelligence. I’ve been riding that wave since I was a child. People think I’m smart because I use big words (like “imbued”), but in reality, my I.Q. and S.A.T. scores are fairly middle-of-the-road.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;When working in your second language, your intelligence sales representative is shackled by your language competency, or lack thereof, in that language.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Client: I’m concerned about CSRF attacks. What do you have in place for that?&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Your intelligence representative: You worry not. Security token great success.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;How does this client feel right now?&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;Caveat #3: “Gross” Misunderstandings&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;No matter where you are in your competency, it’s inevitable that some of the emerging idioms and slang will be missing from your second language construct, and you’ll end up saying something you really didn’t mean. This is when you just have to hope that the severity of the misunderstanding isn’t going to end the working relationship with your client, or, God forbid, start an international war. For this piece, I’ll refer to a real life example.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Last year, my French client tasked me with signing a document and returning it to him as soon as possible. He sent me a message:&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Merci de me rendre ce document dès demain soir !&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;(Please return this document to me by tomorrow night!)&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;In my head, I thought of the response, “I’ll put in my queue.” Technically, I didn’t know the French word for “queue,” but it looked fairly “French-friendly,” just based on the letters alone, and I figured it’s probably the same in both languages. So I wrote back:&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Je le mets dans ma queue!&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;(I’ll put it in my….)&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Queue? Not quite. As I learned from the inflammatory response, “queue” doesn’t translate gracefully into French. It’s actually slang for an unspeakable part of the human anatomy. When you replace the word “queue” with that word, it doesn’t sound like I’m very open to doing the task at all. In fact, it sounds like I’m refusing it in the most scathing and volatile way imaginable.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Luckily, we had been working together for a while, and we worked things out. If nothing else, I learned a new phrase, “fil d’attente”&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;(It means “queue”)&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;…I think.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;Props to the Polyglots&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Learning another language is hard – especially when you’re insulated by a world where your first language is so well tolerated and understood. Sometimes I look around at all of the English bias in the world, and I marvel at the amount of learning that needs to be done to interact with things I take for granted.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Every day developers work with PHP, Javascript, HTML, and CSS that is entirely based on English words. Every second there are Internet users in Eastern cultures typing Roman characters into their address bars. It’s fascinating to me. I’ve enjoyed learning how challenging it is to remove yourself from the comforts of your native tongue. In fact, I think I’ll write more about that tomorrow. I’ll put it in my…&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Well, you know.&amp;lt;/p&amp;gt;</description>
			<pubDate>Wed, 18 Jan 2012 12:44:16 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/the-hidden-caveats-of-working-in-your-second-language/</guid>
		</item>
		
		<item>
			<title>Content is King: Documentation for SilverStripe</title>
			<link>http://www.silverstripe.org/content-is-king-documentation-for-silverstripe/</link>
			<description>&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage208224-pkrenn.jpg&amp;quot; width=&amp;quot;208&amp;quot; height=&amp;quot;224&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;Guest blogger Philipp Krenn is one of SilverStripe&#39;s Google Summer of Code students from 2007. More recently, he has written the latest book on SilverStripe. For the upcoming 3.0 release, he will contribute to the official documentation — an area which can always do with some additional love. You can stay in touch by following &amp;lt;a href=&amp;quot;https://twitter.com/#!/xeraa&amp;quot;&amp;gt;@xeraa&amp;lt;/a&amp;gt; on Twitter.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I hope you all had some time off and enjoyed the holidays. I surely did - it was skiing time in the northern hemisphere as you can see from my photo. Now that the holidays are over, it is time time to get back to business. With all the heavy work on SilverStripe 3.0, an important part will be the documentation. Stating the obvious, I will try to elaborate a little further.&amp;lt;/p&amp;gt;<br />&amp;lt;h3/&amp;gt;<br />&amp;lt;h3&amp;gt;Back in the Day&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;I started playing around with SilverStripe in spring 2007 pretty soon after its initial release - version 2.0! Although the system had some rough edges, I liked it right from the beginning and became one of the ten &amp;lt;a href=&amp;quot;https://code.google.com/soc/&amp;quot;&amp;gt;Google Summer of Code&amp;lt;/a&amp;gt; students working on SilverStripe. For those who haven&#39;t heard of GSoC, here is a quick run-down:&amp;lt;/p&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Each year Google pays students to work on open source projects during the summer (of the northern hemisphere). This way they want to contribute back to the open source world as their systems depend on many such tools. And I would assume it is an image, and to some extent, a recruiting thing as well.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;During the first phase, open source projects apply - as did SilverStripe in 2007.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Once the participating projects have been selected, students can apply to work on specific tasks. These can either be provided by a project or students can make their own suggestions. In my case, I went through the list of participating projects and that is how I found SilverStripe. Back then only MySQL could be used so I volunteered to add support for additional databases, namely PostgreSQL and MS SQL.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;After the selection phase of students, the hacking begins under the supervision of mentors from each project. As you might have guessed, I was lucky enough to be selected. While I was not able to completely finish my effort, it has still kicked off SilverStripe&#39;s current support of multiple databases.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Once the GSoC is over, the students should have learned a lot about real world, open source software and might even stick around their project — which has worked out pretty well in my case, don&#39;t you think?&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;On a side note; due to various reasons, 2007 has been the one and only GSoC for SilverStripe. Maybe we can change that with the 3.0 release and I would be more than willing to help out with it, but that is another story.&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;As one might expect, the documentation was pretty thin as was the number of relevant hits on Google at that time. SilverStripe was brand new so this was to be expected. However, this made using it more challenging than it really needed to be. While some accepted the challenge and learned much more than by reading tutorials, many others did not and simply gave up. Obviously, documentation is essential for the success and adoption of an open source project.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;The Status so Far&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Fast forward a few years and the situation has been much improved. Besides the growing official documentation, pages like &amp;lt;a href=&amp;quot;http://www.ssbits.com/&amp;quot;&amp;gt;SSBits&amp;lt;/a&amp;gt; or &amp;lt;a href=&amp;quot;http://www.balbus.tk/&amp;quot;&amp;gt;Balbus Design&amp;lt;/a&amp;gt; provided and still provide a wealth of tips, tricks, and how-tos. Nevertheless, the situation was not too beginner friendly as you had to do a little hunting for the relevant information - piecing different examples and approaches together. So inspired by Ingo Schommer&#39;s excellent book &amp;lt;a href=&amp;quot;http://www.amazon.com/SilverStripe-Complete-Guide-Development-Wiley/dp/0470681837&amp;quot;&amp;gt;SilverStripe: The Complete Guide to CMS Development&amp;lt;/a&amp;gt;, I wrote &amp;lt;a href=&amp;quot;http://www.amazon.com/SilverStripe-Module-Extension-Themes-Widgets/dp/184951500X&amp;quot;&amp;gt;SilverStripe 2.4 Module Extension, Themes, and Widgets: Beginner&#39;s Guide&amp;lt;/a&amp;gt; just a little less than a year ago — explicitly targeting newcomers. While I hope to have helped some beginners (by the way, you can grab the code and some samples at &amp;lt;a href=&amp;quot;https://github.com/xeraa/silverstripe-book&amp;quot;&amp;gt;GitHub&amp;lt;/a&amp;gt; for free), the reach of a book is somewhat limited. People start playing around with a system, but if they get stuck (often because of missing or bad documentation) they are likely to give up before taking the next step of ordering a book and reading it. I strongly believe that we have to lower the entry barrier as much as possible.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;The Future Projection&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;For the 3.0 release I want to focus on the official documentation. It is the logical starting point for newcomers and I am a big fan of having everything in a single place. So what do I have in mind / where can you and I help:&amp;lt;/p&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Beginners are most interested in step-by-step tutorials. While there are &amp;lt;a href=&amp;quot;http://doc.silverstripe.org/sapphire/en/trunk/tutorials/&amp;quot;&amp;gt;some of those&amp;lt;/a&amp;gt;, they start showing their age and will need to be revised with the release of SilverStripe 3. However, I am not only thinking about minimal updates, but probably bigger enhancements. Should we have more tutorials, should we structure them differently, could we think of a better and continuous example project, should we add more details or remove some unnecessary ones. While I do not have any final answers yet, I am constantly looking for different ways of improvement. If you have any ideas, please share them!&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Advanced users are probably more interested in extensive descriptions of specific features, recipes, and of course the &amp;lt;a href=&amp;quot;http://api.silverstripe.org/&amp;quot;&amp;gt;API documentation&amp;lt;/a&amp;gt;. By the way, have you already seen Sam&#39;s brand new &amp;lt;a href=&amp;quot;http://doc.silverstripe.org/sapphire/en/trunk/topics/grid-field/&amp;quot;&amp;gt;GridField documentation&amp;lt;/a&amp;gt;? We need more of those complete, up-to-date descriptions, both for core features as well as upgrade instructions and other relevant areas. Think about mobile, HTML5, Ajax — have you done anything awesome and can show how this can be done in SilverStripe? Please share, add, and update!&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;So those areas are exactly where I want to get my hands dirty for the awesome (I am already sure of that!) SilverStripe 3 release.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;So much about the short term future, but what about the long run? I am confident that SilverStripe has a bright future ahead. While it is already awesome, it is getting constantly better thanks to the hard work everyone is putting into it. Additionally the SilverStripe community is very capable and active, even though it could be a little bigger. While this might not be the most sensible criterion, still many people care a great deal about the &amp;quot;size&amp;quot; of a project. So how can we foster the community, besides having a great system (keep those bug reports and patches coming)? Firstly, publicity to get attention and, secondly, shiny themes, outstanding modules and documentation (who would have guessed it). That is where everyone can get active; write about your experience with SilverStripe, document how you accomplish your tasks, publish and maintain your modules, distribute dashing themes, etc. Let all of us make SilverStripe bigger and better!&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;While we are on the subject; what do I think is the main challenge in writing good documentation? On the one hand you need to find a good example. It should be easy to understand and fit the topic well without adding anything overly obscure or ignoring some important aspect. On the other hand, it should be both complete and concise. Complete so that people can fully understand the example as well as reuse it for their real-world requirements. Concise so that the essence can be quickly understood while not over-simplifying. Once you have found a good example (I am a big fan of real-world requirements), it is &amp;quot;just&amp;quot; a matter of writing everything down clearly. That should be easy - or probably not, but once you have started others can help you.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;You are more than welcome in helping with the upcoming documentation efforts! If you are unsure where and how to start, simply get in touch with me. My email is pk@xeraa.net.&amp;lt;/p&amp;gt;</description>
			<pubDate>Mon, 16 Jan 2012 14:18:32 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/content-is-king-documentation-for-silverstripe/</guid>
		</item>
		
		<item>
			<title>The SS Theme Contest: Your opportunity to design the default theme for SilverStripe 3.0</title>
			<link>http://www.silverstripe.org/the-ss-theme-contest-your-opportunity-to-design-the-default-theme-for-silverstripe-3-0/</link>
			<description>&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;center&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600239-theme-comp03-2.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;239&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;It&#39;s Friday the 13th, time for some excitingly scary stuff, like an #SS3 design competition!&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;SilverStripe Ltd and &amp;lt;a href=&amp;quot;http://www.bluehousegroup.com/&amp;quot;&amp;gt;Bluehouse Group&amp;lt;/a&amp;gt; are proud to announce the release of the SilverStripe Theme Contest.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;If you are a web designer who is keen to see your design used by thousands of people out there and receive recognition from a high class panel jury, then you should jump on board!&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;How does that sound? Sweet as!&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;But how does it work?&amp;lt;/h3&amp;gt;<br />&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;You create a fully functioning theme based on SilverStripe 3.0 alpha 2 and submit it to our &amp;lt;a href=&amp;quot;https://apps.facebook.com/ss-theme-contest/&amp;quot;&amp;gt;Facebook application&amp;lt;/a&amp;gt;.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;You encourage all your friends and family to vote for it.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;The jury picks your theme as the winner.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Your theme becomes the new default theme for #SS3. Your name is on the installer and the bottom of the admin interface.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;You become famous. (Well, at least in the SilverStripe community!)&amp;lt;/li&amp;gt;<br />&amp;lt;/ol&amp;gt;&amp;lt;p&amp;gt;If you need help on how to build a theme on #SS3 you can check out @_UncleCheese_’s [Aaron Carlino] &amp;lt;a href=&amp;quot;http://vimeo.com/34760038&amp;quot;&amp;gt;screencast&amp;lt;/a&amp;gt;, or have a look at what Paul &amp;lt;a href=&amp;quot;https://github.com/silverstripe-themes/silverstripe-dew&amp;quot;&amp;gt;has done so far&amp;lt;/a&amp;gt; in terms of themes for #SS3.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;Who are the judges?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.plasticbag.org&amp;quot;&amp;gt;Tom Coates&amp;lt;/a&amp;gt; knows the web and is THE man when it comes to discovering web trends. Tom did product development for Yahoo, BBC Radio &amp;amp;amp; Music Interactive, UpMyStreet.com and TimeOut.com, and has written for publications such as The Guardian. He lives in SF, USA.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.eduardocesario.com/&amp;quot;&amp;gt;Eduardo Cesario&amp;lt;/a&amp;gt; is a graphic designer, photographer and professor from Buenos Aires, Argentina. In 2005, he founded his own independent project, &amp;lt;a href=&amp;quot;http://www.criaturacreativa.com/&amp;quot;&amp;gt;Criatura Creativa Studio&amp;lt;/a&amp;gt;. He has built numerous websites and themes on SilverStripe and has an extensive experience with the CMS.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Brice Dunwoodie is the founder and CEO of Simpler Media Group, Inc., the publisher of the popular &amp;lt;a href=&amp;quot;http://cmswire.com/&amp;quot;&amp;gt;CMSWire.com&amp;lt;/a&amp;gt; web magazine.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://joshuaturner.com/&amp;quot;&amp;gt;Josh Turner&amp;lt;/a&amp;gt; is currently the Art Director at Bluehouse Group in Richmond Vermont, USA. Josh has been working in web/interactive design for over 10 years.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.felipesk.com/&amp;quot;&amp;gt;Felipe Skroski&amp;lt;/a&amp;gt; is the Creative Director at SilverStripe Ltd and makes sure that only the best design comes from the house of SilverStripe. Felipe started working with the internet in 1997 at the graphic design university in Curitiba, Brazil. &amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;What’s the story behind our connection with Bluehouse Group?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;At the CMS Expo in Chicago in April last year, &amp;lt;a href=&amp;quot;http://www.silverstripe.com/about-us/team/sales-and-marketing/sigurd-magnusson/&amp;quot;&amp;gt;Sigurd Magnusson&amp;lt;/a&amp;gt; and I met with &amp;lt;a href=&amp;quot;http://www.leftandmain.com/&amp;quot;&amp;gt;Aaron Carlino&amp;lt;/a&amp;gt;, who works for the web agency Bluehouse Group.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;While talking about community involvement for #SS3, Aaron had the idea of setting up a Theme Contest. Great idea, we thought. Let’s go for it! Bluehouse Group works very professionaly and we value their work.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;quot;As a designer, I look for a syntax that jives with the presentational markup I am already familiar with, and Silverstripe has that. We thought other firms and designers should know about this too, so a theme competition seemed the most fitting way to promote it&amp;quot;.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;So there you have it. Be in to create and vote for the next default theme for #SS3. This is your time to shine with the support of field experts and the SilverStripe community!&amp;lt;/p&amp;gt;</description>
			<pubDate>Fri, 13 Jan 2012 13:58:57 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/the-ss-theme-contest-your-opportunity-to-design-the-default-theme-for-silverstripe-3-0/</guid>
		</item>
		
		<item>
			<title>SilverStripe 3.0 alpha 2 is here</title>
			<link>http://www.silverstripe.org/silverstripe-3-0-alpha-2-is-here/</link>
			<description>&amp;lt;p&amp;gt;The last step before beta; SilverStripe CMS 3.0 alpha 2 is ready to download and test. &amp;lt;br/&amp;gt;We have come a long way and we are half way there!&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;center&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600555-ss3alpha-1-edit-page.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;555&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Here is what’s new in alpha 2:&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;CMS&amp;lt;/h3&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;CMS JavaScript performance and perceived rendering improvements&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;New dedicated &amp;quot;Add page&amp;quot; interface with page type descriptions&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Improved &amp;quot;Insert Link&amp;quot; dialog with cleaner styles&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Selected tabs and collapsed panels are now stored in a Cookie for a more consistent interface when returning later to the CMS&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;h3&amp;gt;Framework&amp;lt;/h3&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Support for multi-byte page URLs (e.g. with German Umlauts). Flexible URL filtering through new URLSegmentFilter API&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Customisable HTML attributes on Form and FormField (which allows better usage of HTML5 and data attributes)&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;h3/&amp;gt;<br />&amp;lt;h3&amp;gt;ORM&amp;lt;/h3&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;New ORM has been further stabilised and API and documentation can be found at &amp;lt;a href=&amp;quot;http://doc.silverstripe.org/sapphire/en/trunk/topics/datamodel&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://doc.silverstripe.org/sapphire/en/trunk/topics/datamodel&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;h3&amp;gt;GridField&amp;lt;/h3&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;GridField has been restructured and the new API and documentation can be found at &amp;lt;a href=&amp;quot;http://doc.silverstripe.org/sapphire/en/trunk/topics/grid-field/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://doc.silverstripe.org/sapphire/en/trunk/topics/grid-field/&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;CMS Asset admin implements a GridField for viewing files and folders&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;&amp;lt;br/&amp;gt;Download the CMS and Framework &amp;lt;a href=&amp;quot;http://www.silverstripe.org/ http://www.silverstripe.org/pre-releases/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;here&amp;lt;/a&amp;gt;.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;And as a side note, 3.0 alpha 1 will be no longer available to download.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If you test it, please report any bugs you find to &amp;lt;a href=&amp;quot;http://open.silverstripe.org/ &amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;http://open.silverstripe.org/ &amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Thanks a lot to everyone who made this happen. To everyone who joined the Hackfest or submitted pull requests over the last few weeks.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;If you want to be part of 3.0 beta, join the next &amp;lt;a href=&amp;quot;http://www.silverstripe.org/ http://www.meetup.com/SilverStripe-Wellington-Meetup-Group/events/45278372/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Hackfest&amp;lt;/a&amp;gt;. Otherwise tell us what you think and feel free to help out where you can.&amp;lt;/p&amp;gt;</description>
			<pubDate>Wed, 11 Jan 2012 11:10:30 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/silverstripe-3-0-alpha-2-is-here/</guid>
		</item>
		
		<item>
			<title>Merry Christmas and Frohe Weihnachten</title>
			<link>http://www.silverstripe.org/merry-christmas-and-frohe-weihnachten/</link>
			<description>&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/Kerstin2.jpg&amp;quot; width=&amp;quot;260&amp;quot; height=&amp;quot;173&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;My first calendar year with SilverStripe is almost over and I find it hard to believe that I&#39;ve been living in New Zealand for 10 months now. This year was pretty adventurous and it was great to meet quite a few of you and to get the excitement and passion that you have about working with SilverStripe.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I learned a lot about what it means to be a developer or a designer and to work with the SilverStripe tools. I learned that good code is art and beautiful architecture is poetry. And I learned that an MVC is a Model-View-Controller and therefore has a sweet framework.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;But most of all I learnt that the SilverStripe community is small but mighty. That all of you have a lot of passion about what you are doing and that the development of this tool is just as important to you as it is to all the people working at SilverStripe.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I received some awesome blog posts and comments from you during the last months. I always found someone to show off and share their knowledge on one of our meetups, or in reply to anyone looking for help in the forum or on Twitter. I saw great new modules coming up and heaps of pull requests for SilverStripe 3.0. You guys are truly awesome. Thanks to all your contributions throughout the year, whatever they were. You keep this tool alive and maturing.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;If you work with the community you are part of the SilverStripe spirit. This spirit is alive in the SilverStripe office every day; young and very talented people with fresh ideas who want to make things happen. And I am very happy to be a part of that. It is this that truly makes my job the perfect job.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I am very much looking forward to working with all of you on new projects next year. The stable release of SilverStripe 3.0 is on the horizon, and it will come with great modules and themes, and everything will be shiny and new.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;We will have more Hackfests and hopefully grow the community and get more people hooked on SilverStripe. I will do my best to support more knowledge sharing among you, although I can&#39;t answer most of your questions myself.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Speaking of support, it is important for me to remind you, that the developers working here at SilverStripe have only very limited time to work on open source support. Every day we get heaps of emails and notes from people reaching out for help while working with the CMS or Framework. I would so much love to help each and every one of you, but the SilverStripe CMS is open source, and unfortunately we don&#39;t have the manpower or resources to help you guys the way we would love to.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;As a company, SilverStripe Ltd needs to make money somewhat; to pay the rent and the pay cheques. Right now the company does that by building websites or doing paid support. And although a few of our developers, like Ingo Schommer or Will Rossiter, volunteer a lot of their free time to helping you guys out, it is a constant battle to get enough time to keep it rockin&#39;.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;So my wish for Christmas from you is to help out and take on even more ownership. If you create a module put it out there, document it and support it within the home of the community. If there is a feature you would like to see changed, then take it on and change it. This is open source; you can make a change, it is up to you. You are the community. As I said once in a former blog post; the company holds it together, but the rest is all YOU.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;We&#39;ve got a lot to do next year. So let&#39;s pull up our sleeves and start working on it. Give it a go and be a part of our next Hackfest on 11 February, prior to the Beta 1 release.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;To boost your motivation, we&#39;ve created a contest together with &amp;lt;a href=&amp;quot;http://www.bluehousegroup.com/&amp;quot;&amp;gt;Bluehousegroup&amp;lt;/a&amp;gt;. This is gonna be all about good design and SS 3.0, and will be our late Christmas present to you early next year. This will rock, right @unclecheese?&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;But more about that after I come back from my well deserved holiday! The SilverStripe Headquarters will reopen 9 January 2012. &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Have a beautiful Christmas and a great start to 2012. See you all next year. I&#39;m counting on you!&amp;lt;/p&amp;gt;</description>
			<pubDate>Fri, 23 Dec 2011 11:10:30 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/merry-christmas-and-frohe-weihnachten/</guid>
		</item>
		
		<item>
			<title>SilverSmith: Reshaping SilverStripe Development</title>
			<link>http://www.silverstripe.org/silversmith-reshaping-silverstripe-development/</link>
			<description>&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage256164-logo.png&amp;quot; width=&amp;quot;256&amp;quot; height=&amp;quot;164&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;If you frequent any of the usual promotional channels such as &amp;lt;a href=&amp;quot;http://www.twitter.com/_unclecheese_&amp;quot;&amp;gt;Twitter&amp;lt;/a&amp;gt;, &amp;lt;a href=&amp;quot;http://www.facebook.com/pages/Uncle-Cheese/149048278456637&amp;quot;&amp;gt;Facebook&amp;lt;/a&amp;gt;, the &amp;lt;a href=&amp;quot;http://groups.google.com/group/silverstripe-dev&amp;quot;&amp;gt;SilverStripe Development mailing list&amp;lt;/a&amp;gt;, or &amp;lt;a href=&amp;quot;http://www.leftandmain.com&amp;quot;&amp;gt;LeftAndMain&amp;lt;/a&amp;gt;, you may have caught some buzz about SilverSmith; the elusive product from Uncle Cheese that promises to enhance development of SilverStripe projects. Though SilverSmith is not released yet, it is scheduled to be in early 2012. This post will discuss what to expect from the release and why you should care about SilverSmith.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;&amp;lt;strong&amp;gt;What is SilverSmith?&amp;lt;/strong&amp;gt;&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;SilverSmith is a visual project editor with a suite of tools that streamline SilverStripe development. Because the application is aware of the SilverStripe framework and understands SilverStripe design patterns, it can accomplish tasks much faster, more easily, and with less human error than a SilverStripe agnostic text editor.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600357-overview.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;357&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;The flagship feature of SilverSmith is its code generation tools, allowing a developer to loosely define the requirements of one or many page types in text format, and generate all of the necessary PHP code, database fields, and SilverStripe templates in a single click. The application also includes features to support code and templating, translations, and content, all of which will be discussed in detail later in this post.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;&amp;lt;strong&amp;gt;What &amp;lt;em&amp;gt;isn’t&amp;lt;/em&amp;gt; SilverSmith?&amp;lt;/strong&amp;gt;&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;SilverSmith is not a replacement for traditional hand-coded SilverStripe development. It cannot and will not give you the latitude to do everything you can do in a custom coding environment such a text editor. The things that it can do, however, can be accomplished much faster and more easily than in a text editor.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Every level of developer will use SilverSmith differently. Entry-level developers or designers may rely on it exclusively to build their projects, while advanced developers may use it to jumpstart their projects before jumping in and getting their hands dirty with custom code.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;&amp;lt;strong&amp;gt;Why SilverSmith?&amp;lt;/strong&amp;gt;&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;About a year ago, my team at &amp;lt;a href=&amp;quot;http://www.bluehousegroup.com&amp;quot;&amp;gt;Bluehouse Group&amp;lt;/a&amp;gt; started researching how we could use SilverStripe to create websites for a very low cost. There was a segment of the market with small budgets that we simply could not touch unless we found a way to develop more rapidly and with more agility.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;As I looked around, I found a stunning absence of third-party development tools available for SilverStripe – no TextMate bundles, no Espresso “TEA” – not even a few Coda snippets floating around somewhere.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I was inspired through my exposure to &amp;lt;a href=&amp;quot;http://www.symfony.com&amp;quot;&amp;gt;Symfony&amp;lt;/a&amp;gt; to create a project definition file based in &amp;lt;a href=&amp;quot;http://en.wikipedia.org/wiki/Yaml&amp;quot;&amp;gt;YAML&amp;lt;/a&amp;gt; that would automate a lot of the repetitive work that went into developing a SilverStripe site, such as defining the same variables over and over again and using the same naming conventions for all my PHP classes and templates.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Meanwhile, community member and fervent Uncle Cheese supporter Marcus Dalgren and I had been in discussion for a long time about developing a code generation module for SilverStripe. We had taken note of several working examples of this feature in high-profile CMS’s such as ExpressionEngine and Harmony CMS and remarked on their appeal to designers and other non-coders. We saw it as self-evident that if we could deconstruct SilverStripe’s barrier of requisite PHP proficiency, the CMS would gain exposure to a much wider body of users.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;These two endeavors were on a converging course, and met up earlier this year to form SilverSmith.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;&amp;lt;strong&amp;gt;How does the code generation work?&amp;lt;/strong&amp;gt;&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;The entire project definition is stored in a file called _project.yml. This file contains a YAML definition of all the page types and components and their associated fields and other properties. A basic site definition might look like this:&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600328-yaml.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;328&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;When the file is saved, the project definition is handed off to the coding tools in SilverSmith and the appropriate code is written to appropriate PHP files, which each have an area designated for SilverSmith generated code. The developer is free to modify any code outside of this area, but anything within it will be overwritten the next time SilverSmith saves the YAML.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600296-silversmithphp.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;296&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;&amp;lt;strong&amp;gt;So now I need to learn YAML? Why do we need another layer of code?&amp;lt;/strong&amp;gt;&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;It is not necessary to learn YAML to use the code generation tools in SilverSmith. The application includes a WYSIWYG editor that generates YAML on the fly, much in the same way a tool like TinyMCE works. The user can use a GUI to define visually what he wants, and in the background, the YAML is being created in real time.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600249-visualeditor.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;249&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Some have questioned the design pattern that puts an extra layer of code between the developer and the final product. (If you include the WYSIWYG editor, there are two new layers). This is a good question and a valid criticism. I’ll do my best to explain the distinct role and purpose of each player in the code generation process, using my favorite analogy for web development.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Imagine we are a design team planning to build a large house with several rooms. In this analogy, we have the three players:&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;The YAML&amp;lt;/strong&amp;gt; is the set of blueprints that the designer has drafted for each room. These documents tell the contractors what to build and where. They represent the medium between the designer’s vision and the installation of floorboards, ceiling tiles, and wiring, adherence to building codes, and all the other details that a building designer does not need to understand.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;The visual editor&amp;lt;/strong&amp;gt; is the software that the designer may have used to create the blueprints. If the designer is proficient in drafting blueprints, he may have elected to do this by hand, and save himself the trouble of learning a new tool.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;The PHP&amp;lt;/strong&amp;gt; is the final product – the joists, beams, pipes, and concrete that make the structure a functional building. The contractors have looked at the blueprints and interpreted them to build this house using the techniques that they see fit. A different set of contractors may use a different set of techniques to build the same concept, but the final product is always in alignment with the designer’s vision.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;My philosophy professor in college once told me that analogy is the worst form of argument, so lest I’ve lost all of you in my meandering illustration, the point is this:&amp;lt;/p&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;YAML represents an idea&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;PHP represents the way that the idea comes to life&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;PHP can be employed an infinite number of ways to realise the same idea&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;Through the YAML layer, we gain more flexibility and agility because we are free to reinterpret the same idea at any time using different coding techniques to achieve a new product that aligns with the idea.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;&amp;lt;strong&amp;gt;Is SilverSmith a SilverStripe module, or is it a native OSX/Windows app?&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Both.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;SilverSmith is written entirely in HTML/CSS/JS. Because it uses the SilverStripe Framework as its platform, it is necessary to install it as a module on each website that will use the application. You might imagine that this will get tedious for many reasons. For one, it’s annoying to have to remember to not only install, but also maintain a copy of a module for every single site on your computer. Second, accessing a special URL for every project you want to edit creates a tab jungle in your browser.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;To that end, SilverSmith will offer a licensed version that is bundled as a native OSX and Windows app that will handle all of the updates and installation automatically and work on multiple projects at once. Further, it will support native OS menus and file system management, which are beyond the capabilities of traditional web applications.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;&amp;lt;strong&amp;gt;What other features can I expect from SilverSmith?&amp;lt;/strong&amp;gt;&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Here are the main features scheduled for the first release of SilverSmith:&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Project Builder:&amp;lt;/strong&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600277-projectbuilder_2.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;277&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;The code generation tool that supports both visual and YAML views to create the project definition.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Code Editor:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600261-codeeditor_2.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;261&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Edits PHP code directly &amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Supports snippets and utilities for creating common functions &amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Checks PHP syntax before saving&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Template Editor:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600350-templateeditor_2.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;350&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Edits SilverStripe templates directly. &amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Supports snippets and utilities for if/else blocks, control blocks, and more. &amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;The “auto-populate” utility fills a template with example syntax based on all of the custom fields and relations defined in the page type. &amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;A scope indicator tells the user what variables and/or controls are available based on the current position of the cursor.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;An image browser, based on the &amp;lt;a href=&amp;quot;http://www.leftandmain.com/silverstripe-screencasts/2011/08/25/introducing-kickassets-give-assetadmin-the-boot/&amp;quot;&amp;gt;KickAssets module&amp;lt;/a&amp;gt; allows file management and insertion of images into a template. &amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;The “send to include” utility creates an include file from the selected text and replaces it with the appropriate syntax to call the include.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Checks SilverStripe template syntax before saving.&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Template Genius&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600231-templategenius_2.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;231&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Creates YAML for the project editor by “reverse engineering” the syntax of a template.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Allows designers to create a template without writing any PHP or YAML&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Translations Editor:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600258-translationseditor_2.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;258&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Provides a GUI interface for editing translations, ported from the &amp;lt;a href=&amp;quot;http://www.leftandmain.com/silverstripe-modules/2011/05/13/langeditor/&amp;quot;&amp;gt;LangEditor module&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Allows one-click insertions to the language file from the CodeEditor and TemplateEditor components. Just highlight text, click “translate,” and the translation tag and appropriate entry is made to the language file.&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Content Editor:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600331-contenteditor.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;331&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Builds the architecture of your website in the site tree based on simple text input.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Creates new page types on the fly.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;Inserts placeholder content using Lorem Ipsum, generic images and documents, and other randomly generated values to create a fully populated website in seconds.&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;h3&amp;gt;&amp;lt;strong&amp;gt;Where can I learn more?&amp;lt;/strong&amp;gt;&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;I have published multiple screencasts and &amp;lt;a href=&amp;quot;http://www.leftandmain.com/category/silversmith-2/&amp;quot;&amp;gt;updates&amp;lt;/a&amp;gt; at my blog, &amp;lt;a href=&amp;quot;http://www.leftandmain.com/&amp;quot;&amp;gt;LeftAndMain&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;You can also sign up for the SilverSmith newsletter at the official SilverSmith website, &amp;lt;a href=&amp;quot;http://www.silversmithproject.com&amp;quot;&amp;gt;www.silversmithproject.com&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;&amp;lt;strong&amp;gt;How can I become a beta tester?&amp;lt;/strong&amp;gt;&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Beta testers will be selected randomly, in small groups, and given specific features to test. As the early deluge of bugs becomes more manageable, larger groups will be invited until we have an RC1. If you would like to become a beta tester, I will prefer those who have &amp;lt;a href=&amp;quot;http://www.leftandmain.com&amp;quot;&amp;gt;donated&amp;lt;/a&amp;gt; to the project first.&amp;lt;/p&amp;gt;</description>
			<pubDate>Wed, 21 Dec 2011 11:29:24 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/silversmith-reshaping-silverstripe-development/</guid>
		</item>
		
		<item>
			<title>Speeding up SilverStripe with the Configuration System</title>
			<link>http://www.silverstripe.org/speeding-up-silverstripe-with-the-configuration-system/</link>
			<description>&amp;lt;p&amp;gt;One of our focuses in SS3 has been to improve on performance. All frameworks have to maintain a balance between features and performance, and generally SilverStripe has done that pretty well. In SS3 we haven&#39;t looked to adjust that balance, but instead looked at the features that cause the biggest performance issues, and see what we can do to refactor them so that we provide the same functionality in a more efficient manner.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Since I&#39;m working on the configuration system this week to do just that, I thought it would be appropriate to talk a bit about it, to give you an idea about how we tackle the task of keeping or improving the feature set while still improving performance. Hold on, because this is likely to get a little technical.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;The SilverStripe Framework provides a lot of tools for developers to enable developing sites easier, but a cost of that is that there is a lot of work the framework does before user code is called in order to set these tools up. Though we made improvements between 2.3 and 2.4, there can still be up to an 80ms delay between a request being received by the server and the framework handing control over to user code to respond. On high traffic sites, this adds up. It also means that low-latency controllers - such as auto-complete ajax handlers - have to be carefully written to be sufficiently fast.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;One of the biggest offenders remaining in this startup code is the setting of configuration values. In 2.4, each module can provide a special piece of code, called _config.php, which is executed on every request in order to set up configuration. This has several disadvantages:&amp;lt;/p&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Each of these files executes every request, so a performance issue in any _config.php file affects every request&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Much of the configuration set in this way isn&#39;t used for the current request, but they all get set anyway. Not only does this take time, it also causes all the code for all those features that configuration is set for to be included - which takes time and increases our memory usage.&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Because these _config.php files can perform any operation, they are uncache-able&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;There&#39;s no way to set the order the _config.php files are executed in, making overriding configuration in other modules impossible.&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;However there is one significant advantage to the current approach that we didn&#39;t want to eliminate:&amp;lt;/p&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Configuration can be complex and intelligent, setting various configuration settings after probing the environment the code is executing on to determine the best value.&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;Because of all these issues, SS3 will include a complete configuration management API. Legacy _config.php files can continue to be used, but their use is deprecated for any configuration that can be done through a new system which uses several YAML files stored in a specially named _config directory. &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Each YAML file contains a sequence of header and configuration blocks. The header blocks can specify whether the following configuration block should be included based on several environmental checks, and also the order of the inclusion of configuration blocks. The configuration blocks specify the various configuration parameters for the classes in the framework. These configuration values are stored in a &amp;quot;Configuration&amp;quot; object rather than in the classes they are for, which means that setting configuration can happen without having to include the configured class&#39;s code.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;As a result we solve all the issues above while still maintaining all the features that are present in 2.4. We also do so in a manner that significant improves startup performance.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Some examples will help illustrate the concepts.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;In 2.4 system, because _config.php inclusion order is uncontrolled, when adding Routes (maps between URLs and the code that responds to those URLs) the system offers a method that takes a set of routes and an integer &amp;quot;priority&amp;quot; - the higher the priority, the more important the rule. Here are the portions of the cms and framework _config.php that configure these routes:&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;<br />&amp;lt;script src=&amp;quot;https://gist.github.com/1478872.js&amp;quot;&amp;gt;&amp;lt;![CDATA[&amp;lt;![CDATA[&amp;lt;![CDATA[&amp;lt;![CDATA[// &amp;lt;![CDATA[<br />[CDATA[&amp;lt;![CDATA[// &amp;lt;![CDATA[<br />[CDATA[&amp;lt;![CDATA[ ]]]]&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]&amp;lt;![CDATA[&amp;gt;<br />// ]]]]]]&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]]]&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]&amp;lt;![CDATA[&amp;gt;<br />// ]]]]]]]]]]&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]]]]]]]&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]]]]]&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]]]&amp;gt;&amp;lt;![CDATA[&amp;gt;]]&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Not only does this call to addRules slow down startup, but reading those two files it&#39;s very hard to tell which rule would &amp;quot;win&amp;quot; in the case of a conflict.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Let&#39;s compare this to the same configuration in SS3.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;<br />&amp;lt;script src=&amp;quot;https://gist.github.com/1478876.js&amp;quot;&amp;gt;&amp;lt;![CDATA[&amp;lt;![CDATA[&amp;lt;![CDATA[&amp;lt;![CDATA[// &amp;lt;![CDATA[<br />&amp;lt;![CDATA[&amp;lt;![CDATA[// &amp;lt;![CDATA[<br />&amp;lt;![CDATA[&amp;lt;![CDATA[ ]]]]&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]]][CDATA[<br />// --&amp;amp;gt;<br />// ]]]]]]&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]]]&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]&amp;lt;![CDATA[&amp;gt;<br />// ]]]]]]]]]]&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]]]]]]]&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]]]]]&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]]]&amp;gt;&amp;lt;![CDATA[&amp;gt;]]&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;It&#39;s immediately clear when looking at cms/_config/routes.yml that it overrides the settings in framework/_config/routes.yml&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;As an extension - what happens if we only want the admin/security area to be configured if the cms module isn&#39;t installed? For example, if the security admin in framework was bare-bones and the cms module provided a more fully featured version?&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Then we could replace that second config file with&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;<br />&amp;lt;script src=&amp;quot;https://gist.github.com/1478995.js&amp;quot;&amp;gt;&amp;lt;![CDATA[&amp;lt;![CDATA[&amp;lt;![CDATA[&amp;lt;![CDATA[// &amp;lt;![CDATA[<br />&amp;lt;![CDATA[&amp;lt;![CDATA[ ]]]]&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]]][CDATA[<br />// --&amp;amp;gt;]]]]]]]]]]&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]]]]]]]&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]]]]]&amp;gt;&amp;lt;![CDATA[&amp;gt;&amp;lt;![CDATA[&amp;gt;]]]]&amp;gt;&amp;lt;![CDATA[&amp;gt;]]&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;As a result of this new system we can still manage configuration in SS3 with as much (in fact, more) control and fluency as in 2.4, but we&#39;ve managed to improve the start up speed. The system remains backwards-compatible for those migrating 2.4 applications, but similarly to the new DataList API, by putting a bit of effort into porting the configuration of a site to this new system, the developer will see immediate benefits.&amp;lt;/p&amp;gt;</description>
			<pubDate>Wed, 14 Dec 2011 12:34:59 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/speeding-up-silverstripe-with-the-configuration-system/</guid>
		</item>
		
		<item>
			<title>SilverStripe can change your life</title>
			<link>http://www.silverstripe.org/silverstripe-can-change-your-life/</link>
			<description>&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage234268-Screen-shot-2011-12-07-at-5.17.44-PM.png&amp;quot; width=&amp;quot;234&amp;quot; height=&amp;quot;268&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;Colin Burns is a digital nomad and respected SilverStripe community member, who travels the world while making a living out of building websites and web projects using SilverStripe. Colin is originally from Australia and now travels the world with his wife and two children.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;You&#39;ll have to let me indulge a little in this blog post to first explain how SilverStripe has changed my family&#39;s life. I would like to provide you with some background before I get to the crux of the story.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;In 2002 I started a small web design company in Brisbane, Australia and built a multi-site CMS designed specifically for web and graphic design companies to resell to their clients. Although I had the best intentions for my business, I was never able to get it much larger than two employees. Even then, the profit margins were too thin to be sustainable. By 2008 I had worked extremely hard for six years in my business and, all too common for small web businesses, I spent more time putting out other people&#39;s fires than working on my business.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;In the middle of 2008 I began talks with a much larger firm about an acquisition. They liked the software I had built and they were trying to become more product oriented. We came to terms and I started working for them on finalising and marketing the CMS that I had built.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;A little over 18 months later the code base was showing its age and the marketing just wasn&#39;t gaining momentum. I left the company and got back into the freelancing arena, a difficult decision after investing so much time and money into my CMS over the years.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;Difficult decisions beget fabulous opportunities&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;After working for a larger web development firm, I realised that as a small business I was charging entirely too little to be able to cover costs and become profitable. So my first change was to become a little more arrogant. Rather than basically begging people to give me their work, I gave them a quote for what I thought my time was worth. They could then take it or leave it. &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;A couple of days after leaving my CMS behind, I had signed almost $25K in work. And instead of $25K worth of work being for 8-10 different projects (which would have been the case pre-2008), it was now only two, albeit reasonably large, projects. &amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;The search for a new CMS&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Now that I no longer owned the IP to the CMS I had built, I needed to find a new CMS to built my new projects on. I was 100% certain from the outset that I would not be using Joomla, Drupal or Wordpress (for a variety of reasons of which I am sure you are all painfully aware), and started investigating some other CMS&#39;s and Frameworks, like ExpressionEngine and CakePHP. I really liked the look of ExpressionEngine, although at the time it was pre version 2 and I thought it had some user interface issues. The other problem I had was I didn&#39;t want to use a blogging platform that needed to be hacked significantly to get it to do basic page functionality like most of my previous clients had needed. &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;That&#39;s when I discovered SilverStripe.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;To tell you the truth, it really was the interface that sold me. I knew straight away that my clients would find it intuitive and would be able to make the required changes to their site without too much training or handholding.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;So how did SilverStripe help me change my life?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;For almost two years now I have been travelling the world with my wife and two young children. We are currently in London and in one weeks time we fly to Macedonia to spend three months exploring Eastern Europe, before returning to Penang, Malaysia where we have set up a base. Late next year or early 2013, we plan to head to North America and travel around in a motorhome for a year or so.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;A lot of this is due to the decision I made to use SilverStripe as my CMS. The sites I have been building are significantly more robust than the sites I used to produce, which mean much less maintenance and much more profit from each job. It means that I get to spend more time with my children and more time building new projects for myself, with the view to pursue them full-time in the next 12 months, rather than to continue building projects for other companies.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I currently own three websites from which we plan to make our longer-term living. The initial blog that we started when we first started our trip in January 2010 (&amp;lt;a href=&amp;quot;http://ourtravellifestyle.com&amp;quot;&amp;gt;http://ourtravellifestyle.com&amp;lt;/a&amp;gt;) was originally built in Wordpress, but about two months ago I migrated it to SilverStripe using @ajshort&#39;s [&amp;lt;a href=&amp;quot;https://github.com/ajshort&amp;quot;&amp;gt;https://github.com/ajshort&amp;lt;/a&amp;gt;] WordpressConnector module [&amp;lt;a href=&amp;quot;https://github.com/ajshort/silverstripe-wordpressconnector&amp;quot;&amp;gt;https://github.com/ajshort/silverstripe-wordpressconnector&amp;lt;/a&amp;gt;]. After a little bit of configuring and then a couple of hacks to bring in the email addresses from my Wordpress comments table life was great. I love the fact that I now have the freedom to build in new functionality that was just too much hassle or a pain in the butt to build in Wordpress. &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Our second site is &amp;lt;a href=&amp;quot;http://www.vagabondfamily.org/&amp;quot;&amp;gt;VagabondFamily.org&amp;lt;/a&amp;gt;; a community site for long-term travelling families (and surprisingly there are 100&#39;s of us out there). Again thanks to a number of different people I have been able to build some pretty cool functionality on this site, including the ability for a specific family to update their location (and map it) on their profile by simply sending a tweet. Check out this page [&amp;lt;a href=&amp;quot;http://www.vagabondfamily.org/blog/travel-news/find-other-travelling-families-with-vagabond-family/&amp;quot;&amp;gt;http://www.vagabondfamily.org/blog/travel-news/find-other-travelling-families-with-vagabond-family/&amp;lt;/a&amp;gt;] on the site if you want to see an example - again this is based on a module by @ajshort. Over the next few weeks I am going to be rolling out a &amp;quot;Yahoo Answers&amp;quot; style clone on &amp;lt;a href=&amp;quot;http://vagabondfamily.org&amp;quot;&amp;gt;VagabondFamily.org&amp;lt;/a&amp;gt;&amp;lt;a href=&amp;quot;http://vagabondfamily.org&amp;quot;&amp;gt; &amp;lt;/a&amp;gt; to give travelling families the opportunity to ask anyone and everyone in our community a question.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I recently purchased my third website called &amp;lt;a href=&amp;quot;http://nunomad.com&amp;quot;&amp;gt;nunomad.com&amp;lt;/a&amp;gt; which is a site that helps people to become &#39;location independent&#39; or to become a &#39;digital nomad&#39;. Over the next six months I will hopefully be completely re-designing this and bringing it into SilverStripe to allow me the flexibility to add functionality that the community needs and wants.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;SilverStripe changed the way that I build and think about websites. Rather than spending most of my time fixing bugs, I now spend most of my work time either dreaming up new things to build for myself or getting paid by my clients. Finding SilverStripe has allowed me to shape my life the way I want it. Less time spent working, more time spent with my family doing things we love, like travel.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Life is full of opportunities, and it is about seeing something as an opportunity and acting on it.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Thank you to all of the SilverStripe community, from the core developers, module developers and the people answering questions in the forums. In your own way, you have helped me, and anyone else who chooses, to change their lives.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;*When time permits I am going to try and release the code for the Current Locations and the Question and Answers as modules, but in the meantime if you would like the code, feel free to just shoot me an email at &amp;lt;a href=&amp;quot;mailto:ccburns@gmail.com&amp;quot;&amp;gt;ccburns@gmail.com&amp;lt;/a&amp;gt;. I would be happy to share it with you.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;</description>
			<pubDate>Wed, 07 Dec 2011 12:15:34 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/silverstripe-can-change-your-life/</guid>
		</item>
		
		<item>
			<title>The fine print of building your business with SilverStripe</title>
			<link>http://www.silverstripe.org/the-fine-print-of-building-your-business-with-silverstripe/</link>
			<description>&amp;lt;p&amp;gt;A lot of people use the SilverStripe suite to build awesome web solutions for themselves or their clients. SilverStripe is very proud of the many beautiful websites, applications, modules and themes that you build with the CMS and the Framework. We know that you put a lot of hard work and passion into building these things, so I guess it is just a natural transgression to turn this effort into a business and to actually start making money from it.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;The SilverStripe suite is running under a BSD licence, which means that every developer/designer owns the right to their code and can sell it if they wish to. That makes setting up a business much easier for SilverStripe users.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;In the past seven months, since I started working for SilverStripe Ltd, I received quite a few emails from people who wanted to use the SilverStripe brand to promote their business. As a &amp;lt;a href=&amp;quot;http://www.silverstripe.com/about-us/team/sales-and-marketing/kerstin-schuman/&amp;quot;&amp;gt;Marketing Manager&amp;lt;/a&amp;gt; coming from the corporate world, I was reluctant to the idea of other businesses using the SilverStripe brand. The brand is every company&#39;s highest asset and usually receives a lot of protection.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;After working with SilverStripe, I quickly learnt that the highest value is the community and that open-source is about sharing rather than protecting, because sharing means growing; growing the passion for the product and growing the product itself.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;If you want to grow with SilverStripe and start building your business on it then we encourage that. Because the more usage and improvement the tools get, the better they become. Using the tools for business purpose means spreading the word about the CMS and the Framework.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Speaking of this, I am happy if you want to associate your business with SilverStripe, as long as you stick to a couple of golden rules:&amp;lt;/p&amp;gt;<br />&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;You may not use the word ‘SilverStripe’ in your business name. ‘SilverStripe’ is a trademark and as such is protected from the use of others.&amp;lt;/li&amp;gt;<br />&amp;lt;li&amp;gt;The same goes for the logo. If you create a logo for your business, please stay away from using the SilverStripe logo or part thereof as your own.&amp;lt;/li&amp;gt;<br />&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;Examples of community members who have made a great connection to the SilverStripe brand:&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://stripetheweb.co/&amp;quot;&amp;gt;http://stripetheweb.co/&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;a href=&amp;quot;http://www.silversmithproject.com/&amp;quot;&amp;gt;http://www.silversmithproject.com/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;If you don’t adhere to these rules, SilverStripe Ltd is immediately associated with your work and unfortunately we can’t take responsibility or moderate the work that you are doing. On the other hand, you might want to create your own reputation and get acknowledgement for your work, rather than handing this to someone else.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;For future reference, you can find the rules above as being part of the &amp;lt;a href=&amp;quot;http://www.silverstripe.com/press/media-assets/&amp;quot;&amp;gt;media assets&amp;lt;/a&amp;gt; page on &amp;lt;a href=&amp;quot;http://www.silverstripe.com&amp;quot;&amp;gt;silverstripe.com&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;If you have any questions or feedback, or if you are uncertain about how to approach the naming of your business, please feel free to drop me an email at &amp;lt;a href=&amp;quot;mailto:kerstin@silverstripe.com&amp;quot;&amp;gt;kerstin@silverstripe.com&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;</description>
			<pubDate>Wed, 30 Nov 2011 12:07:29 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/the-fine-print-of-building-your-business-with-silverstripe/</guid>
		</item>
		
		<item>
			<title>The 3.0 UI: A better framework for your ideas</title>
			<link>http://www.silverstripe.org/the-3-0-ui-a-better-framework-for-your-ideas/</link>
			<description>&amp;lt;p&amp;gt;SilverStripe has always regarded the CMS as a natural extension of its framework, enabling developers to tailor it to the needs of website authors. You can add form fields, customise the behaviour of the WYSIWYG editor, add custom icons for the page tree, as well as create completely new sections via the ModelAdmin class. On the other hand, deeper interface customisations were hard to achieve due to the complexity of the code behind it. The 3.0 release provides us with a rare opportunity to consolidate and simplify here. &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;The CMS is built using most of the tools and techniques SilverStripe developers are already familiar with when creating websites with the framework; object-oriented controllers and utility classes like CMSMenu, templates which inherit based on PHP classes, and the Form/FormField APIs. This symmetry is important to us, and the reason we decided against using full-fledged JavaScript frameworks which would define all of this on the client. Instead we’re relying on a base set of common tools such as jQuery and jQuery UI, coupled with the principles of ‘progressive enhancement’.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Behind the scenes, we’ve rewritten pretty much all JavaScript powering the CMS, in a library called &amp;lt;a href=&amp;quot;https://github.com/hafriedlander/jquery.entwine&amp;quot;&amp;gt;jQuery.entwine&amp;lt;/a&amp;gt;. This rewrite allows us to structure larger applications like the CMS in a meaningful way, by using an inheritance structure based on CSS selectors, and exposing functionality via methods on the DOM elements. As an example, you could “subclass” the JavaScript responsible for rendering the CMS menu items, and get it to show a badge of unpublished pages automatically. And as we’re increasingly relying on custom JavaScript events, you could keep the badge updated on a form submission event. &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Overall, we’re using fewer external JavaScript libraries and try to select them based on the principles guiding jQuery UI. The new layout engine (&amp;lt;a href=&amp;quot;http://www.bramstein.com/projects/jlayout/jquery-plugin.html&amp;quot;&amp;gt;jLayout&amp;lt;/a&amp;gt;) is a good example of this; panels and their alignments are defined through CSS classes and HTML5 data attributes, rather than explicit JavaScript calls. This makes it easier to add new panels simply by overloading a SilverStripe template. We demonstrate this in a short &amp;lt;a href=&amp;quot;http://doc.silverstripe.org/sapphire/en/trunk/howto/extend-cms-interface&amp;quot;&amp;gt;howto&amp;lt;/a&amp;gt; on creating a “bookmarks toolbar” in the CMS, allowing quick access to the CMS views of often edited pages. &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;The CMS style-sheets were also written from scratch, with a keen eye on limiting scope and creating isolated styling components and a consistent naming structure. In version 2.4 of the CMS it can be difficult to overload styles in a way that doesn’t have side effects, for example, changing the form label alignment to allow for more editing space. Thanks to the power of CSS3, there are fewer hacks necessary to achieve these effects. In addition to simply having fewer lines of style-sheet declarations, the &amp;lt;a href=&amp;quot;http://sass-lang.com/&amp;quot;&amp;gt;SCSS language extensions&amp;lt;/a&amp;gt; to CSS3 helped us to organise it in a way fitting to the needs of a large web application.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;As with the previous discussions about the 3.0 design, we’re also looking for feedback on the way we’ve put the UI together technically. Particularly if you’ve extended the CMS in any way before, either as a module or custom code, we’re interested to hear your thoughts on the new directions and possibilities over on the &amp;lt;a href=&amp;quot;http://groups.google.com/group/silverstripe-dev&amp;quot;&amp;gt;silverstripe-dev mailing list&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;</description>
			<pubDate>Wed, 23 Nov 2011 12:20:32 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/the-3-0-ui-a-better-framework-for-your-ideas/</guid>
		</item>
		
		<item>
			<title>Core Developer Ingo Schommer sees SilverStripe Maturing</title>
			<link>http://www.silverstripe.org/core-developer-ingo-schommer-sees-silverstripe-maturing/</link>
			<description>&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/ingo2.jpg&amp;quot; width=&amp;quot;274&amp;quot; height=&amp;quot;182&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;Today I virtually met with 29-year-old German Senior Developer &amp;lt;a href=&amp;quot;http://www.silverstripe.com/about-us/team/development/ingo-schommer/&amp;quot;&amp;gt;Ingo Schommer&amp;lt;/a&amp;gt;, who is an icon in the SilverStripe community. He is the person that bundles a lot of the community’s contributions and feeds it back into the core. @Brooke Penny says; every time she hears his name she thinks of David Schwimmer from Friends. (Apparently Ingo even resembles him, except for the fact that Ingo hasn’t had a nose job). &amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;In his free time Ingo loves to work on documentation for SilverStripe which eventually resulted in a &amp;lt;a href=&amp;quot;http://www.silverstripe.org/silverstripe-book/&amp;quot;&amp;gt;book&amp;lt;/a&amp;gt;. He also has the most impressive 80’s pop music collection in his iTunes library. Going back in time also meant moving to Germany a few months ago. Due to the time difference between NZ and DE, he now works crazy hours remotely for SilverStripe. Please send this poor guy some ‘Flat Whites’ if you can. (‘Flat Whites’ are the NZ coffee specialty. Caution: Addiction guaranteed!)&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;When did you start working with and for SilverStripe?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;In the summer of 2005, when SilverStripe only had a handful of employees. Small enough to make toasties for everybody at lunch time, even!&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;What did you do before you came to SilverStripe?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;I lost my computer virginity on a 286 with MS DOS, so you could call me a late bloomer. During school I founded a school magazine with a bunch of friends. Print layout and web design instead of programming, but in the end I think that I did it mainly to work in a great team. During my studies at FH Darmstadt, I was a typical web freelancer, and my attention shifted to more towards front-end and back-end architecture, and delivering a valuable end product to my clients (mostly in Typo3). My thesis was researching, designing and implementing a RSS reader with collaborative filtering, which was developed in the CakePHP framework (and even had a mobile design that worked on early “smart phones”).&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;How did you make it all the way from Germany to New Zealand?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;By plane! OK, my jokes aren’t nearly as funny as Hamish’s. Being the orderly German that I am, I made a top 10 list of companies in NZ that I wanted to work for, and SilverStripe was right at the top. We turned out to be a perfect match, and I’ve gained many friends from working there. Heck, nearly all my friends in NZ are somehow connected to SilverStripe, it&#39;s a small place.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;Why New Zealand in the first place?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Hmm, I’d like to call it careful planning and fate, but in the end it  was mostly because I was too lazy to learn a new language, and loved  the Kiwi attitude.&amp;lt;/p&amp;gt;<br />&amp;lt;h3/&amp;gt;<br />&amp;lt;h3&amp;gt;Now you are back in Germany. How do you like it?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Personally, it&#39;s been a positive challenge, and great to meet many old and new friends. Professionally, I’m still working with SilverStripe Ltd., just at odd times of the day. I’m drinking a lot more tea now, as the coffee in Germany doesn’t really deserve its name once you’re used to Wellington.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;The SilverStripe CMS is quite popular in Germany. Why do you think that is?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;SilverStripe had press publications (and the first book!) in Germany pretty much before any other country, which illustrates how vibrant and open that market is. I think developers here have a high interest to “do things properly”, so they naturally look for a CMS which has a solid base, and an appreciation for common software design principles. There’s not yet the same sense of community here that you can see for example in the UK (specifically London), but we’re looking into getting more meet-ups going. Dedicated individuals like the folks at &amp;lt;a href=&amp;quot;http://www.silvercart.org/&amp;quot;&amp;gt;SilverCart&amp;lt;/a&amp;gt; are very important for spreading the word in Germany.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;What do you like about the CMS and Framework and what do you think could be improved?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;I like how it elegantly weaves content management aspects into a solid framework base, without compromising either the user or developer experience. It&#39;s hard to find both in one consistent package, even beyond the PHP world. That’s only possible because of the “getting things done” spirit that’s both a principle of the core team, and popular within the tight-knit and responsive community. There’s so many potential construction sites, it&#39;s hard to pick a single thing to highlight for improvement. Overall, I’m hoping to replace more internal aspects with third party components, so the core team can focus on improving those parts of the framework that make us competitive.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;You are quite an icon within the community. What do you like about working with the community?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;The community is what keeps me going. I’m addicted to checking Twitter mentions about SilverStripe. Particularly through the boring bits like preparing a release, it&#39;s rewarding to see retweets and feedback coming in. The relatively small size of the community means that people know each other, and have most likely had a beer together at some point. That’s fantastic!&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;With SilverStripe 3 you had a big job separating the Framework from the CMS. Why did you think that was an important thing to do?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;That’s more of a long-term shift which was started by, simply speaking, moving a bunch of files from one module to another. But conceptually it puts more of a spotlight on the framework itself, and its capabilities beyond whats traditionally considered “content management”. The interesting bit is that we shifted the usual dividing line; we see the framework as a complete toolkit for creating awesome web applications, including the same interfaces you’re used to from SilverStripe CMS. That’s what sets it apart from other PHP frameworks.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;What do you think we can expect from SilverStripe in the next couple of years?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;I believe we’ll see the ecosystem around SilverStripe maturing, with a higher amount of professionally maintained modules, but also a more diverse group of core developers to keep the product alive and fresh. In terms of framework, paradigms introduced to SilverStripe like Dependency Injection should find a wider acceptance, making everybody more efficient through a more powerful and customisable core product. I hope that we continue the raised focus on user experience that we’ve begun with the SilverStripe 3 concept designs. Felipe’s definitely got enough awesome ideas to keep us busy implementing them for a while!&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;As you can see Ingo is still attached to his first love 286. I suppose that goes well with the 80’s music.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/ssgermany.jpg&amp;quot; width=&amp;quot;530&amp;quot; height=&amp;quot;402&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;NB: Photograph retouched to modify the physical appearance of a person.&amp;lt;/p&amp;gt;</description>
			<pubDate>Wed, 16 Nov 2011 14:42:00 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/core-developer-ingo-schommer-sees-silverstripe-maturing/</guid>
		</item>
		
		<item>
			<title>SilverStripe 3’s new ORM</title>
			<link>http://www.silverstripe.org/silverstripe-3-s-new-orm/</link>
			<description>&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/Sam6.jpg&amp;quot; width=&amp;quot;260&amp;quot; height=&amp;quot;173&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;em&amp;gt;Sam Minnée, Chief Executive Officer and co-founder of SilverStripe, has shaped the SilverStripe Suite and is part of its success story as an internationally respected Open Source CMS.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;One of the parts of SilverStripe 3 that I was most heavily involved with was the development of the new ORM. ORM stands for “Object-relational mapper” and it’s the part of the system that turns your DataObject::get() calls into SQL queries, and constructs relevant DataObjects with the results. In other words, it maps our PHP objects to a relational database for storage.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;The biggest change we’ve made to the ORM in SilverStripe 3 is how it fetches sets of records.  In SilverStripe 2, if you wanted to query some fields you would call this:&amp;lt;/p&amp;gt;<br />&amp;lt;pre&amp;gt;$pages = DataObject::get(‘SiteTree’, ‘“ParentID” = 5’);&amp;lt;/pre&amp;gt;<br />&amp;lt;p&amp;gt;The query would be executed straight away.  On the face of it, this might not be such a problem, and for simple cases it works okay.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;But what about if I just want to get the number of records that match that query? Maybe I would call this: &amp;lt;/p&amp;gt;<br />&amp;lt;pre&amp;gt;$pages = DataObject::get(‘SiteTree’, ‘“ParentID” = 5’);<br />$count = $pages ? $pages-&amp;amp;gt;Count() : 0;&amp;lt;/pre&amp;gt;<br />&amp;lt;p&amp;gt;However, in SilverStripe 2 what that would do is query every single matching record from the database, create a DataObject for them, get the size of, and then throw all of those objects away.  This is very inefficient. &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;As a result, a more common way to get the number of records was to run something like this: &amp;lt;/p&amp;gt;<br />&amp;lt;pre&amp;gt;$count = DB::query(‘SELECT COUNT(*) FROM “SiteTree” WHERE&amp;lt;br/&amp;gt;    “ParentID” = 5’)-&amp;amp;gt;value();&amp;lt;/pre&amp;gt;<br />&amp;lt;p&amp;gt;This is more efficient, but it bypasses the ORM and is really just an admission that the ORM isn’t giving us what we need.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;In SilverStripe 3, a DataObject::get() call won’t query the database immediately.  Instead, it will create an internal representation of that ORM query and save it for later.  There is a new class for storing these, called DataList.  It will only call the query once a result is needed.  For example:&amp;lt;/p&amp;gt;<br />&amp;lt;pre&amp;gt;// Query isn’t executed here <br />$pages = DataObject::get(‘SiteTree’, ‘“ParentID” = 5’);<br />// Query is executed here<br />foreach($pages as $page) echo “&amp;amp;lt;li&amp;amp;gt;$page-&amp;amp;gt;Title&amp;amp;lt;/li&amp;amp;gt;”;&amp;lt;/pre&amp;gt;<br />&amp;lt;p&amp;gt;As part of these changes, we have made a new API better indicate that you are creating an option that represents the query, rather than querying straight away.  The old syntax still works:&amp;lt;/p&amp;gt;<br />&amp;lt;pre&amp;gt;DataObject::get(‘SiteTree’, ‘“ParentID” = 5’);&amp;lt;/pre&amp;gt;<br />&amp;lt;p&amp;gt;But, going forward, we recommend this new syntax: &amp;lt;/p&amp;gt;<br />&amp;lt;pre&amp;gt;DataList::create(‘SiteTree’)-&amp;amp;gt;where(‘“ParentID” = 5’);&amp;lt;/pre&amp;gt;<br />&amp;lt;p&amp;gt;Another advantage of this syntax is that you don’t need to remember the order of all the DataObject::get() arguments.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;What’s more, when you call the Count() method, it won’t call the full query at all.  Instead it will create a suitable “SELECT COUNT(*) …” query based on the original query.  As a result, this code is now much more efficient: &amp;lt;/p&amp;gt;<br />&amp;lt;pre&amp;gt;$count = DataList::create(“SiteTree”)-&amp;amp;gt;where(‘“ParentID” = 5’)-&amp;amp;gt;Count();&amp;lt;/pre&amp;gt;<br />&amp;lt;p&amp;gt;So, efficiency is a benefit, but the new ORM also lets us make our code more loosely coupled and easier to maintain.  We can pass DataLists to other parts of the system, without needing to explain how that DataList has been created.  For example, ComplexTableField has a large number of configuration fields for specifying the data that should be displayed.  In SilverStripe 3, we are replacing ComplexTableField with GridField, which takes one parameter for specifying data: a DataList.  GridField doesn’t need to know the query behind that DataList.  Instead, it can just call limit(), sort(), and filter() to limit the query to the appropriate page of results.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;There’s more to the new ORM than what I can cover in a single blog post.  You can find out more on the &amp;lt;a href=&amp;quot;http://doc.silverstripe.org/sapphire/en/trunk/topics/datamodel&amp;quot;&amp;gt;doc site&amp;lt;/a&amp;gt;.  If you would like to try this out right now, you can &amp;lt;a href=&amp;quot;http://www.silverstripe.org/pre-releases&amp;quot;&amp;gt;download SilverStripe 3.0.0-alpha1&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;</description>
			<pubDate>Wed, 09 Nov 2011 13:29:18 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/silverstripe-3-s-new-orm/</guid>
		</item>
		
		<item>
			<title>Wellington&#39;s October SilverStripe Meetup</title>
			<link>http://www.silverstripe.org/wellington-s-october-silverstripe-meetup/</link>
			<description>&amp;lt;p&amp;gt;Thanks to everyone who came along to our October Wellington Meetup. Word on the street is that it was one of our most popular meetups for 2011, with approximately 30 people attending.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Our MC for the evening was co-founder &amp;lt;a href=&amp;quot;http://www.silverstripe.com/about-us/team/sales-and-marketing/sigurd-magnusson/&amp;quot;&amp;gt;Sigurd Magnusson&amp;lt;/a&amp;gt; who kicked the event off, followed by presentations by community member &amp;lt;a href=&amp;quot;http://camfindlay.com/blog/?utm_source=SSMeetup27Oct2011&amp;amp;amp;utm_medium=SilverStripeBlog&amp;amp;amp;utm_campaign=Presentations&amp;quot;&amp;gt;Cam Findlay&amp;lt;/a&amp;gt; and SilverStripe Head of Developement &amp;lt;a href=&amp;quot;http://www.silverstripe.com/about-us/team/development/rainer-spittel/&amp;quot;&amp;gt;Rainer Spittel&amp;lt;/a&amp;gt;. We have included videos of both presentations below, along with accompanying slides. See you all in the new year! Our next meetup is scheduled for January.&amp;lt;/p&amp;gt;<br />&amp;lt;h1&amp;gt;Cam Findlay&amp;lt;/h1&amp;gt;<br />&amp;lt;div id=&amp;quot;__ss_9951234&amp;quot; style=&amp;quot;width: 425px;&amp;quot;&amp;gt;&amp;lt;strong style=&amp;quot;display:block;margin:12px 0 4px&amp;quot;&amp;gt;&amp;lt;a title=&amp;quot;NZYP Project Casestudy using SilverStripe CMS&amp;quot; href=&amp;quot;http://www.slideshare.net/CamFindlay1/nzyp-project-casestudy-using-silverstripe-cms&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;NZYP Project Casestudy using SilverStripe CMS&amp;lt;/a&amp;gt;&amp;lt;/strong&amp;gt; &amp;lt;iframe src=&amp;quot;http://www.slideshare.net/slideshow/embed_code/9951234&amp;quot; width=&amp;quot;425&amp;quot; height=&amp;quot;355&amp;quot; frameborder=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; scrolling=&amp;quot;no&amp;quot;&amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;div style=&amp;quot;padding:5px 0 12px&amp;quot; mce_style=&amp;quot;padding:5px 0 12px&amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;View more &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a href=&amp;quot;http://www.slideshare.net/&amp;quot; mce_href=&amp;quot;http://www.slideshare.net/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;presentations&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; from &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a href=&amp;quot;http://www.slideshare.net/CamFindlay1&amp;quot; mce_href=&amp;quot;http://www.slideshare.net/CamFindlay1&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Cam Findlay&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/div&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/div&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;div style=&amp;quot;width: 425px;&amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;div style=&amp;quot;width: 425px;&amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;div style=&amp;quot;width: 425px;&amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;div style=&amp;quot;width: 425px;&amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;span class=&amp;quot;mceItemObject&amp;quot;  width=&amp;quot;598&amp;quot; height=&amp;quot;336&amp;quot; data=&amp;quot;http://vimeo.com/moogaloop.swf?clip_id=31471113&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;server=vimeo.com&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;show_title=0&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;show_byline=0&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;show_portrait=0&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;color=00adef&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;fullscreen=1&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;autoplay=0&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;loop=0&amp;quot; type=&amp;quot;application/x-shockwave-flash&amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;span  name=&amp;quot;allowfullscreen&amp;quot; value=&amp;quot;true&amp;quot;class=&amp;quot;mceItemParam&amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/span&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;span  name=&amp;quot;allowscriptaccess&amp;quot; value=&amp;quot;always&amp;quot;class=&amp;quot;mceItemParam&amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/span&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;span  name=&amp;quot;src&amp;quot; value=&amp;quot;http://vimeo.com/moogaloop.swf?clip_id=31471113&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;server=vimeo.com&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;show_title=0&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;show_byline=0&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;show_portrait=0&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;color=00adef&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;fullscreen=1&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;autoplay=0&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;loop=0&amp;quot;class=&amp;quot;mceItemParam&amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/span&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/span&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;h1&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Rainer Spittel&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/h1&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a title=&amp;quot;SS Geo viewer&amp;quot; href=&amp;quot;assets/presentations/SS-GeoViewer.pdf&amp;quot; mce_href=&amp;quot;assets/presentations/SS-GeoViewer.pdf&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Download the PDF&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/div&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/div&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/div&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/div&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;lt;/iframe&amp;gt;&amp;lt;/div&amp;gt;<br />&amp;lt;div style=&amp;quot;width: 425px;&amp;quot;&amp;gt;<br />&amp;lt;p&amp;gt;<br />&amp;lt;object width=&amp;quot;500&amp;quot; height=&amp;quot;350&amp;quot; data=&amp;quot;http://vimeo.com/moogaloop.swf?clip_id=31471113&amp;amp;amp;server=vimeo.com&amp;amp;amp;show_title=0&amp;amp;amp;show_byline=0&amp;amp;amp;show_portrait=0&amp;amp;amp;color=00adef&amp;amp;amp;fullscreen=1&amp;amp;amp;autoplay=0&amp;amp;amp;loop=0&amp;quot; type=&amp;quot;application/x-shockwave-flash&amp;quot;&amp;gt;<br />&amp;lt;param name=&amp;quot;allowfullscreen&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&amp;lt;param name=&amp;quot;allowscriptaccess&amp;quot; value=&amp;quot;always&amp;quot;/&amp;gt;&amp;lt;param name=&amp;quot;src&amp;quot; value=&amp;quot;http://vimeo.com/moogaloop.swf?clip_id=31471113&amp;amp;amp;server=vimeo.com&amp;amp;amp;show_title=0&amp;amp;amp;show_byline=0&amp;amp;amp;show_portrait=0&amp;amp;amp;color=00adef&amp;amp;amp;fullscreen=1&amp;amp;amp;autoplay=0&amp;amp;amp;loop=0&amp;quot;/&amp;gt;&amp;lt;/object&amp;gt;<br />&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;h1&amp;gt;Rainer Spittel&amp;lt;/h1&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.silverstripe.org/assets/presentations/SS-GeoViewer.pdf&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Download the presentation PDF&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;<br />&amp;lt;object width=&amp;quot;500&amp;quot; height=&amp;quot;350&amp;quot; data=&amp;quot;http://vimeo.com/moogaloop.swf?clip_id=31473382&amp;amp;amp;server=vimeo.com&amp;amp;amp;show_title=0&amp;amp;amp;show_byline=0&amp;amp;amp;show_portrait=0&amp;amp;amp;color=00adef&amp;amp;amp;fullscreen=1&amp;amp;amp;autoplay=0&amp;amp;amp;loop=0&amp;quot; type=&amp;quot;application/x-shockwave-flash&amp;quot;&amp;gt;<br />&amp;lt;param name=&amp;quot;allowfullscreen&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&amp;lt;param name=&amp;quot;allowscriptaccess&amp;quot; value=&amp;quot;always&amp;quot;/&amp;gt;&amp;lt;param name=&amp;quot;src&amp;quot; value=&amp;quot;http://vimeo.com/moogaloop.swf?clip_id=31473382&amp;amp;amp;server=vimeo.com&amp;amp;amp;show_title=0&amp;amp;amp;show_byline=0&amp;amp;amp;show_portrait=0&amp;amp;amp;color=00adef&amp;amp;amp;fullscreen=1&amp;amp;amp;autoplay=0&amp;amp;amp;loop=0&amp;quot;/&amp;gt;&amp;lt;/object&amp;gt;<br />&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;If there’s something you’d like to hear or speak about at our next meetup in January, get in touch through the comments, via &amp;lt;a title=&amp;quot;Link to SilverStripe on Twitter&amp;quot; href=&amp;quot;http://www.twitter.com/SilverStripe&amp;quot;&amp;gt;Twitter&amp;lt;/a&amp;gt; and &amp;lt;a title=&amp;quot;Link to SilverStripe on Facebook&amp;quot; href=&amp;quot;https://www.facebook.com/#%21/pages/silverstripe/44641219945&amp;quot;&amp;gt;Facebook&amp;lt;/a&amp;gt;, or email &amp;lt;a title=&amp;quot;Email Kerstin at SilverStripe&amp;quot; href=&amp;quot;mailto:kerstin@silverstripe.com&amp;quot;&amp;gt;kerstin@silverstripe.com&amp;lt;/a&amp;gt;. We’d love to hear what you&#39;ve been up to with SilverStripe. If you haven&#39;t already, join our &amp;lt;a title=&amp;quot;Link to meetup.com&amp;quot; href=&amp;quot;http://www.meetup.com/SilverStripe-Wellington-Meetup-Group/&amp;quot;&amp;gt;meetup.com group&amp;lt;/a&amp;gt; for regular updates.&amp;lt;/p&amp;gt;<br />&amp;lt;/div&amp;gt;</description>
			<pubDate>Wed, 02 Nov 2011 15:41:45 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/wellington-s-october-silverstripe-meetup/</guid>
		</item>
		
		<item>
			<title>SilverStripe 3.0 alpha 1 is ready to download </title>
			<link>http://www.silverstripe.org/silverstripe-3-0-alpha-1-is-ready-to-download/</link>
			<description>&amp;lt;p&amp;gt;It’s been a while since we gave you the SS 3.0 preview to play around with earlier in the year. Now we are getting serious. We are proud and excited to announce that SilverStripe CMS 3.0 alpha 1 and SilverStripe Framework 3.0 alpha 1 are ready to &amp;lt;a href=&amp;quot;http://silverstripe.org/pre-releases/&amp;quot;&amp;gt;download&amp;lt;/a&amp;gt; and test now.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;We’ve made the new CMS faster and more flexible. It shows an outstanding new user interface and last but not least; we separated the framework from the CMS and made it its own entity.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Alpha means this version is ready for you, the community, to test it and report any bugs you can find. Alpha also means that we don’t recommend using this version of SilverStripe for production sites yet, unless you did extensive testing on your own site first.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;What&#39;s new in SilverStripe 3.0 alpha 1?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;-&amp;lt;/strong&amp;gt;&amp;lt;strong&amp;gt;Framework and CMS separated:&amp;lt;/strong&amp;gt; You can now download SilverStripe Framework as a standalone tool without the CMS. That means more flexibility to build anything else than ‘just’ a website.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- New UI:&amp;lt;/strong&amp;gt; The user interface has been completely redesigned to be more intuitive as well as more modern looking. You can switch between panels through Ajax, which will improve the overall loading performance. A collapsible menu with ‘fly-out sub navigation’ will save precious screen space.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;While this is all still a work in progress, you can already start to see where we are heading with the new user interface. The interface is the result of interviews with users of our software and the interaction design work of SilverStripe Creative Director Felipe Skroski.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600555-ss3alpha-1-edit-page_2.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;555&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;The main menus have moved from the top of the screen to the left hand side. The sitemap which used to greet you has now moved to its own section. The color scheme and visual aesthetic has been modernised. As a result, editing is done on a less cluttered page. At bottom right, a more visible &#39;Preview&#39; button lets you see your work in progress.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600555-ss3alpha-2-view-page_2.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;555&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- Preview function:&amp;lt;/strong&amp;gt; You can now switch back and forth between the CMS and the previewed content much more easily. This will greatly speed up the work of CMS authors.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;When you click preview, the page continues to show links back into the CMS (&amp;quot;&amp;amp;lt;&amp;amp;lt; Edit&amp;quot;), together with icons on the left hand margin of the page. You also get links to the Draft Site and Published Site to make it easy to see your changes. Yet to come, is a feature where you can see the page you are editing and the preview side by side, which will be available for users with wide screens.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- Add new page screen:&amp;lt;/strong&amp;gt; SilverStripe CMS 3.0 makes more use of pop-up screens than v2.0. An example of this is the Add New Page screen. This is designed to make common tasks more intuitive to perform, and gives more space in the user interface. It has room for icons and descriptions of the various page types and therefore replaces the previous, rather unfriendly drop-down solution.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600555-ss3alpha-3-add-page_2.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;555&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- Page tree:&amp;lt;/strong&amp;gt; Based on interviews with existing users we decided to rebuild the sitemap editor.  We just got started, but you can see that this now gets a full-screen interface rather than being squashed into the left hand side of the screen as is found in version 2.0. As we get closer to a stable version of 3.0, there will be more options for finding and performing actions on pages (e.g. publish, remove, etc.). There will also be a List View, which will help when you have thousands of items in the same part of the site, and need to use sorts and filters instead of painstakingly browsing to the page you want to edit.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage600555-ss3alpha-4-sitemap.png&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;555&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- Themeable UI:&amp;lt;/strong&amp;gt; It is now easier to customize the look and feel of the CMS UI.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- New ORM:&amp;lt;/strong&amp;gt; A completely new ORM, based on lazy-loaded DataLists, gives developers much more flexibility.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- GridField, the ComplexTableField replacement: &amp;lt;/strong&amp;gt;We have built a replacement for ComplexTableField from the ground up, based on the new ORM. This is still early stage, but you can already see that it is more reliable and flexible.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- Template language rewrite:&amp;lt;/strong&amp;gt; The template engine has been rewritten, making it more reliable and adding a few key features.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- Javascript Rewrite: &amp;lt;/strong&amp;gt;The Javascript of the CMS has been rewritten, built on a consistent base of jQuery, jQuery UI, Entwine.  This will make it faster, more reliable, and more easily extended.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- Manifest builder rewrite:&amp;lt;/strong&amp;gt; The manifest builder, which keeps track of the code in your site, has been rewritten to be more stable.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- Deprecation API: &amp;lt;/strong&amp;gt;You can now choose which version of SilverStripe to show deprecation errors for; for example, you can see errors for features that are deprecated in v2.4 but not v3.0.  We plan to use this API to build more upgrading tools.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;See our &amp;lt;a href=&amp;quot;http://doc.silverstripe.org/sapphire/en/trunk/changelogs/alpha/3.0.0-alpha1&amp;quot;&amp;gt;changelog&amp;lt;/a&amp;gt; for more details and an upgrading guide.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;Last but not least&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;These changes meant heaps of work under extreme time constraints for everyone involved. Many of you donated free time to help making SilverStripe a better tool. There is no better way to show your love for the tool you work with on a day to day basis, and for this your time is hugely appreciated.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Thanks to everyone involved in getting the alpha release out. Thank you for your discussion feedback on the &amp;lt;a href=&amp;quot;http://groups.google.com/group/silverstripe-dev&amp;quot;&amp;gt;mailing list&amp;lt;/a&amp;gt;, the pull requests and simply spreading the word on SilverStripe.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Special thanks goes to Edward Knight for his keen attention to detail on the page tree and ‘add page’ dialog, as well as Simon Welsh for improving our ‘MySQL database layer’.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;But as you know; after the show is before the show. The next big milestone will be 3.0 beta at the end of the year, with stable to be expected in the first quarter of the new year.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;What&#39;s next?&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Here is a sneak preview on a few things that are on our roadmap for SilverStripe 3.0 stable.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- Continue developing the new UI:&amp;lt;/strong&amp;gt; There is more work to be done on the user manager, files &amp;amp;amp; images, and model admins, as well as polish on the core interfaces.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- Configuration system: &amp;lt;/strong&amp;gt; A YAML-based configuration system will be added to the Framework, and will be used in place of the current static methods.  This will provide better performance, be simpler for new users, and make it easier to add other tools such as GUIs on top of the config system.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- Dependency injection: &amp;lt;/strong&amp;gt;Dependency injection (DI) is a pattern for defining how code is stitched together. We will be introducing a DI framework and using it throughout the Framework and CMS.  This will make code more modular and testable. &amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- Performance improvements:&amp;lt;/strong&amp;gt; Building on top of the DI, ORM and configuration improvements, we will look to optimise the speed of the framework.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- More enhancements to ORM:&amp;lt;/strong&amp;gt; We have more planned for the ORM, including filtering across relationships and lazy loading for better performance in MSSQL and PostgreSQL.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- More enhancements to GridField:&amp;lt;/strong&amp;gt; We have more planned for GridField, including customizable search forms and pop-ups.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;- Form validation rewrite:&amp;lt;/strong&amp;gt; We will revamp the form validation to use existing jQuery plug-ins, as well as allowing more validation to happen at the ORM layer.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Stay tuned and don’t forget to test and report. If you find any bugs, please submit them here &amp;lt;a href=&amp;quot;http://www.silverstripe.org/ http://open.silverstripe.org/&amp;quot;&amp;gt;http://open.silverstripe.org/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;</description>
			<pubDate>Tue, 01 Nov 2011 10:34:31 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/silverstripe-3-0-alpha-1-is-ready-to-download/</guid>
		</item>
		
		<item>
			<title>Last Chance to Vote for PacktPub&#39;s 2011 Open Source Awards</title>
			<link>http://www.silverstripe.org/last-chance-to-vote-for-packtpub-s-2011-open-source-awards/</link>
			<description>&amp;lt;p&amp;gt;&amp;lt;span id=&amp;quot;internal-source-marker_0.0014884618655116588&amp;quot; style=&amp;quot;font-size: 11pt; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage199190-PacktOS-AWARDS-20110.png&amp;quot; width=&amp;quot;199&amp;quot; height=&amp;quot;190&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;There are only a few more days to vote for SilverStripe in PacktPub’s 2011 Open Source Awards. Public voting closes on Monday 31 October. We are proud to be a finalist in the Open Source CMS category. Last year we came in second and this year we are eager to take home the grand prize!&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;The PacktPub Award is arguably the biggest in the Open Source CMS world, recognising and rewarding the efforts of open source communities by a combination of public voting and a panel of judges to determine the overall winner. Winning this award means acknowledgement of the community for the value you have added by using the SilverStripe CMS, and contributing to its code, documentation, and community posts and comments.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;If you use it and you like it, please take a moment to vote for SilverStripe in the &amp;lt;a href=&amp;quot;https://www.packtpub.com/open-source-awards-home/vote-open-source-cms&amp;quot;&amp;gt;Best CMS category&amp;lt;/a&amp;gt; and in the &amp;lt;a href=&amp;quot;http://www.packtpub.com/open-source-awards-home/vote-cms-subcategory&amp;quot;&amp;gt;Open Source CMS subcategories&amp;lt;/a&amp;gt;. In particular, we pride the SilverStripe CMS on its ease of use and strong community involvement, which are fortunately standalone subcategories this year.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;The competition is now open to public voting and is in its final stage, so cast your vote now as every vote counts! You will also go in the draw to win an Amazon Kindle. To read more about the competition, visit &amp;lt;a href=&amp;quot;http://www.packtpub.com/open-source-awards-home&amp;quot;&amp;gt;http://www.packtpub.com/open-source-awards-home&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;</description>
			<pubDate>Fri, 28 Oct 2011 12:47:53 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/last-chance-to-vote-for-packtpub-s-2011-open-source-awards/</guid>
		</item>
		
		<item>
			<title>Why Design Comes First: True Confessions of a Guilty Coder</title>
			<link>http://www.silverstripe.org/why-design-comes-first-true-confessions-of-a-guilty-coder/</link>
			<description>&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/_resampled/resizedimage162238-IMG02102.jpg&amp;quot; width=&amp;quot;162&amp;quot; height=&amp;quot;238&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;Guest blogger Aaron Carlino is a web developer who is better known in the SilverStripe community by his whimsical pseudonym &amp;lt;a href=&amp;quot;https://github.com/unclecheese&amp;quot;&amp;gt;Uncle Cheese&amp;lt;/a&amp;gt;. Aaron has been doing web development since 2005, and found his niche in SilverStripe programming after an exhaustive search for a content management solution that was welcoming to developers and would stay out of his way. Since then, he has established a strong reputation in the SilverStripe community as a mentor, support provider, and, most notably, a contributor to some of the application’s most popular modules.&amp;lt;/em&amp;gt;&amp;lt;em&amp;gt; &amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;em&amp;gt; &amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;I love good design. I say that with all the humility and candor of an admitted addict, because there’s a certain amount of inner betrayal that it makes me feel. In my heart I’m a coder, but the truth is, nothing excites me quite like good design. I don’t know why it is, but I have a few ideas. Maybe, for instance, it’s because it’s not something I’m naturally good at. I’ve been blessed with many great talents in my life, but the unspoken curse of the talented is that, while we’re stimulated by the things we do well, we are also perennially plagued by the things we can’t do well. These things remain open, unfinished conquests, and we consequently elevate them to a higher echelon of respect and worship. That’s how design is to me. I want to be good at it, but I know I never will be, and I’m therefore forever in its admiration.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;It seems to me there’s something much bigger going on here, though. My love of good design isn’t just about some quirky hang-up rooted in a guilty coder’s conscience.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;&amp;lt;strong&amp;gt;Why does good design really matter?&amp;lt;/strong&amp;gt;&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Good design is something all of us should respect and admire in our quests to create great websites and web applications, and here are three reasons why.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;1. Good Design Begets Good (Anything Else)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Good design is motivating – it’s inspiring. Good design sets a tone. It informs us of the level of care and attention we should give to a project. When design comes first, the rhythm, pace and attitudinal patterns of a project are established, and all of that energy is propelled into the production phase, where it furnishes a great product.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;At &amp;lt;a href=&amp;quot;http://www.bluehousegroup.com)&amp;quot;&amp;gt;Bluehouse Group&amp;lt;/a&amp;gt;, we’re fortunate to enjoy the talent of what I consider a top-notch art director. &amp;lt;a href=&amp;quot;http://www.joshuaturner.com&amp;quot;&amp;gt;Josh Turner&amp;lt;/a&amp;gt; has been with us for a number of years, and I haven’t seen much of anything leave his desk that isn’t done with a high degree of finesse, strategy, and exceptional aptitude. I’ve learned that the best thing about working with a great art director is that he has the power to shape everyone’s attitude about a project and motivate us to do it extremely well.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;When I get my eyes on the approved designs for an upcoming project, I feel like a fine carpenter reviewing the blueprints for a dazzling room with an ocean view. I look forward to being challenged to think differently. I welcome the responsibility of making a great idea come to life.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Along those same lines, I have thoroughly enjoyed the approach that SilverStripe has taken with the upcoming 3.0 release of its CMS. All along the way, SilverStripe has kept an open channel of communication to its base of users and stakeholders, keeping us updated with the plans for the major release. Then, in the spring, they posted scores of high-quality designs to their public Github repository. The response was overwhelming. The community was energized and excited about the future of SilverStripe. We couldn’t wait to get our hands on it, and developers were asking what they could do to help push the release date closer. To this day, in those rare moments where I feel ambivalent about SilverStripe, I refer myself to those designs, and it revives the batty-eyed infatuation I’ve had for the product since 2007.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Good design has a power over us. It is the point at which an in-vitro idea, held captive in the abstract realm is born into the physical world. Like any newborn being, we welcome it, care for it, and allow it to grow up and become something great.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;2. Good Design Prevents Broken Windows&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;New York City, 1985 -- Mayor Rudy Giuliani, in a desperate attempt to slow the rapidly accelerating crime rate, consulted George Kelling, author of the book Fixing Broken Windows: Restoring Order and Reducing Crime in Our Communities to help develop a strategy to reduce crime. Keller was armed with a very compelling theory. He suggested that when urban environments appear to be poorly cared for on the outside, they invite bad behavior and mischief on the inside. That is, by staying on top of the basic hygiene of a human habitat – fixing broken windows, removing graffiti, cleaning sidewalks, fining the turnstile jumpers at the subway station – it sends the message that the place is cared for and respected, and the reduction in violent crime will subsequently fall.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Giuliani committed to it, and while the results were highly debated among criminologists and politicians, it is hard to deny that crime was reduced significantly, and continued to fall for the next ten years.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;So what does this say about the importance of design? As humans, we’re hardwired to glorify and nurture the things that merit our affection, and to impoverish the things that don’t. Good design is a brand new city – free of broken windows – that demands our respect. It asks for nothing less than our best work.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;When we give less than our best work, the proverbial “broken windows” start to arise, and it’s hard to turn things around. We’ve all been part of projects like this:&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Client:&amp;lt;/strong&amp;gt; I need this widget on the home page.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Designer:&amp;lt;/strong&amp;gt; OK. I’m concerned about how it will work with the rest of the elements on the page. Let me make a couple of comps for you and you can tell me what treatment you like.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Client:&amp;lt;/strong&amp;gt; I don’t have time for that. Just stick it somewhere.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;A “stick it here” and a “stick it there” later, the design has fallen into disrepair. It becomes progressively harder to keep the site beautiful, and progressively easier to commit “crimes” such as jamming a widget where it doesn’t belong. Why? Because every subsequent developer who touches the site is informed that the bar has been lowered for this project, and he sees diminishing returns for investing time into it.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;To this end, at Bluehouse Group, nearly every change we make to a website goes through design first. Even if it’s just for 15 minutes, we always consult our design team. The result? Our sites remain beautiful, and always worthy of our care.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;3. The Design is the Product&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;George Carlin once quipped while explaining his spirituality, “I worship the sun. Why? Well, first of all, I can see the sun. That kind of, you know, helps the credibility along.”&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;OK, so he’s not the most pious fellow in the world, but he does make a good point. We’re visual people. We get sold on things that look good. Just look around. Television and the Internet are dominant media. Politicians are good looking. E-commerce websites spend big money on interactive photo features for their products. There’s no doubt about it -- we eat with our eyes.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Code, on the other hand, is a bit of a thankless job. 99.9% of visitors to a website are not going to look at the underlying HTML/CSS and JavaScript, and none of them are going to see the server-side code. Quite frankly, most of the people whose opinions really matter about a website don’t care about the elegance of the code. They only care when it breaks. They’re much more interested in how things look – then, now, and in the future.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Even though we should know better, we’re all guilty of disproportionately favoring the visual to the hidden. When buying a new home, we get sold on granite countertops, stainless steel, and hardwood floors. We understand these things, and we have the tools to evaluate them. When we hear that the electrician did a supreme job on the wiring, if such a thing is mentioned at all, we’re nonplussed. We think, “Well, I would hope so!” This is because most of us don’t have a means of evaluating electrical handiwork, so we take it for granted.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;We’re visual people, and we can all identify what looks good and what looks bad. Design is easy to sell. Good code, on the other hand, simply satisfies an abstract requirement that the buyer does not understand and therefore cannot value.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Unfair, isn’t it, coders?&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;&amp;lt;strong&amp;gt;So what is good design? A coder’s opinion&amp;lt;/strong&amp;gt;&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Defining good design comes with all of the hurdles and trappings of trying to define something like happiness. It’s an abstract and impossible task. We all have our perspective, however, so here’s the definition of good design from a guy who doesn’t know a layer mask from a lasagna.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Good design is frictionless.&amp;lt;/strong&amp;gt; Steve Krug’s best-selling Bible of usability Don’t Make Me Think was successful because it emulated its very title. It’s painless and easy to read. Thinking isn’t something that jibes really well with the web. People use the web to find information, and they want it fast. Thinking is a huge roadblock to finding information, and should be saved for slower-paced media like newspapers, books, and movies. Good design is uncluttered and puts information behind as few clicks as possible. Good design understands the way the human eye relays information to the brain, and is optimized to make it an efficient and enjoyable process.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Good design is beautiful.&amp;lt;/strong&amp;gt; It’s not as subjective as you think. Beautiful web design is easy to identify. It has a lightweight and harmonious color scheme. It aligns to an exacting grid and breaks it for dramatic effect where appropriate. It never places too much contrast between text and background, and it never, ever uses the hexadecimal #000.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Good design doesn’t need color. &amp;lt;/strong&amp;gt;Color is an ancillary component to a good design. When rendered greyscale, a good design is functionally lossless. With such a high level of importance placed on its organization and typography, color is merely an enhancement to a good design. A good design is well equipped to live in a black-and-white world.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Good design is subtle.&amp;lt;/strong&amp;gt; Designers should heed the same rule for Photoshop effects that many women follow when wearing makeup: “If they can tell you’re using it, you’ve used too much.” We’ve all seen inappropriate and excessive application of graphic technique. It comes in the form of rainbow gradients, hovercraft drop shadows, arbitrary curvature, do-nothing textures, and lighting effects that suggest there are four suns. Good design doesn’t need to clue you into its bag of tricks. It’s humble, and it has nothing to prove.&amp;lt;/p&amp;gt;<br />&amp;lt;h3&amp;gt;&amp;lt;strong&amp;gt;Let design lead the way&amp;lt;/strong&amp;gt;&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Whether you’re a programmer, front-end developer, project manager, or anyone else involved in making a website come to life, you can profit from allowing design to guide your decision-making and inspiration. If you’re a solo developer and you’re not skilled with design, consider hiring a designer before settling on doing it yourself. You may be surprised by how many talented designers are out there who are looking to build a portfolio and will work for low cost. Design is almost always worth the investment. If we collectively place a higher importance and value on quality design, we can make the web a much more inviting and enjoyable place that is deserving of our care.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;</description>
			<pubDate>Wed, 26 Oct 2011 12:00:14 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/why-design-comes-first-true-confessions-of-a-guilty-coder/</guid>
		</item>
		
		<item>
			<title>SilverStripe PayPal Mini Cart Integration</title>
			<link>http://www.silverstripe.org/silverstripe-paypal-mini-cart-integration/</link>
			<description>&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;img class=&amp;quot;left&amp;quot; src=&amp;quot;http://www.silverstripe.org/assets/Image.png&amp;quot; width=&amp;quot;200&amp;quot; height=&amp;quot;200&amp;quot; alt=&amp;quot;&amp;quot; title=&amp;quot;&amp;quot;/&amp;gt;Guest blogger Ryan Wachtl is an independent US-based web  developer and experienced designer with a passion for the art of  programming and the science of design. He has been building sites with  SilverStripe since the early 2.2 release and organizes the SilverStripe  user group in Madison, WI. You can stay in touch by following &amp;lt;a title=&amp;quot;Ryan Wachtl on Twitter&amp;quot; href=&amp;quot;http://twitter.com/#%21/ryanwachtl&amp;quot;&amp;gt;@ryanwachtl&amp;lt;/a&amp;gt; on Twitter.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;There comes a time for just about every web designer when the  requirements for a project call for some type of e-commerce  functionality. The world of online commerce is full of extra  considerations like: SSL certificates, PCI compliance, merchant  accounts, payment gateways and charging the appropriate taxes, to name a  few. Understanding your needs and constraints is the first step to  getting a hold on e-commerce.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;If you have the time and budget to fully integrate an e-commerce solution into your SilverStripe site you can start with the &amp;lt;a&amp;gt;E-Commerce module&amp;lt;/a&amp;gt; or &amp;lt;a&amp;gt;SilverCart&amp;lt;/a&amp;gt;,  which will both bring order management, customer accounts, and on-site  payment processing with them. Perhaps you need a hybrid solution like &amp;lt;a href=&amp;quot;https://github.com/cbryer/FoxyStripe&amp;quot;&amp;gt;FoxyStripe&amp;lt;/a&amp;gt;,  which offers a lot customization opportunities and takes the hassle out  of handling credit cards and customer data on your site. If you&#39;re in  the mood to really flex your skills, you can also leverage the power  and flexibility of the SilverStripe Framework and roll your own  solution.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Sometimes all these options are over-kill and all that&#39;s required is a  quick and simple way to sell items. Basically, you just need a cart to  place items into and a way for customers to pay for them. I&#39;ve found  the &amp;lt;a href=&amp;quot;https://minicart.paypal-labs.com/&amp;quot;&amp;gt;PayPal Mini Cart&amp;lt;/a&amp;gt; to  be a near perfect fit for this situation. The Mini Cart allows you to  run your own shopping cart on your website and then forwards the order  to PayPal where your customer can complete the purchase. The cart  requires javascript, but will fallback to using PayPal&#39;s hosted cart  in the event that javascript is not available. Essentially, it&#39;s an  enhancement to the standard PayPal buttons that you can add to a  website. Follow along with me as we build a portable and light-weight  e-commerce solution for SilverStripe. We&#39;ll be covering some key  SilverStripe development topics like modules, extensions, and  shortcodes.&amp;lt;/p&amp;gt;<br />&amp;lt;h3 id=&amp;quot;heresapreviewofwhatweregoingtobuild.&amp;quot;&amp;gt;Here&#39;s a preview of what we&#39;re going to build.&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img src=&amp;quot;http://silverstripe-articles.s3.amazonaws.com/00-preview-cart-in-action.jpg&amp;quot; alt=&amp;quot;Preview Cart In Action&amp;quot; width=&amp;quot;630&amp;quot; height=&amp;quot;236&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;To start off I&#39;ve a clean install of SilverStripe 2.4.5 using the  Black Candy theme. We could just start plugging things into our site  until we&#39;ve got a working cart, but we want something that we can drop  into any SilverStripe project and get up and running with just a little  configuration. We&#39;re going to build a module, so let&#39;s start by  building out our structure.&amp;lt;/p&amp;gt;<br />&amp;lt;h3 id=&amp;quot;modulefilestructure&amp;quot;&amp;gt;Module File Structure&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;&amp;lt;img src=&amp;quot;http://silverstripe-articles.s3.amazonaws.com/01-create-module-structure.jpg&amp;quot; alt=&amp;quot;Module File Structure&amp;quot; width=&amp;quot;630&amp;quot; height=&amp;quot;191&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Our module will reside in a folder called module_minicart. We need  _config.php so SilverStripe will register our module and then we add  folders to house our code, templates and thirdparty code. The Mini Cart  project is located on PayPal Labs and the source code is hosted on  GitHub. We&#39;re going to grab the latest version of &amp;lt;a href=&amp;quot;https://github.com/jeffharrell/MiniCart&amp;quot;&amp;gt;Mini Cart on GitHub&amp;lt;/a&amp;gt; (2.0.6 at the time of this writing) and drop it into our thirdparty folder.&amp;lt;/p&amp;gt;<br />&amp;lt;h3 id=&amp;quot;config.php&amp;quot;&amp;gt;_Config.php&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Let&#39;s open up some php tags and get _config.php laid out.&amp;lt;/p&amp;gt;<br />&amp;lt;div style=&amp;quot;font-family: monospace; color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;&amp;amp;lt;?php&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;a style=&amp;quot;color: #000060;&amp;quot; href=&amp;quot;http://www.php.net/define&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #990000;&amp;quot;&amp;gt;define&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;MODULE_MINICART_DIR&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;module_minicart&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; DataObject&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #004000;&amp;quot;&amp;gt;add_extension&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;SiteTree&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;MiniCart&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; ShortcodeParser&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #004000;&amp;quot;&amp;gt;get&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #004000;&amp;quot;&amp;gt;register&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;mini_cart_item&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;a style=&amp;quot;color: #000060;&amp;quot; href=&amp;quot;http://www.php.net/array&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #990000;&amp;quot;&amp;gt;array&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;MiniCart&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;MiniCartItemShortcodeHandler&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; MiniCart&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #004000;&amp;quot;&amp;gt;set_business_email&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;me@example.com&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt; MiniCart&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #004000;&amp;quot;&amp;gt;set_currency_code&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;USD&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt; MiniCart&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #004000;&amp;quot;&amp;gt;set_return_url&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;https://example.com/page?success&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt; MiniCart&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #004000;&amp;quot;&amp;gt;set_cancel_return_url&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;https://example.com/page?cancel&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;<br />&amp;lt;p style=&amp;quot;text-align: right; font-family: &#39;Courier New&#39;,Courier,monospace;&amp;quot;&amp;gt;config.php&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;First we define a constant for our module directory, in the event that  we want to rename our folder we can just update it here and all file  path references will remain intact. We then add an extension to SiteTree  which allows us to add methods and make our functionality available to  our Page class, any descendants of Page, or any new classes that  directly extend SiteTree. The next line registers our shortcode, which  we&#39;ll use to insert an &#39;add to cart&#39; button into the content area  of pages in the cms. And finally we allow for some settings that will be  used in our code. Allowing a user to set their PayPal email address,  currency, and the web pages that a customer should be directed to after a  completed or canceled transaction, respectively.&amp;lt;/p&amp;gt;<br />&amp;lt;h3 id=&amp;quot;minicart.php&amp;quot;&amp;gt;MiniCart.php&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;We&#39;ll create a class called MiniCart to add our needed methods to SiteTree.&amp;lt;/p&amp;gt;<br />&amp;lt;div style=&amp;quot;font-family: monospace; color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;&amp;amp;lt;?php&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;class&amp;lt;/span&amp;gt; MiniCart &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;extends&amp;lt;/span&amp;gt; DataObjectDecorator &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;protected&amp;lt;/span&amp;gt; static &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$business_email&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;labs-feedback-minicart@paypal.com&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;protected&amp;lt;/span&amp;gt; static &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$currency_code&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;USD&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;protected&amp;lt;/span&amp;gt; static &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$return_url&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;https://minicart.paypal-labs.com/?success&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;protected&amp;lt;/span&amp;gt; static &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$cancel_return_url&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;https://minicart.paypal-labs.com/?cancel&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt; static &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;function&amp;lt;/span&amp;gt; set_business_email&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$email&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$business_email&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$email&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt; static &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;function&amp;lt;/span&amp;gt; set_currency_code&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$code&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$currency_code&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$code&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt; static &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;function&amp;lt;/span&amp;gt; set_return_url&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$url&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$return_url&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$url&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt; static &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;function&amp;lt;/span&amp;gt; set_cancel_return_url&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$url&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$cancel_return_url&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$url&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;<br />&amp;lt;p style=&amp;quot;text-align: right; font-family: &#39;Courier New&#39;,Courier,monospace;&amp;quot;&amp;gt;MiniCart.php&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Here we create some default values for our settings and a way to set them in _config.php&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Now we need to make sure the Mini Cart and its resources are loaded on all our pages.&amp;lt;/p&amp;gt;<br />&amp;lt;div style=&amp;quot;font-family: monospace; color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;&amp;amp;lt;?php&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;class&amp;lt;/span&amp;gt; MiniCart &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;extends&amp;lt;/span&amp;gt; DataObjectDecorator &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;function&amp;lt;/span&amp;gt; contentcontrollerInit&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$controller&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         Requirements&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #004000;&amp;quot;&amp;gt;javascript&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;             MODULE_MINICART_DIR &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;/thirdparty/minicart/minicart.js&#39;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         Requirements&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #004000;&amp;quot;&amp;gt;customScript&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;PAYPAL.apps.MiniCart.render();&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;minicart&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;<br />&amp;lt;p style=&amp;quot;text-align: right; font-family: &#39;Courier New&#39;,Courier,monospace;&amp;quot;&amp;gt;MiniCart.php&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;Although we aren&#39;t directly extending the ContentController we can  still add our script requirements by using contentcontrollerInit,  allowing us to include the Mini Cart javascript in our pages and  initialize the Mini Cart.&amp;lt;/p&amp;gt;<br />&amp;lt;h3 id=&amp;quot;theshortcode&amp;quot;&amp;gt;Shortcode&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;We registered our shortcode in _config.php but SilverStripe does not  know what we want to do with it yet. A method we define as  MiniCartItemShortcodeHandler will process our shortcode and return the  markup for our template.&amp;lt;/p&amp;gt;<br />&amp;lt;div style=&amp;quot;font-family: monospace; color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;&amp;amp;lt;?php&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;class&amp;lt;/span&amp;gt; MiniCart &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;extends&amp;lt;/span&amp;gt; DataObjectDecorator &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt; static &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;function&amp;lt;/span&amp;gt; MiniCartItemShortcodeHandler&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$attributes&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$content&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #009900; font-weight: bold;&amp;quot;&amp;gt;null&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$parser&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #009900; font-weight: bold;&amp;quot;&amp;gt;null&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #b1b100;&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;a style=&amp;quot;color: #000060;&amp;quot; href=&amp;quot;http://www.php.net/empty&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #990000;&amp;quot;&amp;gt;empty&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$attributes&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;name&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;||&amp;lt;/span&amp;gt; &amp;lt;a style=&amp;quot;color: #000060;&amp;quot; href=&amp;quot;http://www.php.net/empty&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #990000;&amp;quot;&amp;gt;empty&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$attributes&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;price&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;             &amp;lt;span style=&amp;quot;color: #b1b100;&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$item_name&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$attributes&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;name&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$item_price&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$attributes&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;price&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$button&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;!&amp;lt;/span&amp;gt;&amp;lt;a style=&amp;quot;color: #000060;&amp;quot; href=&amp;quot;http://www.php.net/empty&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #990000;&amp;quot;&amp;gt;empty&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$content&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt; ? &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$content&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;Add to cart&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$data&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;new&amp;lt;/span&amp;gt; ArrayData&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;             &amp;lt;a style=&amp;quot;color: #000060;&amp;quot; href=&amp;quot;http://www.php.net/array&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #990000;&amp;quot;&amp;gt;array&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;                 &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;ItemName&#39;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$item_name&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;                 &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;Amount&#39;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$item_price&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;                 &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;Button&#39;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$button&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;                 &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;Business&#39;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$business_email&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;                 &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;CurrencyCode&#39;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$currency_code&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;                 &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;Return&#39;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$return_url&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;                 &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;Cancel&#39;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$cancel_return_url&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;             &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #b1b100;&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$data&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #004000;&amp;quot;&amp;gt;renderWith&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;MiniCartItem&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;<br />&amp;lt;p style=&amp;quot;text-align: right; font-family: &#39;Courier New&#39;,Courier,monospace;&amp;quot;&amp;gt;MiniCart.php&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;MiniCartItemShortcodeHandler takes the attributes entered by the user  in the shortcode, builds a ViewableData object with them, and then  renders them with a template that we&#39;ll create called MiniCartItem.ss.&amp;lt;/p&amp;gt;<br />&amp;lt;div style=&amp;quot;font-family: monospace; color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;form action&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;https://www.paypal.com/cgi-bin/webscr&amp;quot;&amp;lt;/span&amp;gt; method&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;post&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;fieldset&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;input type&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;hidden&amp;quot;&amp;lt;/span&amp;gt; name&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;cmd&amp;quot;&amp;lt;/span&amp;gt; value&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;_cart&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;input type&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;hidden&amp;quot;&amp;lt;/span&amp;gt; name&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;add&amp;quot;&amp;lt;/span&amp;gt; value&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;input type&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;hidden&amp;quot;&amp;lt;/span&amp;gt; name&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;business&amp;quot;&amp;lt;/span&amp;gt; value&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;&amp;lt;span style=&amp;quot;color: #006699; font-weight: bold;&amp;quot;&amp;gt;$Business&amp;lt;/span&amp;gt;&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;input type&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;hidden&amp;quot;&amp;lt;/span&amp;gt; name&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;item_name&amp;quot;&amp;lt;/span&amp;gt; value&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;&amp;lt;span style=&amp;quot;color: #006699; font-weight: bold;&amp;quot;&amp;gt;$ItemName&amp;lt;/span&amp;gt;&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;input type&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;hidden&amp;quot;&amp;lt;/span&amp;gt; name&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;amount&amp;quot;&amp;lt;/span&amp;gt; value&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;&amp;lt;span style=&amp;quot;color: #006699; font-weight: bold;&amp;quot;&amp;gt;$Amount&amp;lt;/span&amp;gt;&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;input type&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;hidden&amp;quot;&amp;lt;/span&amp;gt; name&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;currency_code&amp;quot;&amp;lt;/span&amp;gt; value&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;&amp;lt;span style=&amp;quot;color: #006699; font-weight: bold;&amp;quot;&amp;gt;$CurrencyCode&amp;lt;/span&amp;gt;&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;input type&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;hidden&amp;quot;&amp;lt;/span&amp;gt; name&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;return&amp;quot;&amp;lt;/span&amp;gt; value&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;&amp;lt;span style=&amp;quot;color: #006699; font-weight: bold;&amp;quot;&amp;gt;$Return&amp;lt;/span&amp;gt;&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;input type&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;hidden&amp;quot;&amp;lt;/span&amp;gt; name&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;cancel_return&amp;quot;&amp;lt;/span&amp;gt; value&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;&amp;lt;span style=&amp;quot;color: #006699; font-weight: bold;&amp;quot;&amp;gt;$Cancel&amp;lt;/span&amp;gt;&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;p&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;strong&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$ItemName&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;/&amp;lt;/span&amp;gt;strong&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;br &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;$&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$Amount&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;/&amp;lt;/span&amp;gt;p&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;input type&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;submit&amp;quot;&amp;lt;/span&amp;gt; name&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;submit&amp;quot;&amp;lt;/span&amp;gt; value&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;&amp;lt;span style=&amp;quot;color: #006699; font-weight: bold;&amp;quot;&amp;gt;$Button&amp;lt;/span&amp;gt;&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;class&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;button&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;/&amp;lt;/span&amp;gt;fieldset&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;/&amp;lt;/span&amp;gt;form&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;<br />&amp;lt;p style=&amp;quot;text-align: right; font-family: &#39;Courier New&#39;,Courier,monospace;&amp;quot;&amp;gt;MiniCartItem.ss&amp;lt;/p&amp;gt;<br />&amp;lt;h3 id=&amp;quot;wrappingitup&amp;quot;&amp;gt;Wrapping it up&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;Finally, we need a way to add a &#39;view cart&#39; button to our site.  We&#39;ll accomplish this by creating a method that can be used as a  placeholder in our template and inserts our button.&amp;lt;/p&amp;gt;<br />&amp;lt;div style=&amp;quot;font-family: monospace; color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;&amp;amp;lt;?php&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;class&amp;lt;/span&amp;gt; MiniCart &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;extends&amp;lt;/span&amp;gt; DataObjectDecorator &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;function&amp;lt;/span&amp;gt; ViewCart&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$button&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;View your cart&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$data&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;new&amp;lt;/span&amp;gt; ArrayData&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;             &amp;lt;a style=&amp;quot;color: #000060;&amp;quot; href=&amp;quot;http://www.php.net/array&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #990000;&amp;quot;&amp;gt;array&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;                 &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;Business&#39;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;self&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;::&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$business_email&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;                 &amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;Button&#39;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$button&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;             &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #b1b100;&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000088;&amp;quot;&amp;gt;$data&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #004000;&amp;quot;&amp;gt;renderWith&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&#39;ViewCart&#39;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color: #009900;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;<br />&amp;lt;p style=&amp;quot;text-align: right; font-family: &#39;Courier New&#39;,Courier,monospace;&amp;quot;&amp;gt;MiniCart.php&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;and ViewCart.ss to render our code.&amp;lt;/p&amp;gt;<br />&amp;lt;div style=&amp;quot;font-family: monospace; color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;form action&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;https://www.paypal.com/cgi-bin/webscr&amp;quot;&amp;lt;/span&amp;gt; method&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;post&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;class&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;last&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;fieldset&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;input type&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;hidden&amp;quot;&amp;lt;/span&amp;gt; name&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;business&amp;quot;&amp;lt;/span&amp;gt; value&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;&amp;lt;span style=&amp;quot;color: #006699; font-weight: bold;&amp;quot;&amp;gt;$Business&amp;lt;/span&amp;gt;&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;input type&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;hidden&amp;quot;&amp;lt;/span&amp;gt; name&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;cmd&amp;quot;&amp;lt;/span&amp;gt; value&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;_cart&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;input type&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;hidden&amp;quot;&amp;lt;/span&amp;gt; name&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;display&amp;quot;&amp;lt;/span&amp;gt; value&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;1&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;         &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;input type&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;submit&amp;quot;&amp;lt;/span&amp;gt; name&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;submit&amp;quot;&amp;lt;/span&amp;gt; value&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;&amp;lt;span style=&amp;quot;color: #006699; font-weight: bold;&amp;quot;&amp;gt;$Button&amp;lt;/span&amp;gt;&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #000000; font-weight: bold;&amp;quot;&amp;gt;class&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #0000ff;&amp;quot;&amp;gt;&amp;quot;button&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;     &amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;/&amp;lt;/span&amp;gt;fieldset&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;lt;/&amp;lt;/span&amp;gt;form&amp;lt;span style=&amp;quot;color: #339933;&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;<br />&amp;lt;p style=&amp;quot;text-align: right; font-family: &#39;Courier New&#39;,Courier,monospace;&amp;quot;&amp;gt;ViewCart.ss&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;We now have a functional and portable module that we can drop into our  projects or share with others. To use our Mini Cart module we place our  shortcode in the content area of any page in the cms that we want to add  an &amp;quot;add to cart&amp;quot; button to.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;[mini_cart_item name=&amp;quot;ITEM NAME&amp;quot; price=&amp;quot;0.00&amp;quot;]&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt;and then place our ViewCart placeholder into our template wherever we  want the &#39;view cart&#39; button. This could be in the sidebar, header or  another site-wide region.&amp;lt;/p&amp;gt;<br />&amp;lt;h3 id=&amp;quot;takingourmodulefurther&amp;quot;&amp;gt;Taking our module further&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;With our module we are able to give an item a name and price that can  be added to our cart. We could expand this to except selectable options  for an item (see the &amp;lt;a href=&amp;quot;https://www.paypal.com/?cmd=_button-designer&amp;quot;&amp;gt;PayPal button designer&amp;lt;/a&amp;gt; for ideas on what features you can use). The Mini Cart itself is also &amp;lt;a href=&amp;quot;https://minicart.paypal-labs.com/#tab=customize&amp;quot;&amp;gt;customizable&amp;lt;/a&amp;gt; and comes with a rich &amp;lt;a href=&amp;quot;https://minicart.paypal-labs.com/#tab=advanced&amp;quot;&amp;gt;javascript API&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;<br />&amp;lt;h3 id=&amp;quot;getthecode&amp;quot;&amp;gt;Get the code&amp;lt;/h3&amp;gt;<br />&amp;lt;p&amp;gt;We&#39;ve covered building a basic SilverStripe module by extending the  core and giving users some powerful tools in the way of shortcodes. I  hope the topics and techniques discussed here will help you in  integrating your own e-commerce solution or building your own modules  for SilverStripe. You can download the completed &amp;lt;a title=&amp;quot;SilverStripe Mini Cart Module on GitHub&amp;quot; href=&amp;quot;https://github.com/ryanwachtl/SilverStripe-Mini-Cart-Module&amp;quot;&amp;gt;SilverStripe Mini Cart module on GitHub&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;<br />&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;</description>
			<pubDate>Wed, 19 Oct 2011 16:03:35 +1300</pubDate>
			
			
			<guid>http://www.silverstripe.org/silverstripe-paypal-mini-cart-integration/</guid>
		</item>
		

	</channel>
</rss>
