Copy the form buttons on node creation pages to the top
Drupal 7 will no longer be supported after January 5, 2025. Learn more and find resources for Drupal 7 sites
Background:
I have a custom content type with a lot of form elements (close to 100) and scrolling down to the bottom got a bit irritating when all you wanted to do it update or edit a node of this content type.
So I wanted to copy the form action buttons to the top (but still keep them at the bottom).
Here is how I did it:
1) Create a custom module
1a) In your sites/default/modules/ folder create a new folder CUSTOM_MODULE*
1b) Create the mandatory CUSTOM_MODULE.info and CUSTOM_MODULE.module files.
1c) Fill out the CUSTOM_MODULE.info file with some basic info. eg:
name = Custom node form modify module
description = Custom module to duplicate the form buttons on node creation forms and place them above the form items.
package = Custom
core = 7.x
version = 0.11d) Copy the following code into the CUSTOM_MODULE.module file. I'll then go through the code to explain what it does.
/**
* Implementation of HOOK_form_alter()
*/
function CUSTOM_MODULE_form_alter(&$form, $form_state, $form_id) {
/**
* Copy the action buttons (submit, preview, etc ..)
* and place them at the top of the form
*/
if(!empty($form['actions'])) {
foreach($form['actions'] as $name => $button) {
// I DEFINE EACH BUTTON SEPERATELY BECAUSE I WISH TO DEFINE THE ORDER
// OTHERWISE YOU COULD SIMPLY USE:
/*
$form["$name-copy"] = $button;
$form["$name-copy"]['#weight'] = -1000;
*/
// SUBMIT BUTTON
if($name == 'submit') {
// WE NEED TO USE DOUBLE QUOTATION MARKS
// SO PHP CAN SEE AND INTERPRET VARIABLES WITHIN
$form["$name-copy"] = $button;
$form["$name-copy"]['#weight'] = -1001;
}
// PREVIEW BUTTON
if($name == 'preview') {
// WE NEED TO USE DOUBLE QUOTATION MARKS
// SO PHP CAN SEE AND INTERPRET VARIABLES WITHIN
$form["$name-copy"] = $button;
$form["$name-copy"]['#weight'] = -1000;
}
// CHANGES DEPENDS ON DIFF MODULE
if($name == 'preview_changes') {
// WE NEED TO USE DOUBLE QUOTATION MARKS
// SO PHP CAN SEE AND INTERPRET VARIABLES WITHIN
$form["$name-copy"] = $button;
$form["$name-copy"]['#weight'] = -999;
}
// DELETE BUTTON
if($name == 'delete') {
// WE NEED TO USE DOUBLE QUOTATION MARKS
// SO PHP CAN SEE AND INTERPRET VARIABLES WITHIN
$form["$name-copy"] = $button;
$form["$name-copy"]['#weight'] = -998;
}
} // end foreach
}
}
As you can see we simply use the hook_form_alter() function to modify the form. If you only wish to apply this module to a single content type, you can filter the function by using:
if ($form_id == 'CONTENT_TYPE_node_form') {
// PLACE CODE IN HERE AND RENAME CONTENT_TYPE TO YOUR CONTENT TYPE
// CHECK THE FORMS SOURCE CODE IF UNCERTAIN OR USE
// dsm($form); // requires the devel module
}
2) Enable the module.
3) Clear Cache.
4) Try it out
* you may rename CUSTOM_MODULE to whatever you want, just make sure you rename it everywhere.
Help improve this page
You can:
- Log in, click Edit, and edit this page
- Log in, click Discuss, update the Page status value, and suggest an improvement
- Log in and create a Documentation issue with your suggestion