Recently a client wanted an unusual block. The block contained three social media links (facebook, twitter and youtube) and the search form. The easy solution would be with a static block or block menu and position it with css, but I wanted all the markup in a single block...ok here we go!
Custom Drupal Search Block - Step 1.
First create a custom module. This will require an .info file and .module file. My module is called deckfifty:
My deckfifty.info file contains:
name = deckfifty custom description = "deckfifty.com custom" core = 6.x
My deckfifty.module file utilizes Drupal's hook_block() function:
/** * Implementation of hook_block(). */ function deckfifty_block($op = 'list', $delta = 0) { }
Custom Drupal Search Block - Step 2.
Now I'll add a block, give it a name which I've wrapped in the t() function, and use a separate function to supply the content (_deckfifty_social_media_search):
/** * Implementation of hook_block(). */ function deckfifty_block($op = 'list', $delta = 0) { switch ($op) { case 'list': $blocks[0]['info'] = ' t('Social Media and Search')'; return $blocks; case 'view': switch ($delta) { case 0: $block['content'] = _deckfifty_social_media_search(); break; } return $block; } }
Custom Drupal Search Block - Step 3.
Now lets define the content function and add the static social media links:
function _deckfifty_social_media_search() { $output = ''; //facebook $output .= '<div class="social-media"><a title="like us on facebook" class="facebook" href="http://www.facebook.com">like us on facebook</a></div>'; //twitter $output .= '<div class="social-media"><a title="follow us on twitter" class="twitter" href="http://www.twitter.com">like us on twitter</a></div>'; //youtube $output .= '<div class="social-media"><a title="watch us on youtube" class="youtube" href="http://www.youtube.com">watch us on youtube</a></div>'; return $output; }
Custom Drupal Search Block - Step 4.
For us to display the search form we'll call the drupal_get_form function:
function _deckfifty_social_media_search() { $output = ''; //facebook $output .= '<div class="social-media"><a title="like us on facebook" class="facebook" href="http://www.facebook.com">like us on facebook</a></div>'; //twitter $output .= '<div class="social-media"><a title="follow us on twitter" class="twitter" href="http://www.twitter.com">like us on twitter</a></div>'; //youtube $output .= '<div class="social-media"><a title="watch us on youtube" class="youtube" href="http://www.youtube.com">watch us on youtube</a></div>'; //search $output .= '<div class="social-media last">'.drupal_get_form('search_block_form').'</div>'; return $output; }
Ok, we're almost done. Save the file and enable the block. Of course you'll want to do a little styling to get it just right, but at least this way all your markup will be in one block!