Vae Platform http://vaeplatform.com/ Vae Platform en-us Vae Name Change, Rewriting History, and Upcoming Infrastructure Updates <p>Hey everyone -- I'm writing to let you know about some big changes.  As you can see, we changed our name to Vae Platform.  </p><p>On this blog, we've taken the liberty of "rewriting history" -- we've edited old posts to reflect the new name and URL.  <strong>This isn't for any reason other than making it easier for newbies to follow what's going on without having to learn new name and URLs.</strong>  I hope you can forgive me for doing it, we're very proud of our past and we weren't trying to erase it.</p><p> Furthermore, over the next several weeks, we are going to be rolling out some major changes to our platform that will hopefully be exciting to many of you.</p><p>Upcoming feature relaeases include:<br /><br />    * Support for 'git' and deployment using 'git push'.<br />    * A totally revamped rich-text editor.<br />    * Integrated SEO tools.</p><p>But the biggest changes to come are internal.  While we are very proud of the 99.85% uptime record we posted during the last 12 months (despite multiple incidences of server hardware failure), we knew that we could do better.</p><p>To that end, we have been totally revamping our server architecture to eliminate as many single-points-of-failure as possible.  We're taking quite a radical approach.  Rather than maintaining multiple servers in just one location, we are going to be setting up dual copies of our entire infrastructure stack in multiple physical locations.  Each location will have independent power, cooling, Internet connections, and copies of your entire website.  Even if an entire building drops off the grid, your site will continue entirely uninterrupted.</p><p>We are currently rolling out this system gradually to customers.  We already have a few sites live on the dual-copy system and so far, so good.</p><p>We think that this new infrastructure is so awesome that once we get all our existing customers migrated to it, we are going to market it like crazy.  Almost no shared hosting companies do this, and we think that it has the potential to radically shift the baseline for reliability in the shared hosting market.</p><p>It's so cool that we think that people will start using our service even if they don't want the CMS or eCommerce but do want reliability on their website.  So, we are going to update our plans to include the option to purchase a hosting-only package that doesn't include the CMS.  And we're going to push it, hard.</p><p>There is nothing you need to do about the name change.  At some point, you may see yourself get redirected to vaeplatform.com when trying to log in, but that's it.  All URLs will continue to work.</p><p>Thanks for supporting us through the first 3 and a half years of our service.  We're looking forward to growing even bigger and finding new ways to serve you guys better and better.</p><p>Please feel free to let me know if you have any questions.</p><p>To you!</p><p>Kevin Bombino // Manager<br />Action Verb, LLC</p> http://vaeplatform.com/post/name-change-rewriting-history-and-upcoming-infrastructure-updates http://vaeplatform.com/post/name-change-rewriting-history-and-upcoming-infrastructure-updates Tue, 29 Mar 2011 01:20:00 -0400 New Design, New Publishing Status <p>As many of you have noticed, we launched a redesign of the Vae backstage on Sunday.  Thanks for all the compliments.  We're really excited to get this out the door.  We are continuing to fix a few bugs that remain, and hope to have it all cleared up by the end of the week.  Thanks to everyone who reported bugs.</p><p>We also want to mention another cool feature that recently rolled out -- three-level publishing status.  It used to be that you could toggle content between 2 states:  Published (green) and Not Published (red).  Well, we've added an in-between state:  Published (Staging only), represented by a yellow icon.</p><p>When content is in this state, it will be visible on<a href=" http://<" target="_blank"> http://<</a>;you>.vaesite.com/, but not on your live domains.  It's a great way to test new content on your site without taking it fully live.</p> http://vaeplatform.com/post/new-design-new-publishing-status http://vaeplatform.com/post/new-design-new-publishing-status Thu, 02 Sep 2010 00:00:00 -0400 Price Drop! <p>Hey everyone --</p><p>It is with great excitement that I can share some recent news.  We have just reworked the Vae hosting plans to be much more affordable and competitive against other hosting providers.</p><p>Check them out now at <a href="http://vaeplatform.com/pricing">http://vaeplatform.com/pricing</a></p><p>Here's a summary of the changes we made:</p><ul><li>There is now an unlimited transaction option for eCommerce within each plan level.  So now, you don't have to worry if your customers will be successful -- we will not charge them extra for their success.  <strong>Our cheapest unlimited transaction plan starts at $59.95!</strong></li><li>The flexibility granted by this option also allowed us to reduce the number of plans we offer.  Rather than offering 6 plans, we now only offer 3 full-featured plans, plus the Solo plan.  Furthermore, now more than ever, we expect 95% of our customers to use the Medium plan (with or without the unlimited transaction option).</li><li>We have raised the amount of included data transfer (bandwidth) from 10GB on the Medium plan to 100GB.  <strong>This is a full 10x increase!  </strong>This change alone will prevent most customers who currently pay overage charges from paying them in the future.  The Large and X-Large plans include 250GB and 1TB, respectively.</li></ul><p>The new plans are available now.</p><p>We converted all existing customers plans to the equivalent new plan at the same price point.  For the overwhelming majority of our customers (98%), this will either result in an overall decrease in their spending or their spending will stay the same.  In the few cases of customers whose costs are higher under the new packages (mainly customers from early 2008), we will grandfather them in under their existing plans.</p><p>Thanks again for trusting Vae and I hope that these changes help you launch even more websites in the coming months.  Feel free to contact me with any questions.</p> http://vaeplatform.com/post/price-drop http://vaeplatform.com/post/price-drop Tue, 31 Aug 2010 00:00:00 -0400 Better if/elseif/else support update <p>A few days ago, we posted about VaeML's better if/elseif/else support.  I mentioned that this was available to all existing sites.  What I forgot to say is that mixing and matching the old-style (<v:else> tag inside the tag that it applies to) and new-style (<v:else> tag after the tag it applies to) on the same site can cause ambiguity when there are nested tags.  We've had some designers get confused because I mistakenly gave the impression that mixing the styles on the same site would work.  This is not the case.</p><p>Here's how we're going to handle this:  for new sites, the new style will be expected by default.  For existing sites, the old style will be expected by default.</p><p>For existing sites wishing to use the new style, you will need to explicitly disable the old style by going to the Site tab > Optimization tab and unchecking the checkbox for "<em>Allow <v:else> inside the tag they apply to</em>".  For new sites wishing to use the old style, go in and check that checkbox.</p> http://vaeplatform.com/post/better-ifelseifelse-support-update http://vaeplatform.com/post/better-ifelseifelse-support-update Wed, 30 Jun 2010 00:00:00 -0400 PayPal changes might affect your site <p>We have become aware that PayPal has made changes that *may* impact the integration between Vae CMS and PayPal.  This applies to people using PayPal Website Payments Standard, PayPal's no-monthly-fee product.</p><p>Specifically, our PayPal standard integration relies on a PayPal feature called Instant Payment Notification ("IPN").  IPN used to be enabled by default on all PayPal accounts, so our integration worked out-of-the-box.  </p><p>It seems that PayPal no longer enables IPN by default, and in some cases has retroactively disabled it on some accounts.  We're not sure why.  It is supremely annoying that PayPal made these changes without making any official announcement (at least that we can find), and it is easy to find reports on the Internet of other people who have been bitten by this.</p><p><strong>If you are using PayPal Website Payments Standard, you should log into your PayPal account and verify that IPN is enabled.</strong></p><p>Here are instructions on how to do so:</p><ol><li>Log in at<a href=" http://www.paypal.com/" target="_blank"> http://www.paypal.com/</a></li><li>From the navigation bar at the top, choose "Profile", under the "My Account" tab.</li><li>Click the link that says "Instant Payment Notification Preferences".</li><li>If you are in the USA, you should be on this URL:<br />https://www.paypal.com/US/cgi-bin/webscr?cmd=_profile-ipn-notify</li><li>If you see a button that says "Choose IPN Settings", you need to enable IPN.  Click that button.  Select the option for "Receive IPN messages (Enabled)".  For the URL, enter the following: <br /><br />http://<yoursite>.vaesite.com/?__v:store_payment_method_ipn=paypal</span></span><br /><br />Replace <yoursite> with the same subdomain that you use to login to the Vae backstage.  So if your site's backstage is "http://btg.vaeplatform.com", use "btg".  Note that this URL uses "vaesite.com", not "vaeplatform.com".  Then click the "Save" button.<br /><br />You should then see that IPN message delivery is Enabled.</li><li>If you see that IPN is already enabled, you do not need to take any action.</li></ol><p><strong>Additionally, you should check your PayPal account to make sure that there are no transactions in there that did not get synced to your Vae CMS backstage.</strong></p><p>We are very sorry that this action is required, however, when supporting 3rd party payment gateways, we will always be at the mercy of any decisions or changes they make.</p><p>Please feel free to contact your account manager or support if you have any questions.</p> http://vaeplatform.com/post/paypal-changes-might-affect-your-site http://vaeplatform.com/post/paypal-changes-might-affect-your-site Tue, 29 Jun 2010 00:00:00 -0400 VaeML gets better if/elseif/else support <p>VaeML, our awesome content presentation language, now has better support for if-statements.  Before, we did not support the idea of an elseif statement, and we had a weird notion that a <v:else> tag should be nested inside a <v:if> tag rather than coming after it.</p><p>We have fixed both of these issues.  Observe:</p><pre><v:if path="price>500"><br />Comes with free overnight shipping!<br /></v:if><br /><v:elseif path="price>250"><br />Comes with free 2-day shipping!<br /></v:elseif><br /><v:else><br />Comes with free ground shipping!<br /></v:else></pre><p>It's the new hotness.  Note that you can still nest <v:else> inside <v:if> if you'd prefer it that way.</p><p>By the way, if you use <a href="http://docs.vaeplatform.com/haml_sass">Haml</a>, it makes the above look a lot more elegant:</p><pre>%v:if(path="price>500")<br /> Comes with free overnight shipping!<br />%v:elseif(path="price>250")<br /> Comes with free 2-day shipping!<br />%v:else<br /> Comes with free ground shipping!</pre><p>Enjoy!</p> http://vaeplatform.com/post/verbml-gets-better-ifelseifelse-support http://vaeplatform.com/post/verbml-gets-better-ifelseifelse-support Fri, 25 Jun 2010 00:00:00 -0400 VaeQL brings more power to Vae <p>We are proud to announce our latest innovation to the Vae platform: <strong>VaeQL</strong>.  VaeQL stands for Vae Query Language and it is a new layer in the stack that handles the <strong>vae()</strong> PHP function and paths provided to VaeML tags via the <strong>path=""</strong> attribute.</p><p>VaeQL adds the ability to perform math operations, comparisons, if statements, variables, and PHP functions directly in your <strong>path=""</strong> attributes and any other place a path is used in Vae.  There's a lot here, so we'll break it down with some examples.</p><p><strong>1.  Beef up your <v:if> statements.</strong></p><p>Previously, you could only test for the existence of a field within a <v:if> statement.  You can now perform any kind of test, and you may also group tests together.  Let's start with a simple comparison.  This would test if the price structure is greater than 5:</p><pre><v:if path="price>5"></pre><p>Yep, that's now valid VaeML.  <, <=, and >= also work.  You can also test equality and inequality:</p><pre><v:if path="name=='Kevin'"><br /><v:if path="name!='Kevin'"></pre><p>You may also use a single equal sign for equality and the <> operator for inequality.  Whatever you prefer.  Now, let's get fancy:</p><pre><v:if path="(price+5)</home/featured_price"><br /> This item is more than $5 less than the featured item price!<br /></v:if></pre><p>The math operators +, and - work as expected for add and subtract. Multiplication and division are also supported, though their operators are doubled: ** and //.  This is to prevent confusion, as otherwise, we wouldn't know if artist/123 meant the artist with ID 123, or the value of artist divided by 123.  </p><p>What if you wanted to test if the price is an even number?  Do this:</p><pre><v:if path="!(price%2)"></pre><p>The % operator is the modulus operator, which represents the remainder from performing an integer division.  In our example, this will be 0 for even numbers.  We add the not operator (the exclamation mark) to take the reverse of this -- return true when the modulus is 0, and false otherwise.</p><p>You can also check for multiple conditions:</p><pre><v:if path="featured&&digital">This is a featured digital product</v:if></pre><p>&& is the symbol for and, || is the symbol for or.  You can also use the words 'and' and 'or' directly.  This would be the same thing as above:</p><pre><v:if path="featured and digital">This is a featured digital <br />product</v:if></pre><p><strong>2.  Adding conditional statements to other VaeML tags</strong></p><p>VaeQL also supports the "inline-if" statement popular in many programming langauges.  It works like this:</p><pre><v:text path="featured ? featured_description : description" /></pre><p>If the path featured evaluates to true (it's a checked checkbox or a text field with text in it, etc.), then we will display the featured_description.  Otherwise, just the regular description.</p><p>Combine this with the above, and we can make some pretty awesome statements:</p><pre><v:text path="(price>=100 and featured) ? 'SUPER VALUE!' : 'Good Value')" /></pre><p>Note that you can use request variables within VaeQL as well:</p><pre><v:text path="($from == 'wholesale' ? wholesale_description : description)" /></pre><p>Note that in VaeQL, variables correspond to the request variables sent to the page either via a POST or in the URL.  This corresponds (and is linked into) the $_REQUEST array in PHP. </p><p><strong>3.  Built-in support for PHP Functions</strong></p><p>Vae paths have always supported some functions such as now() and host().  These were built-in functions, and there were only a few available.  Now VaeQL supports the entire PHP function library, and you can even define your own functions in PHP and use them in VaeML.  All the old functions are there too.</p><p>Here are some examples:</p><pre><v:text path="substr(description, 10, 10)" /><br /><v:collection path="items[price<PRICECUTOFF()]"></pre><p>Functions can take arguments, which can be paths, variables, functions, or a full VaeQL query in its own right.</p><p>VaeQL also supports "range queries", which will let you specify a range for values.  Use a colon and a function within a predicate.  This would search for items with prices between $10 and $50:</p><pre>// in __verb.php:<br />function PRICERANGE() {<br />  return array(10, 50);<br />}<v:collection path="items[price:PRICERANGE()]"></pre><p><strong>4.  Go crazy!</strong></p><p>All of these things can be combined and used in all sorts of ways.  Play with it and figure out what works best for your applications.</p><p>VaeQL is immediately available on all Vae sites.  As always, thanks for using Vae!</p> http://vaeplatform.com/post/verbql-brings-more-power-to-verb http://vaeplatform.com/post/verbql-brings-more-power-to-verb Tue, 15 Jun 2010 00:00:00 -0400 Uniqueness constraints in vae() and <v:collection> <p>Let's say you had a catalog of albums stored in a collection.  Each album was released during a specific year.  If you wanted to display to display all the years where your record label created albums, you'd probably do something like:</p><pre><v:collection path="/albums" order="DESC(year)"><br /> <v:text path="year" /><br /></v:collection></pre><p>But this might actually produce something like this:</p><pre>2010<br />2010<br />2010<br />2009<br />2009<br />2008<br />2008<br />(etc.)</pre><p>Eww, look at all those repeats.  That's not what you wanted.</p><p>Now Vae provides a way to select only the first record for each year, so you can display your list as intended.  Simply add <strong>unique="year"</strong> to the<strong> <v:collection></strong> tag.  Or, if you're using our PHP API, just add<strong> 'unique' => 'year' </strong>to your array of options that you pass into <strong>vae()</strong>.</p><p>So something like this:</p><pre><v:collection path="/albums" order="DESC(year)" unique="year"><br /> <v:text path="year" /><br /></v:collection></pre><p>Would produce something like this:</p><pre>2010<br />2009<br />2008<br />(etc.)</pre><p>Note -- you can look for unique <em>sets</em> of structures by specifying their names separated by commas.  For example <strong>unique="year,month"</strong>.</p><p>This was non-trivial for us to implement, so I hope that you are able to take this and go make something cool with it!</p> http://vaeplatform.com/post/uniqueness-constraints-in-verb-and-vcollection http://vaeplatform.com/post/uniqueness-constraints-in-verb-and-vcollection Fri, 21 May 2010 00:00:00 -0400 DNS Redundancy Update <p>This post is to let everyone know that we have added a 3rd DNS server to provide an extra level of redundancy in our DNS systems.</p><p>This DNS server will only be used if you add it to your domains at their registrar, so we recommend that you do so wherever you can.  It's not <em>critical</em>, but extra levels of protection against downtime never hurt.</p><p>These are our current nameservers:</p><p>NS1.HOSTED.BY.ACTIONVERB.COM<br />NS2.HOSTED.BY.ACTIONVERB.COM<br />NS3.HOSTED.BY.ACTIONVERB.COM (new)</p><p>[note, versions without the "HOSTED.BY" are also available, but we prefer that you use the fully spelled out version so it is clear to anyone who looks that your sites are our <em>customers</em> not <em>properties</em>].</p><p>Please feel free to drop us a line with any questions.</p> http://vaeplatform.com/post/dns-redundancy-update http://vaeplatform.com/post/dns-redundancy-update Tue, 18 May 2010 00:00:00 -0400 Better Permalinks <p><em>First, a programming note to anyone who subscribes to this blog via RSS, most of our updates have moved to Twitter!  Follow us at <a href="http://twitter.com/VaePlatform">http://twitter.com/VaePlatform</a>.</em></p><p>We just made a pretty cool change to the way permalinks work on Vae.  They've always been a confluence of 2 things:  they represent both a context and a particular HTML template.  Well, what if you want to render a different page but within the same context?</p><p>For example, let's say you have a collection called <strong>Items</strong>, permalinking to HTML page called <strong>item.html</strong>.  A permalink for an item (say, Freefall's <em>Road Trip EP</em> album) might look like <strong>http://example.com/item/freefall-road-trip-ep</strong>.  This is a very semantic, readable, and SEO-friendly URL.  I like it a lot.  </p><p>But what if you had another page that renders the reviews of that album?  Say, <strong>reviews.html</strong>.  Before, you would need to link to that page explicitly and pass the ID of the item in as a parameter.  The URL (as generated by the <strong><v:a></strong> tag) looked like this: <strong>http://example.com/reviews/13423</strong>. Definitely less obvious and less SEO-friendly.</p><p>We've made this better.  Now, the URL will be generated by appending the new template HTML file name to the <em>end</em> of the permalink.  That review link will now look like <strong>http://example.com/item/freefall-road-trip-ep/reviews</strong>.  Much better.  Our page rendering engine will know to load the HTML file called reviews and render it within the context of the <em>Road Trip EP</em>.  </p><p>The <strong><v:a></strong> tag has been updated to automatically generate the new-style URLs.  If you're generating URLs manually in PHP, you can just start generating links in the new style.</p><p>Enjoy!</p> http://vaeplatform.com/post/better-permalinks http://vaeplatform.com/post/better-permalinks Thu, 13 May 2010 00:00:00 -0400 Release: New Vae Data API for PHP <p>It's been a while since we've had a major feature announcement here at Vae CMS, but this is a big one! We're proud to announce Version 2 of the Vae Data API, which is available and running on all Vae accounts as of today.  The new API is an object-oriented replacement for the current <strong>vae()</strong> and <strong>vae_find()</strong> functions in PHP, and is also used by any VaeML tag that accepts a <strong>path=""</strong> attribute. </p><p>The biggest feature of the new release is performance.  The old Vae Data API has long been a major bottleneck for Vae sites, especially on sites with large amounts of data or heavy use of associations.  With the new release, we have addressed both of these issues head-on, and have reduced page rendering times by as much as 90% for some pages.  The upgrade is included in all Vae plans for no additional charge.</p><p>Behind the scenes, the new API is powered by a new set of Vae Database servers running our new proprietary database server software, VaeDB.  VaeDB is a ground-up rewrite of Vae's data storage and query engine.  All data  (including associations) is now stored in RAM at all times to enable lightning-fast lookups without having to read from the disk. Additionally, VaeDB analyzes your query history to anticipate future queries and get your data ready before you even ask for it.</p><p>The other major feature of the new API is its object-oriented nature.  Since examples are worth 1000 words, here's a quick overview of how the new API works.  Non-coders might want to skip this part. </p><p><strong>vae()</strong> and <strong>vae_find()</strong> are now the same function and may be used interchangeably.</p><p>They return a <strong>VaeContext</strong> or <strong>VaeQuery</strong> object that contains the results of your query.  <strong>VaeContext</strong> and <strong>VaeQuery</strong> present mostly the same interface.  Let's start up the example with a familiar looking query that retrieves an Artist by ID:</p><pre>$artist = vae("artists/13421");</pre><p>Child structures may be accessed by either the arrow operator or via array notation:</p><pre>echo $artist->name;<br />echo $artist['name'];</pre><p>If your query returned multiple contexts (for example if you asked for a collection), you may iterate over the object just like it was an array:</p><pre>$artists = vae("artists");<br />foreach ($artists as $artist) {<br />  echo $artist->name;<br />}</pre><p>You can get the ID, <a href="http://docs.vaeplatform.com/permalinks">permalink</a>, or type of any context easily, via the arrow operator or array notation:</p><pre>$artist = vae("artists/13421");<br />echo $artist->id;           // 13421<br />echo $artist->permalink;    // artist/freefall<br />echo $artist->type;         // Collection<br />echo $artist->name->type;   // TextItem<br />echo $artist->albums->type; // Collection</pre><p>You can also get info about the structure represented by the context:</p><pre>$artist = vae("artists/13421");<br />echo $artist->structure->id;        // 1269<br />echo $artist->structure->name;      // Artists<br />echo $artist->structure->type;      // Collection<br />echo $artist->structure->permalink; // artist   (URL of page to render by default for permalinks)</pre><p>You can still get the ID in the foreach block too:</p><pre>$artists = vae("artists");<br />foreach ($artists as $id => $artist) {<br />  echo $artist->name;<br />}</pre><p>Run scoped XPath queries via the get() method, which supports any valid <a href="http://docs.vaeplatform.com/vaeql">VaeQL</a> expression:</p><pre>$artists = vae("artists");<br />foreach ($artists as $artist) {<br />  foreach ($artist->get("albums[type='CD']") as $album) {<br />    echo $album->name . " is a CD!";<br />  }<br />}</pre><p>All query options that were previously supported are still supported.  We have also added query options for pagination. They get passed in as a parameter, after the query. Supported options include filter, groups, limit, order, paginate, page, and skip:</p><pre>$artists = vae("artists", array('limit' => 10));<br />$artists = vae("artists", array('paginate' => 5, 'page' => 2));<br />$albums = $artists->get("albums", array('order' => 'name'));<br />$albums = $artists->albums(array('order' => 'name')); // same as above, shortcut syntax</pre><p>Debugging functions like var_dump() (including serialize(), print_r(), var_export(), etc.) will not work directly on the new objects. However, we've wired up a special method that will allow you to debug your code like many of you have always done.  Just invoke the debug method on the object:</p><pre>var_dump($artist->debug);</pre><p>Note:  Internally the <strong>debug() </strong>method is the same as the <strong>data()</strong> method, which I'll tell you about in a second.</p><p>And for the really geeky, a few more implementation details: The <strong>$context</strong> variable passed into functions registered with <a href="http://docs.vaeplatform.com/php_vae_register_hook">vae_register_hook()</a> will now be a <strong>VaeContext</strong> object. You may manipulate it in your hook functions just as if you had created it in PHP.  Additionally, you can create a <strong>VaeContext</strong> object out of your own vanilla PHP arrays by invoking the <a href="http://docs.vaeplatform.com/">vae_context()</a> function on that array.</p><p>You don't have to do anything at all to enjoy the speed boosts and object-oriented features provided by the new API.  </p><p>We've rolled it out onto your sites and you are up and rolling.  You may begin using the Object-Oriented features in your PHP code right away as well.  Over the next few months, we will use statistics gathered from the system to build in further optimizations for speed.</p><p><strong>*** IMPORTANT ***</strong></p><p>For the most part, this API is backwards-compatible with the old API. There is, however, a few things about the new API that may break your old code, though we checked and don't think they affect any websites currently live.</p><p>You may no longer directly iterate over the child structures of a context.  For example, this used to work, but will not work anymore:</p><pre>foreach (vae("artists") as $artist) {<br />  foreach ($artist as $structure_name => $value) {<br />    echo $structure_name . ": " . $value . "\n";<br />  }<br />}</pre><p>This change was necessary in order to combine the vae() and vae_find() functions into a single function.</p><p>This would work though:</p><pre>foreach (vae("artists") as $artist) {<br />  echo "name:  " . $artist->name  . "\n";<br />  echo "genre: " . $artist->genre . "\n";<br />  echo "bio:   " . $artist->bio   . "\n";<br />}</pre><p>That is, you want your code to explicitly state the name of the structure you wish to access.</p><p>If you need to access context data as an array (like before), just invoke the data() method on the object:</p><pre>foreach (vae("artists") as $artist) {<br />  foreach ($artist->data as $structure_name => $value) {<br />    echo $structure_name . ": " . $value . "\n";<br />  }<br />}</pre><p>Also, you need to be careful using objects in "if" statements, as the object will always return true.  For example, this will not work as expected:</p><pre>if (vae("artists")) {<br />  echo "There are artists";<br />}</pre><p>You can use the ->count() method to achieve what you want:</p><pre>if (vae("artists")->count) {<br />  echo "There are artists";<br />}</pre><p>Additionally, you should be careful when casting values to a numeric type.  This will not work as expected:</p><pre>foreach (vae("artists") as $artist) {<br />  echo (int)$artist->age;<br />}</pre><p>This is because objects may not be directly cast to numeric types.  If you need a numeric value, you'll need to first cast to a string.</p><pre>foreach (vae("artists") as $artist) {<br />  echo strftime("%m-%d-%Y", (string)$artist->formed_on);<br />}</pre><p>I think that covers most of the breaking changes and gotchas.</p><p>Thanks for reading this far.  I hope that this made your day.  I also hope that I explained everything fully and that there are no unforeseen complications or bugs.  If you have any questions or notice any issues, please email <a href="mailto:[email protected]">[email protected]</a> and we'll get it  ironed out immediately.</p><p>I really appreciate your support of Vae Platform, and look forward to bringing you many new toys in the future!</p><p>Kevin Bombino<br />Founder<br />Vae Platform</p> http://vaeplatform.com/post/release-new-verb-data-api-for-p http://vaeplatform.com/post/release-new-verb-data-api-for-p Thu, 18 Feb 2010 00:00:00 -0500 Release: Production Environments! <p>Hey guys!  It's been a while, but the time has come for a new Vae feature.  And we think this one is huge.  We're proud to announce that Vae now has full support for a separation of Staging and Production environments on your website.</p><p>We worked hard to develop this feature in a way that fits in naturally with the different workflows employed by the many different designers using Vae.  Basically, this is how it will work:</p><p>Once you opt-in to Vae's Production Environment feature for one of your domains by going to the Domains tab under the Vae tab, Vae will create a Production Environment for that website.  FTP will be directed to the Staging Environment, which can be browsed at<a href=" http://<" target="_blank"> http://<</a>;site>.vaesite.com/.  Any changes made to the FTP will be instantly reflected there.  However, they will not be reflected on the main domain until perform a 'release'.  </p><p>You can release your site to the production environment from the new Production Environment tab under the Site tab.</p><p>5 previous releases are stored, and you may roll back to them at any time.  This provides an awesome recovery option if you accidentally release a bad copy of the site.</p><p>Here's what it looks like:</p><p><img alt="Screenshot of Releases" src="https://vaeplatform.com/__data/2c75b7ef376a224e4f6eef5f151a22d7.png" /></p><p>You may also make a new release by using the <a href="http://docs.vaeplatform.com/vae_local">Vae Local Development Environment</a>.  Simply type <strong>verb release</strong> to make a new release to production.  Or type <strong>vae stagerelease</strong> to update the Staging Environment and Production Environment with the current copy from Subversion.</p><p>The best part of all: there is no additional cost for this feature.  It's just one more thing that we're doing to make Vae the most powerful and unique shared hosting environment in existence.  Thanks for your support!</p><p>If you have any questions, please direct them to <a href="mailto:[email protected]">[email protected]</a>.</p> http://vaeplatform.com/post/release-production-environments http://vaeplatform.com/post/release-production-environments Wed, 23 Dec 2009 00:00:00 -0500 Video Tuesday: Building Zips <p><div id='107'> <div id='vcontainer8'> <div class='stuff'> <a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> so you can see an awesome video about Vae. </div> </div> <script type='text/javascript'> var s1 = new SWFObject("/__assets/player.swf","ply","640","500","9","#35383a"); s1.addParam("allowfullscreen","true"); s1.addParam("allowscriptaccess","always"); s1.addParam("flashvars","file=http://assets.vaesite.com/videos/zip.mov&volume=100&screencolor=35383a&backcolor=e6e8ea"); s1.write("vcontainer8"); </script> </div> </p><p>Today we're showing you how to dynamically create zip files using Vae's <a href="http://docs.vaeplatform.com/v_zip"><v:zip></a> tag. For more videos and examples, check out our Documentation and Integration Center.</p> http://vaeplatform.com/post/video-tuesday-building-zips http://vaeplatform.com/post/video-tuesday-building-zips Tue, 28 Jul 2009 00:00:00 -0400 Video Tuesday: Permalinks <p><div id='106'> <div id='vcontainer7'> <div class='stuff'> <a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> so you can see an awesome video about Vae. </div> </div> <script type='text/javascript'> var s1 = new SWFObject("/__assets/player.swf","ply","640","500","9","#35383a"); s1.addParam("allowfullscreen","true"); s1.addParam("allowscriptaccess","always"); s1.addParam("flashvars","file=http://assets.vaesite.com/videos/permalinks.mov&volume=100&screencolor=35383a&backcolor=e6e8ea"); s1.write("vcontainer7"); </script> </div></p><p><a href="http://docs.vaeplatform.com/permalinks">Permalinks</a> keep your address bar clean, is good for SEO, and is easy to implement with Vae. As always, check out our <a href="http://docs.vaeplatform.com/examples">Documentation and Integration Center</a> for more videos and tutorials.</p> http://vaeplatform.com/post/video-tuesday-permalinks http://vaeplatform.com/post/video-tuesday-permalinks Tue, 14 Jul 2009 00:00:00 -0400 Using <v:rss> With Google Product Search <p>As you may know, <strong><a href="http://docs.vaeplatform.com/v_rss"><v:rss></a></strong> makes it easy to quickly create an <a href="http://en.wikipedia.org/wiki/RSS">RSS</a> feed from any <a href="http://docs.vaeplatform.com/structure.collection">Collection</a> in your site. Vae also takes this a step further by making it easy to create an RSS feed that can be submitted to <a href="http://www.google.com/products">Google Product Search</a>, so potential customers can locate your items when querying this search engine. In this mini tutorial, we'll create an RSS feed that's ready to submit to Google Product Search.</p><p>Here's our example Collection that we're going to be working with; it's called "Records":<strong><br /><img alt="Structure" title="Structure" src="http://assets.vaesite.com/images/blog/using_rss/structure.png" /></strong></p><p><strong><v:rss></strong> works with any Collection, so you can quickly create RSS feeds from your existing Collections.</p><p>Next, we'll need to write the code inside our <strong>rss.xml</strong> file. Normally it takes just one line of VaeML code to create an RSS feed; since we're submitting this feed to Google Product Search, we'll have to add some <a href="http://base.google.com/support/bin/topic.py?topic=2903">Google Base</a> tags. Here's the contents of our <strong>rss.xml</strong> file:</p><pre><v:rss title="Action Verb Records" description="Records" path="records" title_field="record_name" description_field="description"><br /> <g:condition>new</g:condition><br /> <g:id><v-></g:id><br /> <g:payment_accepted>Visa</g:payment_accepted><br /> <g:payment_accepted>MasterCard</g:payment_accepted><br /> <g:payment_accepted>AmericanExpress</g:payment_accepted><br /> <g:payment_accepted>Discover</g:payment_accepted><br /> <g:price><v=price></g:price><br /></v:rss></pre><p>And we're all done! When we load up the RSS file in our browser, we can see the contents of the Collection is now accessible via RSS:<br /><img alt="Output" title="Output" src="http://assets.vaesite.com/images/blog/using_rss/output.png" /></p><p>If our customers wanted to easily stay up-to-date on what records we have for sale, they could subscribe to this RSS feed using any browser or RSS client. Since we can use <strong><v:rss></strong> to output the contents of any Collection, we could just as easily create an RSS file for our blog or any other Collection our customers might want to subscribe to.</p><p>Since we integrated the Google Base Tags into our RSS feed, it's ready to be submitted to Google Product Search [just follow <a href="http://base.google.com/support/bin/answer.py?answer=59537&hl=en">Google's instructions</a>]. After we submit it, our records will appear in Google Product Search results, and we'll have increased traffic to our website without much effort.</p> http://vaeplatform.com/post/using-vrss-with-google-product- http://vaeplatform.com/post/using-vrss-with-google-product- Wed, 08 Jul 2009 00:00:00 -0400 Video Tuesday: <v:formmail> <p><div id='103'> <div id='vcontainer4'> <div class='stuff'> <a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> so you can see an awesome video about Vae. </div> </div> <script type='text/javascript'> var s1 = new SWFObject("/__assets/player.swf","ply","640","500","9","#35383a"); s1.addParam("allowfullscreen","true"); s1.addParam("allowscriptaccess","always"); s1.addParam("flashvars","file=http://assets.vaesite.com/videos/formmail.mov&volume=100&screencolor=35383a&backcolor=e6e8ea"); s1.write("vcontainer4"); </script> </div></p><p>Vae's <a href="http://docs.vaeplatform.com/v_formmail"><v:formmail></a> helps you quickly make a form that submits to an email address.</p><p>Want more videos and tutorials? Check out our <a href="http://docs.vaeplatform.com/examples">Documentation and Integration Center</a>.</p> http://vaeplatform.com/post/video-tuesday-vformmail http://vaeplatform.com/post/video-tuesday-vformmail Tue, 07 Jul 2009 00:00:00 -0400 New Feature: Fulfillment Methods Added <p>We've added new fulfillment methods to make Vae's eCommerce even better. Our Australian customers will be happy to know that they can now utilize <a href="http://www1.auspost.com.au/priority/index.asp?area=features&article_id=685&issue_id=33">Australia Post eParcel</a>. For those of us in the states, you can now use USPS fulfillment with <a href="http://www.endicia.com/">Endicia</a>; this means you can print up postage right from your office!</p><p>To start using these new fulfillment methods, clicking on the 'Settings' subtab of your 'Store' tab:<br /><img alt="Fulfillment Screen" title="Fulfillment Screen" src="http://assets.vaesite.com/images/blog/new_feature_fulfillment_methods/fulfillment_screen.png" /></p><p>Click on any of the Fulfillment Methods to add them:<br /><img alt="Australia" title="Australia" src="http://assets.vaesite.com/images/blog/new_feature_fulfillment_methods/australian_eparcel.png" /><br />(Australia eParcel)<br /><br /><img alt="Endicia" title="Endicia" src="http://assets.vaesite.com/images/blog/new_feature_fulfillment_methods/endicia.png" /><br />(USPS w/ Endicia)<br /></p> http://vaeplatform.com/post/new-feature-fulfillment-methods http://vaeplatform.com/post/new-feature-fulfillment-methods Mon, 06 Jul 2009 00:00:00 -0400 New Feature: Quickly Add New Child Collection Entries <p> When two <a href="http://docs.vaeplatform.com/structure.collection">Collections</a> are linked by an <a href="http://docs.vaeplatform.com/structure.association_single">Association Structure [single]</a>, it sometimes can be a pain to add a new entry to the Child Collection, when creating a new entry in the Parent Collection. Vae loves making your clients' lives easier, so we've added a new feature to make alleviate this issue. The Association Structure [single] create screen now contains a checkbox called <strong>Display "Create New" option</strong>. When enabled, it gives users the option of adding a new entry to an associated Child Collection, when modifying its Parent Collection. Confused? Let's try an example.</p><p>Here we are creating an Association Structure between two Collections called 'Shows' and 'Venues':<br /><img alt="Create Association" title="Create Association" src="http://assets.vaesite.com/images/blog/quickly_add_child_collection_entries/create_association.png" height="464" width="730" /></p><p>Notice the enabled <strong>Display "Create New" option</strong>. Now, when we add a new 'Show' to the 'Shows' Collection (aka the Parent Collection), we can select "Create New Venue" from the Venue select menu. We're then presented with an inline form where we can create a new Venue, without having to navigate to the Venue Collection:<br /><img alt="Shows Create" title="Shows Create" src="http://assets.vaesite.com/images/blog/quickly_add_child_collection_entries/shows_create.png" /></p><p>Great. Now the next time a band on Action Verb Records goes on tour, we can easily add new Venues as we add new Shows.</p> http://vaeplatform.com/post/new-feature http://vaeplatform.com/post/new-feature Wed, 01 Jul 2009 00:00:00 -0400 Video Tuesday: Image Sizes <p><div id='104'> <div id='vcontainer5'> <div class='stuff'> <a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> so you can see an awesome video about Vae. </div> </div> <script type='text/javascript'> var s1 = new SWFObject("/__assets/player.swf","ply","640","500","9","#35383a"); s1.addParam("allowfullscreen","true"); s1.addParam("allowscriptaccess","always"); s1.addParam("flashvars","file=http://assets.vaesite.com/videos/image_sizes.mov&volume=100&screencolor=35383a&backcolor=e6e8ea"); s1.write("vcontainer5"); </script> </div></p><p>Today we bring you a video on Image Sizes. Image Sizes allow you and your clients to crop your image files immediately after they are uploaded, and display them in the cropped format on the website. Vae lets you specify multiple Image Sizes, making it possible to display both a thumbnail version of an image and a larger one on the same site, without uploading more than one image. See our documentation page on the <a href="http://docs.vaeplatform.com/structure.image">Image Structure</a> for more information.</p><p>Our <a href="http://docs.vaeplatform.com/examples">Documentation and Integration Center</a> contains many more videos and tutorials. Check it out!</p> http://vaeplatform.com/post/video-tuesday-image-sizes http://vaeplatform.com/post/video-tuesday-image-sizes Tue, 30 Jun 2009 00:00:00 -0400 It's Easy to Integrate Coupon Codes <p>Following up with yesterday's lesson on setting up coupon codes, today we'll show you the code to accept coupon codes. Once you've set up your Coupon Code in the backend, all you need to do is add a simple code snippet to your store's page:</p><pre><v:store:if_discount><br /> Special Offer code applied.<br /> <v:else><br />  <v:store:discount><br />   If you have a Special Offer Code, enter it here and click Apply: <v:text_field name="discount" /><br />   <input type="submit" value="Apply" /><br />  </v:store:discount><br /> </v:else><br /></v:store:if_discount></pre><p>We used the <a href="http://docs.vaeplatform.com/v_store_if_discount"><v:store:if_discount></a> and <a href="http://docs.vaeplatform.com/v_store_cart_discount"><v:store:discount></a> tags to allow the user to input a coupon code. Lets see how this renders:</p><p><img alt="coupon code" title="coupon code" src="http://assets.vaesite.com/images/blog/its_easy_to_integrate_coupon_codes/cc2.png" /></p><p>After entering our 2buxoff coupon code (that we created yesterday), we can see the discount is reflected in the total:</p><p><img alt="coupon code" title="coupon code" src="http://assets.vaesite.com/images/blog/its_easy_to_integrate_coupon_codes/cc1.png" /></p> http://vaeplatform.com/post/its-easy-to-integrate-coupon-co http://vaeplatform.com/post/its-easy-to-integrate-coupon-co Thu, 25 Jun 2009 00:00:00 -0400 It's Easy to Setup Coupon Codes <p>The thought of adding coupon codes to your site's Store might make you worry about keeping track of convoluted rules, but we've done our best to keep this feature of Verb's eCommerce uncomplicated. To add a new coupon code, just click on the 'Coupon Code' subtab of the 'Store' tab. With two clicks, you can have a new coupon code. When you create a code, there's lots of options that you can choose to specify (or not):</p><p><img alt="Add Coupon Code" title="Add Coupon Code" src="http://assets.vaesite.com/images/blog/its_easy_to_setup_coupon_codes/coupon_code_create.png" /></p><p>Note all the fields that you can work with here:</p><ul><li><strong>Code:</strong> The alphanumeric code your user will need to type in to redeem their discount.</li><li><strong>Description:</strong> A description of the coupon, for your own reference.</li><li><strong>Fixed $ Amount:</strong> Removes a fixed amount from the total price.</li><li><strong>Percentage % Discount:</strong> Removes a percentage from the total price.</li><li><strong>Coupon Start Date:</strong> Allows you to specify a certain date when the coupon will start to be functional.</li><li><strong>Coupon Expiration Date:</strong> The date at which you want to coupon to cease functioning.</li><li><strong>Number Available: </strong>The total number of times this coupon may be used (by all customers) before it stops functioning.</li><li><strong>Max Uses Per Customer: </strong>The total number of times this coupon may be used by a single customer before it stops functioning for them.</li><li><strong>Minimum Order $ Amount:</strong> The minimum amount the customer may be spending before the coupon code functions.</li><li><strong>Minimum Number of Items In Order:</strong> The minimum number of items the customer must have in their cart before the coupon code functions.</li><li><strong>Apply discounts to shipping fees?: </strong>When checked, this sums the total with the shipping costs before applying the coupon code.</li></ul> http://vaeplatform.com/post/its-easy-to-setup-coupon-codes http://vaeplatform.com/post/its-easy-to-setup-coupon-codes Wed, 24 Jun 2009 00:00:00 -0400 Video Tuesday: Vae and Flash <p>Vae can integrate seamlessly into the XML backend of your Flash site. Here's a small example where we'll automatically feed MP3s into a Flash MP3 player on our Action Verb Records website. The player plays songs specific to whatever Artists page we're viewing, and when we add a new MP3 to a certain artist in our site's <a href="http://docs.vaeplatform.com/backstage">Backstage</a>, they are instantly <div id='102'> <div id='vcontainer3'> <div class='stuff'> <a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> so you can see an awesome video about Vae. </div> </div> <script type='text/javascript'> var s1 = new SWFObject("/__assets/player.swf","ply","640","500","9","#35383a"); s1.addParam("allowfullscreen","true"); s1.addParam("allowscriptaccess","always"); s1.addParam("flashvars","file=http://assets.vaesite.com/videos/flash.mov&volume=100&screencolor=35383a&backcolor=e6e8ea"); s1.write("vcontainer3"); </script> </div>available in the Flash player.</p><p>We have more videos in our <a href="http://docs.vaeplatform.com/examples">Documentation and Integration Center</a>.</p> http://vaeplatform.com/post/video-tuesday-verb-and-flash http://vaeplatform.com/post/video-tuesday-verb-and-flash Tue, 23 Jun 2009 00:00:00 -0400 Use the Right Editor <p>It can be a headache to edit, save, and upload the files via FTP onto your Vae site. That's why we recommend using an editor with integrated FTP. With one of these editors, you can type in your ftp information once, bookmark it, and then edit files directly in your web space. Every time you hit save, the editor uploads your changes to the file. Here's a few recommendations for possible editors:</p><p><strong>Mac OS X</strong></p><ul><li><a href="http://www.panic.com/coda/">Coda</a> has a great interface. We use it here at Vae, and so do many of our designers. Besides integrated FTP, Coda has many other advanced features that can make your coding process more efficient.</li><li><a href="http://www.barebones.com/products/bbedit/">BBEdit</a> is also a fine editor. We think it's impressive that BBEdit integrates with VMWare Fusion, giving you the ability to preview your work in Internet Explorer - on a Mac! </li><li><a href="http://www.tuppis.com/smultron/">Smultron</a> is free and easy to use. A good editor for basic text editing.</li></ul><p><strong>Windows</strong></p><ul><li><a href="http://www.coffeecup.com/direct-ftp/">Coffee Cup</a> will help our Windows-using friends edit code just as well as us Mac-nerds do.</li></ul><p>If you have a favorite editor that we're not mentioning here, please <a href="mailto:[email protected]">let us know</a>. We're always looking for new ways to make our designers' lives easier.</p> http://vaeplatform.com/post/use-the-right-editor http://vaeplatform.com/post/use-the-right-editor Mon, 22 Jun 2009 00:00:00 -0400 We're Hosted... And That's A Good Thing! <p> Are you concerned with the fact that Vae is a hosted solution? It’s something we often get asked about as designers assess Vae. Not having full control over your site is a scary prospect for many people, understandably. At Vae, we know that being a hosted CMS means added responsibility, and we take that seriously. We work closely with our webhost to ensure uptime and perform regular analysis to alleviate any bottlenecks.<br /><br />There are many other benefits to using our hosted CMS. No longer will you need to toil with software installs, worry about security patches, or bargain with hosting companies. Your clients benefit too from the simplicity of only paying a single bill. <br /><br />It’s our aim to provide you with a stellar CMS and the best hosting possible, all at a fair price. If you’re interested in more details about our webhosting, please contact us and we’ll answer any and all of your questions.</p> http://vaeplatform.com/post/were-hosted-and-thats-a-good-th http://vaeplatform.com/post/were-hosted-and-thats-a-good-th Fri, 19 Jun 2009 00:00:00 -0400 We <3 Feedback <p>If you're reading our blog, hopefully you're aware by now that we're a different breed of CMS. To add to the list of reasons why is this: we listen to our designers. Vae is an exceptional platform, but we aggressively seek new ways we can make it better, faster, and easier to work with. We've already added several features in response to the needs of our designers (see also: <a href="http://vaeplatform.com/post/scheduling-a-blog-post">Blog Post Scheduling</a>).</p><p>So today, we're reaching out and asking you to tell us what you think about Vae. Is something slowing you down? Is there a problem you're trying to solve and you don't know how? In return, you can expect we'll work with you to find a solution if one exists already (more often than not this is the case), or we'll log it as a feature request and let you know how long you can expect to wait before it's available.</p><p>So send us an <a href="mailto:[email protected]">email</a>, or contact your account manager. We look forward to hearing from you!</p> http://vaeplatform.com/post/we-want-your-feedback http://vaeplatform.com/post/we-want-your-feedback Thu, 18 Jun 2009 00:00:00 -0400