On Sunday 24 October 2010, Randy Fay wrote: > A form theming example would be a nice addition to the form_example if > you'd be interested in posting a patch.
I'll have a go! > > Thanks, > > -Randy > > On Sun, Oct 24, 2010 at 10:45 AM, Bob Hutchinson <[email protected]>wrote: > > On Saturday 23 October 2010, Earl Miles wrote: > > > On 10/22/2010 1:56 PM, Bob Hutchinson wrote: > > > > In D7 I get somewhat different behaviour: > > > > > > > > If I do not create an entry in the theme registry, all works as > > > > expected, > > > > > > but if I do, things start to behave oddly. > > > > > > > > function mymodule_theme() { > > > > .... > > > > > > > > 'mymodule_thingy_form' => array( > > > > > > > > 'variables' => array( > > > > > > > > 'form' => NULL, > > > > > > > > ), > > > > > > > > ), > > > > > > In D7 the above should actually be: > > > 'mymodule_thingy_form' => array( > > > > > > 'render element' => 'form', > > > > > > > > .... > > > > } > > > > and create a function > > > > function theme_mymodule_thingy_form($variables) { > > > > > > > > $form = $variables['form']; > > > > $output = drupal_render($form); > > > > return $output; > > > > > > > > } > > > > > > You should use either render() or drupal_render_children() rather than > > > drupal_render(). So far as I could figure out, drupal_render() should > > > no longer be used inside theme functions. You use render() to render a > > > specific element, and drupal_render_children() to render all the > > > children but NOT the element (which is what you want when attempting > > > to render $form since that is currently being rendered). > > > > I ran some trials using form_example from > > http://drupal.org/project/examples > > I found that indeed I should not use drupal_render() inside theme > > functions, > > drupal_render_children() works fine. > > I also found that using drupal_get_form() within a function (as opposed > > to in > > a menu) requires the output of drupal_get_form() to be run through > > render(), > > otherwise the form is not complete. The theme (defined with 'render > > element') > > is picked up automatically, the same as it is when calling > > > > drupal_get_form() > > > > directly in a menu $item. > > > > Thanks for your help. > > > > -- > > ----------------- > > Bob Hutchinson > > Midwales dot com > > ----------------- -- ----------------- Bob Hutchinson Midwales dot com -----------------
