[Radiant] [ANN] "Shards" extension
Sean Cribbs
seancribbs at gmail.com
Tue Sep 18 10:05:04 CDT 2007
It's been a long time coming, but here it is.
** The facets branch functionality is now available as an extension! **
http://dev.radiantcms.org/svn/radiant/trunk/extensions/shards
The latest contract I've been working on is using Radiant, and they
needed this functionality. The extension will work on 0.6.2, but I
highly recommend using edge for the sake of bugfixes.
There have been some significant changes in the API that I should warn
you about if you used the facets branch before:
* 'facets-lite' is still supported. Existing extensions that use this
should not break.
* Some of the region names may have been changed or added.
* There are no more 'plain' partials. Everything exists in a region or
is rendered directly from a template.
* Use content_for :page_scripts and content_for :page_css to insert
inline Javascripts and CSS, respectively. content_for appends to its
result anyway, so it was not necessary to keep 'additional_javascripts'
and 'additional_styles' in the API. If you have external files, you can
still use 'include_javascript' and 'include_stylesheet'.
* Regions are still accessible from the 'admin' object, but are accessed
like so:
# The RegionSet for the page edit screen.
admin.page.edit
# The array of partials in the 'main' region.
admin.page.edit.main
admin.page.edit[:main] # equivalent
admin.page.edit['main'] # equivalent
# Adds the 'foo' partial to the main region, before the 'edit_form'
partial
admin.page.edit.add :main, 'foo', :before => 'edit_form'
# Adds the 'foo' partial to the main region, after the 'edit_header'
partial
admin.page.edit.add :main, 'foo', :after => 'edit_header'
* Regions are blank by default, so you can reference a region without it
being pre-existing.
* Any controller/action may have regions that are rendered. These are
determined by the controller name and template name. See the
implementation of the 'render_region' helper for details.
* If you want to add your own controllers and actions/templates, add an
attr_accessor to Radiant::AdminUI with the controller name, fill that
attribute with an OpenStruct, then assign Shards::RegionSet objects to
the struct by template name. For example, if I have an "events"
controller and I want to add regions to its "index" template, I would do
this in the 'activate' method of my extension:
Radiant::AdminUI.class_eval { attr_accessor :events }
admin.events = OpenStruct.new
admin.events.index = Shards::RegionSet.new
You can pass a block to RegionSet.new, which will yield itself to the block.
* The only pages that can be modified out-of-box at the moment are:
- Page edit/new (as before)
- Page index (limited)
The core of the API is pretty solid and well tested, but I would
entertain any patches that extend the reach into the other areas of the
administration interface.
Cheers,
Sean
More information about the Radiant
mailing list