Menu description field in node/add form
A simple solution how to add a description field to your node/add forms.
What is that for?
We are building a website that has landing pages. Structure could be like:
- About Us (landing page)
- Who we are?
- What we do?
- Locations (landing page)
- United Kingdom
- Ireland
The site structure is based on a menu, thus each page has its menu and most importantly parent menu item if it is not landing page. When visitor is viewing a landing page, the page consists of a text from landing page node and a list of first level sub-menu items with its description (views can't do this afaik).
Here is the landing page layout:
The only problem is, that in node/add form menu fieldset doesn't have description field. So user adding or editing a new content has to after content creation visit menu administration, select the menu item and edit description. Not a good workflow eh? :)
So first we need to use form_alter to add a description field to a menu fieldset:
<?php
/**
* Implementation of hook_form_alter(). Adds menu item fields to the node form.
*/
function mymodule_form_alter(&$form, $form_state, $form_id) {
if (isset($form['#node']) && $form['#node']->type .'_node_form' == $form_id) {
$form['menu']['description'] = array(
'#type' => 'textarea',
'#title' => t('Description'),
'#default_value' => isset($form['menu']['options']['#value']['attributes']['title']) ? $form['menu']['options']['#value']['attributes']['title'] : '',
'#rows' => 1,
'#description' => t('The description displayed when hovering over a menu item.'),
);
$form['#submit'][] = 'mymodule_node_form_submit';
}
}
?>then, as you can see in the code above, we have our own form submit callback. Let's add that too:
<?php
function mymodule_node_form_submit($form, &$form_state) {
$form_state['values']['menu']['customized'] = TRUE;
$form_state['values']['menu']['options']['attributes']['title'] = $form_state['values']['menu']['description'];
}
?>And that's it. Now in node/add form we have in menu fieldset a description field too. :)
drupal drupal 6.x form API planet drupal