View source
<?php
define('DHTML_MENU_DUPLICATE_DEFAULT', "admin\nadmin/build/menu\nnode/add");
function dhtml_menu_menu() {
$items['admin/settings/dhtml_menu'] = array(
'title' => 'DHTML Menu',
'description' => 'Adds new menus with DHTML to reduce page refreshes',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'dhtml_menu_settings',
),
'access arguments' => array(
'administer site configuration',
),
'file' => 'dhtml_menu.admin.inc',
);
return $items;
}
function dhtml_menu_form_block_admin_configure_alter(&$form, $form_state) {
if ($form['module']['#value'] == 'menu' || $form['module']['#value'] == 'user' && $form['delta']['#value'] == 1) {
$dhtml = variable_get('dhtml_menu_menus', array());
$form['dhtml_menu'] = array(
'#default_value' => !empty($dhtml[$form['module']['#value']][$form['delta']['#value']]),
'#title' => t('Use the DHTML effect'),
'#type' => 'checkbox',
'#weight' => -3,
);
$form['#submit']['_dhtml_menu_form_block_submit'] = '_dhtml_menu_form_block_submit';
}
}
function _dhtml_menu_form_block_submit(&$form, $form_state) {
$dhtml = variable_get('dhtml_menu_menus', array());
$dhtml[$form_state['values']['module']][$form_state['values']['delta']] = $form_state['values']['dhtml_menu'];
variable_set('dhtml_menu_menus', $dhtml);
}
function dhtml_menu_preprocess_block(&$variables) {
$delta = $variables['block']->delta;
$module = $variables['block']->module;
$dhtml = variable_get('dhtml_menu_menus', array());
if (!empty($dhtml[$module][$delta])) {
$variables['block']->content = _dhtml_menu_build_block($module, $delta);
}
}
function _dhtml_menu_build_block($module, $delta) {
$menu_name = $module == 'user' ? 'navigation' : $delta;
return theme('dhtml_menu_tree', menu_tree_all_data($menu_name));
}
function dhtml_menu_theme($existing, $type) {
$theme['dhtml_menu_item'] = array(
'file' => 'dhtml_menu.theme.inc',
'arguments' => array(
'item' => array(),
'id' => NULL,
),
);
$theme['dhtml_menu_tree'] = array(
'file' => 'dhtml_menu.theme.inc',
'arguments' => array(
'tree' => array(),
'parent' => NULL,
'pid' => NULL,
),
);
return $theme;
}