On Sat, Jul 12, 2008 at 7:29 PM, Andrew Gehring <[EMAIL PROTECTED]> wrote: > > Are there any docs, anywhere, on creating an extension beyond the tag > example under the "summer reboot". > > I've created my extension, but can't find anything on building a admin > interface. > > The instructions for creating a admin interface on the wiki don't work > (aged)... > > Thanks, > Andrew
I don't know of any particular examples per se, but I took a peek at the code for a few different extensions to get an idea of how it's done. I made a very simple extension to manage a website directory (just one model, one controller, and two views--index and edit). The key is using Radiant's Admin::AbstractModelController. I would post the extension on GitHub, but it seems to be down for maintenance at the moment. Here's the code for the whole extension: # ./site_directory_extension.rb class SiteDirectoryExtension < Radiant::Extension version "1.0" description "Adds a website directory to Radiant" url "http://nams-cms.org" define_routes do |map| map.namespace(:admin) do |admin| admin.resources :sites end map.with_options(:controller => 'sites') do |sites| sites.search_sites 'sites/search', :action => 'search' sites.sites 'sites', :action => 'index' end end def activate admin.tabs.add "Sites", "/admin/sites", :after => "Layouts", :visibility => [:all] end def deactivate admin.tabs.remove "Sites" end end # ./db/migrate/001_create_sites.rb class CreateSites < ActiveRecord::Migration def self.up create_table :sites, :force => true do |t| t.string :title, :url, :null => false t.string :description t.timestamps end # this part loads data from a fixture... like a bulk import of defaults yml = YAML.load_file("#{RAILS_ROOT}/vendor/extensions/site_directory/db/bootstrap/sites.yml") yml.keys.each do |key| Site.find_or_create_by_title({ :title => yml[key]['title'], :url => yml[key]['url'], :description => yml[key]['description'] }) end end def self.down drop_table :sites end end # ./app/controllers/admin/sites_controller.rb class Admin::SiteController < Admin::AbstractModelController model_class Site only_allow_access_to :new, :edit, :remove, :upload, :when => [:developer, :admin], :denied_url => { :controller => 'sites', :action => 'index' }, :denied_message => 'You must have developer or administrator privileges to perform this action.' def index # this depends on the will_paginate plugin... I included it as a submodule using git submodule add git://github.com/mislav/will_paginate.git /vendor/plugins/will_paginate # I executed that git command from the site_directory extension's root, so will_paginate is a submodule of the extension, not of the radiant install @sites = Site.paginate :all, :page => params[:page], :order => (params[:order_by].nil? ? 'title ASC' : params[:order_by]) end end # ./app/models/site.rb class Site < ActiveRecord::Base acts_as_ferret :fields => [:title, :url, :description] end # ./app/views/admin/sites/index.html.haml - content_for 'page_css' do :sass .pagination margin: 25px 0 // more CSS removed for brevity %h1 Sites = will_paginate @sites %table#snippets.index{:cellspacing=>"0", :border=>"0", :cellpadding=>"0"} %thead %tr %th.user= link_to_unless_current('Title', site_index_url) { link_to_unless_current('Title', :order_by => 'url DESC') } %th.user= link_to_unless_current('URL', :order_by => 'url ASC') { link_to_unless_current('URL', :order_by => 'url DESC') } %th.modify Modify %tbody - @sites.each do |site| %tr.node.level-1 %td.user= link_to site.title, site_edit_url(:id => site) %td.user= link_to site.url, site_edit_url(:id => site) %td.remove = link_to image('remove', :alt => 'Delete Site'), site_remove_url(:id => site) = will_paginate @sites %p = link_to 'New Site', site_new_url # ./app/views/sites/edit.html.erb # this is in ERB because I get a undefined method error when I try to use HAML... don't know why <h1><%= @site.new_record? ? 'New' : 'Editing' %> Site</h1> <% form_for(@site, :url => admin_sites_path) do |f| %> <table class="fieldset"> <tbody> <tr> <th class="label"> <%= label 'site', 'title' %> </th> <td class="field"> <%= text_field 'site', 'title', :class => "textbox" %> </td> <td class="help"> The title text will appear first as the blue link to the site </td> </tr> <tr> <th class="label"> <%= label 'site', 'url' %> </th> <td class="field"> <%= text_field 'site', 'url', :class => "textbox" %> </td> <td class="help"> The url will appear in green at the bottom of the site's listing </td> </tr> <tr> <th class="label"> <%= label 'site', 'description' %> </th> <td class="field"> <%= text_area 'site', 'description', :style => "width: 100%;", :rows => "3" %> </td> <td class="help"> The description will appear in black between the title and URL. </td> </tr> </tbody> </table> <%= updated_stamp @site %> <p class="buttons"> <%= save_model_button(@site) %> <%= save_model_and_continue_editing_button(@site) %> or <%= link_to "Cancel", site_index_url %> </p> <% end %> Hopefully that should be enough to get you started. -- Tim _______________________________________________ Radiant mailing list Post: Radiant@radiantcms.org Search: http://radiantcms.org/mailing-list/search/ Site: http://lists.radiantcms.org/mailman/listinfo/radiant