----------------------------------
Title more>
----------------------------------
Here I will show you how you can do it.
We will create a small module called 'Block "more" link', which will add new display to views.
There are 4 files needed
1. block_more_link.info
name = Block "more" link description = Adds "more" link in Views block header, (title link) core = 6.x package = Views
2. block_more_link.views.inc
<?php
function block_more_link_views_plugins() {
return array(
'display' => array(
'block_more_link' => array(
'title' => t('Block (more link)'),
'help' => t('Display the view as a block with "more" linked to one of the other handlers.'),
'handler' => 'views_plugin_display_block_more_link',
'theme' => 'views_view',
'uses hook block' => TRUE,
'use ajax' => TRUE,
'use pager' => TRUE,
'use more' => TRUE,
'accept attachments' => TRUE,
'admin' => t('Block ("more" link)'),
'help topic' => 'display-block',
'parent' => 'block',
),
),
);
} 3. views_plugin_display_block_more_link.inc
<?php
/**
* @file
* Contains the block display plugin.
*/
/**
* The plugin that handles a block.
*
* @ingroup views_display_plugins
*/
class views_plugin_display_block_more_link extends views_plugin_display_block {
function option_definition() {
$options = parent::option_definition();
$options['subject_link'] = array('default' => '');
return $options;
}
/**
* The display block handler returns the structure necessary for a block.
*/
function execute() {
$info = parent::execute();
if (!is_array($info)) {
return;
}
// Now check to see if we have a link to add:
$subject_link = $this->get_option('subject_link');
if (!empty($subject_link)) {
$displays = $this->_get_displays($this->view);
if (isset($displays[$subject_link])) {
$this_display = $this->display->id;
$this->view->set_display($subject_link);
if ($this->view->access($subject_link)) {
$info['subject'] = '' . $info['subject'] . '' . l(t('more') , $this->view->get_url(), array('html' => TRUE)) . '';
}
$this->view->set_display($this_display);
}
}
return $info;
}
/**
* Provide the summary for page options in the views UI.
*
* This output is returned as an array.
*/
function options_summary(&$categories, &$options) {
// It is very important to call the parent function here:
parent::options_summary($categories, $options);
$subject_link = $this->get_option('subject_link');
if (empty($subject_link)) {
$subject_link = t('No link');
}
else {
$displays = $this->_get_displays($this->view);
if (isset($displays[$subject_link])) {
$subject_link = $displays[$subject_link];
}
}
if (strlen($subject_link) > 16) {
$subject_link = substr($subject_link, 0, 16) . '...';
}
$options['subject_link'] = array(
'category' => 'block',
'title' => t('Block "more" link'),
'value' => $subject_link,
);
}
/**
* Provide the default form for setting options.
*/
function options_form(&$form, &$form_state) {
// It is very important to call the parent function here:
parent::options_form($form, $form_state);
switch ($form_state['section']) {
case 'subject_link':
$form['#title'] .= t('Block "more" link');
$options = array_merge(array('' => t('No link'), ' ' => '-'), $this->_get_displays($this->view));
$form['subject_link'] = array(
'#type' => 'select',
'#description' => t('Select a page display to link this block\'s title to.'),
'#default_value' => $this->get_option('subject_link'),
'#options' => $options,
);
break;
}
//dpm($this);
}
function _get_displays($view) {
$displays = array();
foreach ($view->display as $display) {
$displays[$display->id] = $display->display_title;
}
return $displays;
}
/**
* Perform any necessary changes to the form values prior to storage.
* There is no need for this function to actually store the data.
*/
function options_submit($form, &$form_state) {
// It is very important to call the parent function here:
parent::options_submit($form, $form_state);
switch ($form_state['section']) {
case 'subject_link':
$this->set_option('subject_link', trim($form_state['values']['subject_link']));
break;
}
}
} 4. block_more_link.module
<?php
function block_more_link_views_api() {
return array(
'api' => 2,
'path' => drupal_get_path('module', 'block_more_link'),
);
}
Now add some CSS to your style.css file to float div's:.block-title .title-left {
float:left;
}
.block-title .title-right {
float:right;
} Put all 4 files in one directory called "block_more_link", place this directory in sites/all/modules enable module on administration page. Go to your views and you will see new display called "Block ("more" link)"
This is a modified version of the code found on http://www.computerminds.co.uk website.
No comments:
Post a Comment