Weblog
Friday, August 27, 2010 |
|
Andrew vonderLuft of AVLUX has officially joined the core team as our resident Sys Admin. Andrew’s been serving in this capacity for a long time now so we thought it fitting to give him rank and title!
Seriously, I can’t say enough about how much Andrew has contributed by managing the Radiant infrastructure. When AVLUX first took over the hosting for the project Andrew and his team managed the complicated transition from our old servers to the new and made it as seamless as possible. At the time this was no easy task because we were running a custom install of Trac, our own Subversion repository, and our own mailing lists — not to mention our custom install of Radiant for the main website. Since that time we’ve moved over to Google and GitHub and we’ve added the extension registry. Andrew and his team have been there every step of the way.
So thank you Andrew! Thank you for your tireless efforts on behalf of the Radiant community. And welcome to the team!
Thursday, August 26, 2010 |
|
Part one of a series of episodes where you'll see a quick rundown of extensions and techniques that can used to publish blogs with Radiant.
Content
- Publishing blog posts with Radiant Archive Extension
Resources
Cristi Duma is a software engineer at Aissac.
Thursday, August 12, 2010 |
|
Thinking Sphinx is a popular choice for easily adding powerful, full-text searching to Rails applications. Find out how the Sphinx Search extension can bring the power of Thinking Sphinx to your Radiant sites in this screencast. We'll install the Sphinx Search gem, create a search form and results page, and discuss some advanced options.
Content
- Installation
- Building a Search Page
- Configuring Sphinx Search
Resources
Josh French is the senior engineer at Digital Pulp.
Continue Reading…
Tuesday, August 03, 2010 |
|
Yesterday I committed a new core extension to Radiant: Sheets
With this new feature you can manage stylesheets and javascripts from the admin interface, but before I get into the details of it you should be aware that if you don’t want this feature, you can simply prevent it from being loaded with:
config.extensions -= [:sheets]
What is Sheets?
Sheets is a way to manage stylesheets and scripts from your existing page tree. With Sheets, you’ll create new types of pages: JavascriptPage and StylesheetPage.
Pages of these types are Sheets.
The basic features:
- provide a separate interface for editing CSS and Javascript content
- set a longer expire time for Sheet content with
sheet_cache_timeout (similar to the typical cache_timeout set for pages)
- hide the JavascriptPage and StylesheetPage nodes from the standard Page index view
- provide Radius tags to output content as it is, as a link to content, and as an HTML element containing the content
- append a timestamp to sheet content URLs so that the cache need not be cleared with the same frequency for updates to typical pages
Differences with other solutions and the benefit of using Sheets
Some standard site templates provided by Radiant include stylesheet content in a typical page. This requires a custom layout merely to set the content type, and displays content unintended for editing by typical users. This makes for a cluttered page index view and cluttered layout index view.
A popular solution to these problems is the SNS extension . SNS separates the editing interfaces for these types of content, but the problem is that it makes too much of a separation. With SNS, stylesheet and javascript content is stored in a separate table and is generated by models completely unrelated to the Page model. This means that other extensions are required to do extra work to provide features and Radius tags to SNS content, and as a result many extensions do not do this work. This situation makes for a confusing introduction to Radiant for new users and developers alike.
You can get around this SNS limitation by using the SNS Page Hook extension but even this solution will lead to unpredictable results because it merely copies modules from the Page model to the TextAsset model and tricks the included methods into believing they are operating on a Page. But this is not a good long-term solution.
Sheets keeps this content in the same location as all other content: Pages. Doing it this way allows any chosen URL or Page slug to be protected properly with newly created pages. Even more importantly, this allows user and developer expectations about the behavior of Radius tags to make sense. With Sheets, extensions which add Radius tags to the Page model add them to stylesheets and javascripts too; there is no extra work to be done.
Not only does it do all this, but the standard Page model provides a headers method which Sheets overrides to alter the mime-type for the returned content. Sheets uses the built-in ways to serve content, rather than generating yet another way to serve content like SNS.
Extra features
By default Sheets has a SassFilter for text and since Radiant depends on (and includes) Sass, you’ll always have that available. But the SassFilter is just a regular TextFilter like the ones used on pages so I had to do some work to ensure that you wouldn’t be able to filter your typical Page content with Sass.
The SheetsExtension has 2 accessors: stylesheet_filters and javascript_filters.
You may manipulate the contents of these variables with your added text filters. You could write an extension to provide a Less filter:
SheetsExtension.stylesheet_filters << LessFilter
In the future, it will probably be a good idea to move these accessors off of the SheetsExtension itself and onto the ApplicationController so that you don’t need to worry about extension load order to add a text filter.
Currently, there is no interface element to alter the path from where your site will pull content. CSS is pulled from /css and Javascripts are pulled from /js. SNS was standardizing this approach because changing this setting required running rake tasks and not merely changing a simple setting. With Sheets, the path is determined by a page slug so in the future we’ll have a way to change that location to /whatever-you-want (but if you really want to do it now just jump in the console find the css or js pages and change their slugs).
I will be providing the ability to migrate your content from SNS to the page tree in some way (be it in the Sheets extension itself, in SNS, or some other migrator extension).
I still need to write some specs and cucumber features but I wanted to get this out in the wild to get feedback, so please leave your complaints or praise here.
Reasons for the change from SNS
Aside from the reasons I’ve listed above I could only see more difficulty down the road in getting TextAssets to behave the way you’d expect. I’ve been committing a lot of changes to SNS and recently wrote the SNS Page Hook extension to deal with these problems.
In previous versions of SNS and Radiant, the SNS approach made sense. It setup a separate ResponseCache to serve stylesheet content and javascript content from separate locations. And it completely separated those TextAssets from your page tree which makes a lot of sense for users, but developers who have worked with SNS have expected to be able to use any radius tag in the system and they couldn’t.
If you’re a user of SNS, I really think you’ll like the change to Sheets.
Thursday, July 29, 2010 |
|
A few weeks ago Radiant 0.9 was released. I'm sure you saw it, and if you watch Radiantcasts, you saw Radiant 0.9 in action. This episode outlines some of the best features this release brings.
Content
- A few minor updates
- Future publishing feature
- Aggregate child pages feature
- Paginate lists of pages feature
- Support for packaging extensions as gems
- I18N
- The Blade interface
Resources
Cristi Duma is a software engineer at Aissac.
Thursday, July 15, 2010 |
|
Snippets are small fragments of pages which get reused, but which do not need appear on every page. Two different layouts can share the same snippet without having to copy and paste between them. As a Rails developer you could see them as Rails partials, and in this episode you'll see how and why to use snippets to organize your code and reuse as much of it as possible.
Content
- Radiant Snippets basic usage
- using snippets to wrap content
- using snippets recursively
- Radiant Lazy Snippet Extension
Resources
Cristi Duma is a software engineer at Aissac.
Thursday, July 08, 2010 |
|
A few weeks back I presented three ways to make the best use of Radiant Layouts. The third was by using the Nested Layouts Extension. From the feedback I got, it seems I didn't show the full power of Nested Layouts, so in this episode you'll see the way I like to create, manage and use Radiant layouts, with the help of Nested Layouts and Stereotype extensions.
Content
- Nested Layouts Extension's tags
- using Nested Layouts Extension
- using Stereotype Extension to set a new page's layout
Resources
Cristi Duma is a software engineer at Aissac.
Thursday, July 01, 2010 |
|
One of the new features in Radiant 0.9 is the ability to load extensions from gems. This screencast demonstrates how to package your extension as a gem, how to load extensions through config.gem instead of vendor/extensions, and discusses why you might prefer using gems over vendorizing your extensions.
Content
- Why use gems?
- Creating a gemspec
- Building and installing your gem
- Loading extensions through config.gem instead of vendor/extensions.
Josh French is the senior engineer at Digital Pulp.
Wednesday, June 30, 2010 |
|
GitHub released features for managing organizations and we’ve converted the radiant account to an organization.
This means that you’ll see a message that you’re a part of the organization if you’ve been given commit rights to any of the repositories in the radiant account.
And I’d like to also point out that if you want to become a member of any particular team and help manage an official extension, please let us know. If you’ve got a bug fix, or new (well-tested) feature to add then you’re organization material.
I believe I’ve configured everyone to have access who always has, but if you’re missing from some project, complain somewhere like the mailing list.
Continue Reading…
Friday, June 25, 2010 |
|
Announcing the release of Radiant 0.9.0.
Radiant now has a new UI, support for internationalization, loading of extensions as gems, etc. See the CHANGELOG for the full details. Here are some other quick details:
- There are new features for pagination (requiring will_paginate).
- You can now run Radiant from a sub-directory.
- When selecting a published date in the future, Radiant will treat the content as hidden until that date
- Extensions may be loaded as gems and generated extensions now have features to easily create gems with Jeweler
- We’re running on Rails 2.3.8 (bundled with Radiant)
If you are an extension developer, please update your extensions.
As always we welcome your feedback and contributions.
Download & Install
You can download the gem here http://github.com/radiant/radiant/downloads
Install it with the gem command:
$ gem install radiant
How to Upgrade an Existing Project or Site
1. Update the Radiant assets from in your project:
rake radiant:update
2. Migrate the database:
rake production db:migrate
3. Restart the web server
Thursday, June 24, 2010 |
|
When using Radiant CMS out of the box we can only create, edit or remove pages. But most of the times this simple behavior is not enough. Most of the times we need to better control the order of pages, or to simply move or copy pages to different places in the tree hierarchy. Episode 17 presents Copy-Move, Reorder and Drag-Order Radiant Extensions, three extensions that help manage the site structure.
Watch in full screen
Content
- installation and use of Copy Move Extension;
- installation and use of Reorder Extension;
- use of Drag-Order Extension
Resources
Cristi Duma is a software engineer at Aissac.
Tuesday, June 22, 2010 |
|
Over on the Saturn Flyer blog I’ve written up some details about how find_by_url works within the Page model.
Radiant allows you to override this method for subclasses of Page and change the behavior of the finder. I pull in an example from the Archive extension which implements a simple match against the request URI to pull up the appropriate archive index type pages.
Friday, June 18, 2010 |
|
The addition of John Muhl to the core team is long overdue. He’s been a contributor to Radiant, squasher of bugs, and paved the way for developers to install extensions from github with ray as a precursor and alternative to the Extension Registry
Welcome, John!
Tuesday, June 08, 2010 |
|
Episode 16 presents some tips and tricks on how to make the best use of Radiant Layouts and the Radiant Nested Layouts Extension - an extension that helps keeping your layouts organized and DRY.
Watch in full screen
Content
- using 'if_url' and 'unless_url' conditional tags to build layouts;
- using 'if_content' and 'unless_content' conditional tags to build layouts;
- using Radiant Nested Layouts Extension;
Resources
Cristi Duma is a software engineer at Aissac.
Tuesday, June 01, 2010 |
|
Radiant 0.9 is right around the corner, and one of the best features it brings is the admin side internationalization. See in this episode how easy it is to translate an extension.
Watch in full screen
Content
- setting up Radiant to use all language packs;
- extracting strings that need to be translated;
- adding translation files;
- using the 'sync' rake task;
Resources
Cristi Duma is a software engineer at Aissac.