term_list.inc
File
-
plugins/
content_types/ term_context/ term_list.inc
View source
<?php
/**
* @file
* Plugins are described by creating a $plugin array which will be used
* by the system that includes this file.
*/
$plugin = array(
'single' => TRUE,
'title' => t('List of related terms'),
'icon' => 'icon_term.png',
'description' => t('Terms related to an existing term; may be child, siblings or top level.'),
'required context' => new ctools_context_required(t('Term'), array(
'term',
'taxonomy_term',
)),
'category' => t('Taxonomy term'),
'defaults' => array(
'title' => '',
'type' => 'child',
'include_current_term' => FALSE,
'list_type' => 'ul',
'path' => 'taxonomy/term',
),
);
function ctools_term_list_content_type_render($subtype, $conf, $panel_args, $context) {
$term = isset($context->data) ? clone $context->data : NULL;
$block = new stdClass();
$block->module = 'term-list';
$path = empty($conf['path']) ? 'taxonomy/term/%tid' : $conf['path'];
if (strpos($path, '%tid') === FALSE) {
if (substr($path, -1) != '/') {
$path .= '/';
}
$path .= '%tid';
}
$options = ctools_admin_term_list_options();
$skip = array();
if ($term) {
$block->title = $options[$conf['type']];
$block->delta = $conf['type'];
switch ($conf['type']) {
case 'related':
// @todo this no longer exists, must be done with Field API.
// $terms = taxonomy_get_related($term->tid);
break;
case 'child':
default:
if (!empty($conf['include_current_term'])) {
$terms[] = $term;
}
$terms = taxonomy_get_children($term->tid);
break;
case 'top':
$terms = taxonomy_get_tree($term->vid, 0, 1);
break;
case 'parent':
$terms = taxonomy_get_parents($term->tid);
if (!empty($conf['include_current_term'])) {
$terms[] = $term;
}
$block->title = count($terms) == 1 ? t('Parent term') : t('Parent terms');
break;
case 'sibling':
$parent = db_query('SELECT parent FROM {taxonomy_term_hierarchy} WHERE tid = :tid', array(
':tid' => $term->tid,
))
->fetchField();
if ($parent) {
$terms = taxonomy_get_children($parent, $term->vid);
}
else {
$terms = taxonomy_get_tree($term->vid, 0, 1);
}
$skip[$term->tid] = $term->tid;
break;
case 'synonyms':
// FIXME this no longer exists, must be done with Field API
// $terms = taxonomy_get_synonyms($term->tid);.
break;
}
if (!empty($terms)) {
foreach ($terms as $related) {
if (empty($skip[$related->tid])) {
$items[] = l($related->name, str_replace('%tid', $related->tid, $path), array(
'rel' => 'tag',
'title' => strip_tags($related->description),
));
}
}
if (!empty($items)) {
$block->content = theme('item_list', array(
'items' => $items,
'type' => $conf['list_type'],
));
}
}
}
else {
$block->content = t('Term description goes here.');
$block->delta = 'unknown';
}
return $block;
}
function ctools_admin_term_list_options() {
return array(
'child' => t('Child terms'),
'related' => t('Related terms (does not work in D7)'),
'sibling' => t('Sibling terms'),
'top' => t('Top level terms'),
'synonyms' => t('Term synonyms (does not work in D7)'),
'parent' => t('Parent term(s)'),
);
}
/**
* Returns an edit form for the custom type.
*/
function ctools_term_list_content_type_edit_form($form, &$form_state) {
$conf = $form_state['conf'];
$form['type'] = array(
'#type' => 'radios',
'#title' => t('Which terms'),
'#options' => ctools_admin_term_list_options(),
'#default_value' => $conf['type'],
'#prefix' => '<div class="clearfix no-float">',
'#suffix' => '</div>',
);
$form['include_current_term'] = array(
'#type' => 'checkbox',
'#title' => t('Include the current term in the list'),
'#default_value' => !empty($conf['include_current_term']),
'#prefix' => '<div class="clearfix no-float">',
'#suffix' => '</div>',
'#states' => array(
'invisible' => array(
':input[name="type"], unique1' => array(
'!value' => 'child',
),
':input[name="type"], unique2' => array(
'!value' => 'parent',
),
),
),
);
$form['list_type'] = array(
'#type' => 'select',
'#title' => t('List type'),
'#options' => array(
'ul' => t('Unordered'),
'ol' => t('Ordered'),
),
'#default_value' => $conf['list_type'],
);
$form['path'] = array(
'#type' => 'textfield',
'#title' => t('Path'),
'#default_value' => empty($conf['path']) ? 'taxonomy/term/%tid' : $conf['path'],
'#description' => t('The path to use for the terms. You may use %tid to place the term id as part of the path; if let off, it will be appended to the end.'),
);
return $form;
}
function ctools_term_list_content_type_admin_title($subtype, $conf, $context) {
$options = ctools_admin_term_list_options();
return t('"@s" @type', array(
'@s' => $context->identifier,
'@type' => drupal_strtolower($options[$conf['type']]),
));
}
function ctools_term_list_content_type_edit_form_submit($form, &$form_state) {
// Copy everything from our defaults.
foreach (array_keys($form_state['plugin']['defaults']) as $key) {
$form_state['conf'][$key] = $form_state['values'][$key];
}
}
Functions
Title | Deprecated | Summary |
---|---|---|
ctools_admin_term_list_options | ||
ctools_term_list_content_type_admin_title | ||
ctools_term_list_content_type_edit_form | Returns an edit form for the custom type. | |
ctools_term_list_content_type_edit_form_submit | ||
ctools_term_list_content_type_render |