Although this blog is wordpress I’d typically choose Drupal for doing any proper content-based website as it’s so easily flexible and supports multiple languages really easily out of the box. I was doing a site recently where we wanted to have mostly placeholders everywhere rather than form labels. This was unfortunately a bit tricky so I wrote the following code for the theme’s template.php to automatically put labels into the placeholders of input elements:
function THEME_form_alter(&$form, &$form_state, $form_id) {
if( $form_id == 'user_register_form' ) {
$form['account']['mail']['#title'] = t('Your Email Address');
}
if( $form_id == 'views_exposed_form' ) {
foreach( $form as $key => &$config ) {
if( !is_array($config) )
continue;
if( array_key_exists('#attributes', $config) )
$config['#attributes']['placeholder'] = $config['#attributes']['title'];
}
$form['keys']['#attributes']['placeholder'] = $form['#info']['filter-keys']['label'];
$form['#action'] = '';
}
//error_log( print_r( $form, TRUE ) . ' ' . $form_id );
add_placeholder_check($form);
}
function add_placeholder_check(&$array) {
if( !is_array($array) )
return;
foreach( $array as $key => &$config ) {
if( !is_array($config) )
continue;
add_placeholder_check( $config );
if( substr($key, 0, 1) != '#' && array_key_exists( '#title', $config ) ) {
if( !array_key_exists('#attributes', $config) )
$config['#attributes'] = array();
$config['#attributes']['placeholder'] = $config['#title'];
}
}
}