vid] = $vocabulary->name;
}
$form['jquery_drawer'] = array(
'#type' => 'select',
'#title' => t('Select the vocabulary to list'),
'#default_value' => variable_get('jquery_drawer', '1'),
'#options' => $vocabularies,
);
$form['jquery_drawer_drw'] = array(
'#type' => 'checkbox',
'#title' => t('Do not show drawer box.'),
'#description' => t('Select this option if you plan to manually provide the drawer box.'),
'#default_value' => variable_get('jquery_drawer_drw', '0'),
);
return $form;
case 'save':
variable_set('jquery_drawer', $edit['jquery_drawer']);
variable_set('jquery_drawer_drw', $edit['jquery_drawer_drw']);
break;
case 'view':
// Get all terms from a given vocabulary
$vid = variable_get('jquery_drawer', '1');
$menu = taxonomy_node_tree_parents($vid);
$block['content'] = theme('jquery_drawer', $menu);
return $block;
}
}
/**
* Implementation of hook_menu().
*/
function jquery_drawer_menu() {
$items['jquery_drawer'] = array(
'title' => 'jQuery Drawer',
'description' => 'Displays content inside a jQuery Drawer.',
'page callback' => 'jquery_drawer_page',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implementation of hook_theme().
*/
function jquery_drawer_theme() {
return array(
'jquery_drawer' => array(
'arguments' => array(
'menu' => NULL,
),
),
'jquery_drawer_javascript' => array(
'arguments' => array(),
),
'jquery_drawer_css' => array(
'arguments' => array(),
),
'jquery_drawer_link' => array(
'arguments' => array(),
),
);
}
/**
* Drawer logic.
*
* @ingroup themeable
*/
function theme_jquery_drawer($menu) {
$output = '
';
$output .= implode((array) module_invoke_all('jquery_drawer'));
foreach ($menu as $item) {
$link['title'] = $item->name;
$link['href'] = 'jquery_drawer/'. $item->tid;
$output .= theme('jquery_drawer_link', $link);
}
$output .= '
';
if (variable_get('jquery_drawer_drw', '0') == 0) {
$output .= '';
$output .= '
';
}
return $output;
}
/**
* Menu callback.
*
* @todo Split themeable output from logic.
*/
function jquery_drawer_page($tid = NULL) {
$output = '';
$nodes = taxonomy_select_nodes(array($tid));
$output .= '';
// First render all nodes whose parent is $term
while ($node = db_fetch_object($nodes)) {
$link['title'] = $node->title;
$link['href'] = 'node/'. $node->nid;
$output .= theme('jquery_drawer_link', $link);
}
// Check for child terms
$vid = variable_get('jquery_drawer', '1');
$terms = taxonomy_node_tree_taxonomy_get_tree($vid, $tid);
foreach ($terms as $term) {
$filter[] = $term->tid;
}
if (isset($filter) && !empty($filter)) {
// Then render all nodes whose terms are children of $term
$query = 'SELECT node.nid, node.title, term_node.tid FROM {node} LEFT JOIN
{term_node} ON term_node.nid = node.nid WHERE term_node.tid IN (%s)
AND node.status = "1"';
$nodes = db_query(db_rewrite_sql($query), implode(',', $filter));
$tree = taxonomy_node_tree_build($nodes, $terms);
// format output
if (is_array($tree) && $tree != NULL) {
foreach ($tree as $term) {
$output .= taxonomy_node_tree_list($term, 'jquery_drawer', 'hidden', 'node');
}
}
}
$output .= '
';
// Display output
echo($output);
// We need to exit here to avoid themeable output
exit();
}
/**
* jQuery Drawer Javascript theme function.
*
* @ingroup themeable
*/
function theme_jquery_drawer_javascript() {
drupal_add_js(drupal_get_path('module', 'jquery_drawer') .'/jquery_drawer/drw/scripts.js');
}
/**
* jQuery Drawer CSS theme function.
*
* @ingroup themeable
*/
function theme_jquery_drawer_css() {
drupal_add_css(drupal_get_path('module', 'jquery_drawer') .'/jquery_drawer/drw/styles.css');
drupal_add_css(drupal_get_path('module', 'jquery_drawer') .'/jquery_drawer.css');
}
/**
* jQuery Drawer Link theme function.
*
* @ingroup themeable
*/
function theme_jquery_drawer_link($link) {
if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}
$link['attributes']['rel'] = 'drw';
$output = '';
$output .= l($link['title'], $link['href'], array('attributes' => array('rel' => 'drw')));
$output .= '';
return $output;
}