[Radiant] Customizing the user admin UI at the column level
I have reviewed the contents of http://wiki.github.com/radiant/radiant/modifying-the-page-ui in depth. I have extension that modifies the user model to be attached to something called a program, and I've made the change in the DB, and modified the user model in my extension code like so: User class User ActiveRecord::Base belongs_to :program end so that the association will be there. Now, I would like to be able to display and edit program assignments for a given user in the admin. UI. In my extension's activate method, I added the following lines in the hopes of customizing the UI: admin.user.edit.form 'edit_program' admin.user.index.thead 'program_header' admin.user.index.tbody 'program_cell' thinking that the display of the user admin was super dynamic and it would just figure out how to display the edit components based on attribute type. But when I try to look at the index view of users, I get: `program_header' default partial not found! `program_cell' default partial not found! as errors in the index display. and `edit_program' default partial not found! as an error in the edit display. ** After looking into it, though, I see the admin/users/edit and admin/users/index views under the Radiant core are more or less hard-coded at the column level, but the error messages imply that I should be able to add a partial somewhere for my custom fields. Questions: What is the preferred way to customize at this level? Do I need to just override the entire edit and index views? Is there some Javascript-y way to do this that I'm missing? Many thanks, Wes
Re: [Radiant] Customizing the user admin UI at the column level
On 13 Aug 2010, at 00:35, Wes Gamble wrote: I have reviewed the contents of http://wiki.github.com/radiant/radiant/modifying-the-page-ui in depth. I have extension that modifies the user model to be attached to something called a program, and I've made the change in the DB, and modified the user model in my extension code like so: User class User ActiveRecord::Base belongs_to :program end so that the association will be there. Now, I would like to be able to display and edit program assignments for a given user in the admin. UI. In my extension's activate method, I added the following lines in the hopes of customizing the UI: admin.user.edit.form 'edit_program' admin.user.index.thead 'program_header' admin.user.index.tbody 'program_cell' thinking that the display of the user admin was super dynamic and it would just figure out how to display the edit components based on attribute type. But when I try to look at the index view of users, I get: `program_header' default partial not found! `program_cell' default partial not found! as errors in the index display. and `edit_program' default partial not found! as an error in the edit display. After looking into it, though, I see the admin/users/edit and admin/users/index views under the Radiant core are more or less hard-coded at the column level, but the error messages imply that I should be able to add a partial somewhere for my custom fields. Questions: What is the preferred way to customize at this level? You're on the right lines, though I would normally use this kind of idiom to get more control: admin.users.edit.add :form, edit_program, :after = something and then you need to create the partial, which in this case would be vendor/extensions/your_extension/app/views/admin/users/_edit_program.html.haml If you want it to live somewhere else - eg. to share a form component between several models - then you can specify the full path to the partial in the usual way: admin.users.edit.add :form, admin/programs/edit_program, :after = something Do I need to just override the entire edit and index views? Much better to avoid that: working through the UI you are relatively safe from interface changes and able to co-operate with other extensions. Is there some Javascript-y way to do this that I'm missing? Nope. best, will
Re: [Radiant] Customizing the user admin UI at the column level
On 8/12/10 6:47 PM, William Ross wrote: On 13 Aug 2010, at 00:35, Wes Gamble wrote: I have reviewed the contents of http://wiki.github.com/radiant/radiant/modifying-the-page-ui in depth. I have extension that modifies the user model to be attached to something called a program, and I've made the change in the DB, and modified the user model in my extension code like so: User class User ActiveRecord::Base belongs_to :program end so that the association will be there. Now, I would like to be able to display and edit program assignments for a given user in the admin. UI. In my extension's activate method, I added the following lines in the hopes of customizing the UI: admin.user.edit.form 'edit_program' admin.user.index.thead 'program_header' admin.user.index.tbody 'program_cell' thinking that the display of the user admin was super dynamic and it would just figure out how to display the edit components based on attribute type. But when I try to look at the index view of users, I get: `program_header' default partial not found! `program_cell' default partial not found! as errors in the index display. and `edit_program' default partial not found! as an error in the edit display. ** After looking into it, though, I see the admin/users/edit and admin/users/index views under the Radiant core are more or less hard-coded at the column level, but the error messages imply that I should be able to add a partial somewhere for my custom fields. Questions: What is the preferred way to customize at this level? You're on the right lines, though I would normally use this kind of idiom to get more control: admin.users.edit.add :form, edit_program, :after = something and then you need to create the partial, which in this case would be vendor/extensions/your_extension/app/views/admin/users/_edit_program.html.haml I did this, and created a file in the correct place, and entered the following in my activate method: admin.users.edit.add :form, edit_program, :after = edit_roles My partial looks like this: - form.edit_program do %p = f.label :program_id, t('program'), :class = optional = f.select :program_id, Program.all.collect {|p| [p.name, p.id]} and I get the classic |wrong number of arguments (0 for 1)| message when I try to render the form. This is because, AFAIK, the partial hasn't been passed the form variable as a local. How does the partial get rendered in the context of the existing form? Thanks, Wes