[development] Creating embedded unordered lists of checkboxes
Nancy Wichmann
nan_wich at bellsouth.net
Thu Jan 14 05:37:56 UTC 2010
There is a similar post somewhere on how to do radios in columns. The method
I posted in a comment is much simpler than what that author suggests. It's
really simple CSS.
Nancy E. Wichmann, PMP
Injustice anywhere is a threat to justice everywhere. -- Dr. Martin L. King,
Jr.
-----Original Message-----
From: development-bounces at drupal.org [mailto:development-bounces at drupal.org]
On Behalf Of David Metzler
Sent: Wednesday, January 13, 2010 10:40 PM
To: development at drupal.org
Subject: Re: [development] Creating embedded unordered lists of checkboxes
I think you're on the right track. Check out:
http://drupal.org/node/197578
which shows you how to render a checkboxes control into a table.
You shouldn't technically need the form-item theme function to do
what you're doing, but rather just a custom checkboxes theming
form. I've done that successfully in D5, but it looks like it would
work in D6. Note the direct calls to theme_checkbox in that function
so that it renders each of the checkboxes properly
Hope that helps,
Dave
On Jan 13, 2010, at 4:54 PM, Steve Edwards wrote:
> I have a need to create a two-level unordered list of checkboxes
> from a two level taxonomy vocabulary. So for instance, if my
> vocabulary is
>
> - Level 1 term 1
> -- Level 2 term 1
> -- Level 2 term 2
> -- Level 2 term 3
> - Level 1 term 2
> -- Level 2 term 4
> -- Level 2 term 5
> - Level 1 term 3
>
> I want to create the following:
>
> <ul>
> <li><input type = checkbox">Level 1 term 1</li>
> <ul>
> <li><input type = checkbox">.Level 2 term 1</li>
> <li><input type = checkbox">Level 2 term 2</li>
> <li><input type = checkbox">Level 2 term 3</li>
> </ul>
> <li><input type = checkbox">Level 1 term 2</li>
> <ul>
> <li><input type = checkbox">Level 2 term 4</li>
> <li><input type = checkbox">Level 2 term 5</li>
> <ul>
> <li><input type = checkbox">Level 1 term 3<li>
> </ul>
>
> What is the best way to do this? Just use a checkboxes element
> type and create my own theme function for the form? Modify
> something like theme_item_list? Or is there a better (and easier)
> way that I'm missing?
>
> What I tried doing was to create a theme function for my checkboxes
> element by setting the #theme property for the element to my custom
> theme function (and registering the function in hook_theme). I
> then just made a copy of theme_checkboxes() (and theme_form_element
> since it's called from theme_form_checkboxes) and renamed to match
> hook_theme and the #theme property. However, when doing that, none
> of my checkboxes are rendered at all. On stepping through the
> code, I found the problem in drupal_render starting at line 2868:
>
> if (!isset($elements['#children'])) {
> $children = element_children($elements);
> // Render all the children that use a theme function.
> if (isset($elements['#theme']) && empty($elements
> ['#theme_used'])) {
> $elements['#theme_used'] = TRUE;
>
> $previous = array();
> foreach (array('#value', '#type', '#prefix', '#suffix') as
> $key) {
> $previous[$key] = isset($elements[$key]) ? $elements
> [$key] : NULL;
> }
> // If we rendered a single element, then we will skip the
> renderer.
> if (empty($children)) {
> $elements['#printed'] = TRUE;
> }
> else {
> $elements['#value'] = '';
> }
> $elements['#type'] = 'markup';
>
> unset($elements['#prefix'], $elements['#suffix']);
> $content = theme($elements['#theme'], $elements);
>
> foreach (array('#value', '#type', '#prefix', '#suffix') as
> $key) {
> $elements[$key] = isset($previous[$key]) ? $previous
> [$key] : NULL;
> }
> }
> // Render each of the children using drupal_render and
> concatenate them.
> if (!isset($content) || $content === '') {
> foreach ($children as $key) {
> $content .= drupal_render($elements[$key]);
> }
> }
> }
>
> So basically, because I have #theme set for the checkboxes field,
> it skips the rendering of the individual checkbox elements. To me,
> it makes sense that I override the theme function for the
> checkboxes type since that's the element type, but that doesn't
> seem to be the case. So what do I need to do to be able to simply
> theme my checkboxes element?
>
> Thanks.
>
> Steve
>
No virus found in this incoming message.
Checked by AVG - www.avg.com
Version: 9.0.725 / Virus Database: 270.14.133/2612 - Release Date: 01/13/10
02:35:00
More information about the development
mailing list