Posted by jeff00seattle on April 8, 2009 at 4:58pm
Hi
I have read the link http://drupal.org/node/357079 , but my custom sort handler is not getting called.
Implemented is the following empty sort handler. However, when I select the activated table-style column to sort, this sort handler is ignored.
<?php
class region_views_handler_sort extends views_handler_sort {
function query() {
parent::query();
drupal_set_message('region_id custom query()');
}
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
drupal_set_message('region_id custom options_form()');
}
}
?>There is also implemented a field handler applied to the same views data item (working):
<?php
class region_views_handler_field_url extends views_handler_field_url {
// check access if user has permissions to view region
function access() {
global $user;
return region_access('view', NULL, $user);
}
// render (numeric) region_id to become (string) region_name with link or not
function render($values) {
$region_id = $values->{$this->field_alias};
$region_assoc = region_fetch_array($region_id);
$region_name = $region_assoc['region_name'];
$region_nid = $region_assoc['region_nid'];
if (!empty($this->options['display_as_link'])) {
return l(check_plain($region_name), "node/{$region_nid}", array('html' => TRUE));
}
else {
return $region_name;
}
}
}
?>Implemented data item within hook_views_data using both the (working) field and (ignored) sort handlers:
<?php
$data['location']['region_id'] = array(
'title' => t('Region ID'),
'help' => t('Auto-Assigned ID from Region'),
'relationship' => array(
'base' => 'region',
'field' => 'region_id',
'handler' => 'views_handler_relationship',
'label' => t('Region'),
),
'field' => array(
'handler' => 'region_views_handler_field_url',
'click sortable' => TRUE,
),
'filter' => array(
'handler' => 'views_handler_filter_numeric',
),
'sort' => array(
'handler' => 'region_views_handler_sort',
),
);
?>Implemented is a hook_views_handlers that holds both handlers:
<?php
function location_views_handlers() {
return array(
'info' => array(
'path' => drupal_get_path('module', 'location'),
),
'handlers' => array(
// field handlers
'region_views_handler_field_url' => array(
'parent' => 'views_handler_field_url',
),
'region_views_handler_sort' => array(
'parent' => 'views_handler_sort',
),
)
);
}
?>Anybody have any ideas why this sort handler is ignored?
Jeff in Seattle
Categories: field handler, sort handler, views
Comments
The tablesort uses the field
The tablesort uses the field to sort, not the sort handler. On your field, implement click_sort()
Implementing a custom click_sort()...
Hi Earl
A little more savvy about implementing custom
views_handler_field(s)since I last wrote this topic submission, I am back again looking at click sorting columns.Your response is that I should add a custom
method click_sort().So far, what I have seen for custom
method click_sort()is that View sorts are SQL-based, because customformulasare SQL-compatible snippets.My custom
views_handler_fieldrenderings are not SQL-based; in other words, it takes the value returned by the field_alias and applies it to a PHP-Drupal-based function and returns it to be displayed.Assuming that I need a custom
method click_sort(), do you know of any good articles pertaining to implementing custom non-SQL-based sorting?Thanks
Jeff in Seattle
Reference to earlier submission: http://groups.drupal.org/node/23369
Thanks
Jeff in Seattle
Custom click sort
Hi Jeff,
Did you find a way to create custom clicksort ? If so can you please share it with me . I am also struck with the same problem