updated and patched views_php to fixe the pager bug
https://www.drupal.org/node/2484407
This commit is contained in:
parent
3adb83ccf7
commit
442d89c948
@ -44,7 +44,7 @@ class views_php_handler_field extends views_handler_field {
|
||||
$form += views_php_form_element($this,
|
||||
FALSE,
|
||||
array('php_value', t('Value code'), t('Code to construct the value of this field.'), FALSE),
|
||||
array('$view', '$handler', '$static', '$row', '$data')
|
||||
array('$view', '$handler', '$static', '$row')
|
||||
);
|
||||
$form += views_php_form_element($this,
|
||||
array('use_php_click_sortable', t('Enable click sort'), t('If checked, you can use PHP code to enable click sort on the field.')),
|
||||
@ -112,7 +112,7 @@ class views_php_handler_field extends views_handler_field {
|
||||
* @see self::php_post_execute()
|
||||
*/
|
||||
function php_pre_execute() {
|
||||
// Ecexute static PHP code.
|
||||
// Execute static PHP code.
|
||||
if (!empty($this->options['php_setup'])) {
|
||||
$function = create_function('$view, $handler, &$static', $this->options['php_setup'] . ';');
|
||||
ob_start();
|
||||
@ -126,16 +126,21 @@ class views_php_handler_field extends views_handler_field {
|
||||
* @see views_php_views_post_execute()
|
||||
*/
|
||||
function php_post_execute() {
|
||||
// Ecexute value PHP code.
|
||||
// Execute value PHP code.
|
||||
if (!empty($this->options['php_value'])) {
|
||||
$function = create_function('$view, $handler, &$static, $row, $data', $this->options['php_value'] . ';');
|
||||
$function = create_function('$view, $handler, &$static, $row', $this->options['php_value'] . ';');
|
||||
ob_start();
|
||||
foreach ($this->view->result as $i => &$row) {
|
||||
$normalized_row = new stdClass;
|
||||
foreach ($this->view->display_handler->get_handlers('field') as $field => $handler) {
|
||||
$normalized_row->$field = isset($row->{$handler->field_alias}) ? $row->{$handler->field_alias} : NULL;
|
||||
// Do not add our own field. Also, do not add other fields that have no data yet. This occurs because
|
||||
// the value code is evaluated in hook_views_post_execute(), but field data is made available in hook_views_pre_render(),
|
||||
// which is called after hook_views_post_execute().
|
||||
if ((empty($handler->aliases) || empty($handler->aliases['entity_type'])) && $handler->field_alias != $this->field_alias) {
|
||||
$normalized_row->$field = isset($row->{$handler->field_alias}) ? $row->{$handler->field_alias} : NULL;
|
||||
}
|
||||
}
|
||||
$row->{$this->field_alias} = $function($this->view, $this, $this->php_static_variable, $normalized_row, $row);
|
||||
$row->{$this->field_alias} = $function($this->view, $this, $this->php_static_variable, $normalized_row);
|
||||
}
|
||||
ob_end_clean();
|
||||
}
|
||||
@ -194,24 +199,24 @@ class views_php_handler_field extends views_handler_field {
|
||||
return $a - $b;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements views_handler_field#pre_render().
|
||||
*/
|
||||
function pre_render(&$values) {
|
||||
if (!empty($this->options['php_output'])) {
|
||||
$this->php_output_lamda_function = create_function('$view, $handler, &$static, $row, $data, $value', ' ?>' . $this->options['php_output'] . '<?php ');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements views_handler_field#render().
|
||||
*/
|
||||
function render($values) {
|
||||
// Ecexute output PHP code.
|
||||
if (!empty($this->options['php_output']) && isset($this->php_output_lamda_function)) {
|
||||
if (!empty($this->options['php_output'])) {
|
||||
$this->php_output_lamda_function = create_function('$view, $handler, &$static, $row, $data, $value', ' ?>' . $this->options['php_output'] . '<?php ');
|
||||
|
||||
$normalized_row = new stdClass;
|
||||
foreach ($this->view->display_handler->get_handlers('field') as $field => $handler) {
|
||||
$normalized_row->$field = isset($values->{$handler->field_alias}) ? $values->{$handler->field_alias} : NULL;
|
||||
if (empty($this->view->style_plugin->rendered_fields)) {
|
||||
foreach ($this->view->field as $id => $field) {
|
||||
if ($field->field_alias != $this->field_alias) {
|
||||
$normalized_row->$id = $field->get_value($values);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
foreach ($this->view->style_plugin->rendered_fields{$this->view->row_index} as $field => $value) {
|
||||
$normalized_row->$field = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$function = $this->php_output_lamda_function;
|
||||
|
@ -74,19 +74,21 @@ class views_php_handler_filter extends views_handler_filter {
|
||||
|
||||
/**
|
||||
*
|
||||
* @see views_php_views_post_execute()
|
||||
* @see views_php_plugin_pager::render()
|
||||
*/
|
||||
function php_post_execute() {
|
||||
function php_pre_render() {
|
||||
// Evaluate the PHP code.
|
||||
if (!empty($this->options['php_filter'])) {
|
||||
$function = create_function('$view, $handler, &$static, $row, $data', $this->options['php_filter'] . ';');
|
||||
ob_start();
|
||||
foreach ($this->view->result as $i => $row) {
|
||||
$normalized_row = new stdClass;
|
||||
foreach ($this->view->display_handler->get_handlers('field') as $field => $handler) {
|
||||
$normalized_row->$field = isset($row->{$handler->field_alias}) ? $row->{$handler->field_alias} : NULL;
|
||||
|
||||
$normalized_row = new stdClass;
|
||||
foreach ($this->view->result as $i => $result) {
|
||||
foreach ($this->view->field as $id => $field) {
|
||||
$normalized_row->$id = $this->view->field[$id]->theme($result);
|
||||
}
|
||||
if ($function($this->view, $this, $this->php_static_variable, $normalized_row, $row)) {
|
||||
|
||||
if ($function($this->view, $this, $this->php_static_variable, $normalized_row, $result)) {
|
||||
unset($this->view->result[$i]);
|
||||
}
|
||||
}
|
||||
|
@ -36,18 +36,19 @@ class views_php_plugin_pager extends views_php_plugin_wrapper {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->wrapped->total_items = count($this->wrapped->view->result);
|
||||
$this->wrapped->update_page_info();
|
||||
|
||||
$item_per_page = $this->wrapped->get_items_per_page();
|
||||
if ($item_per_page > 0) {
|
||||
$offset = $this->wrapped->get_current_page() * $item_per_page + $this->wrapped->get_offset();
|
||||
$this->wrapped->view->result = array_slice($this->wrapped->view->result, $offset, $item_per_page);
|
||||
}
|
||||
$this->wrapped->post_execute($result);
|
||||
}
|
||||
|
||||
public function pre_render() {
|
||||
foreach (array(/*'argument',*/ 'field', 'filter', 'sort', /*'relationship'*/) as $type) {
|
||||
foreach ($this->wrapped->view->$type as $id => $handler) {
|
||||
if (is_callable(array($handler, 'php_pre_render'))) {
|
||||
$handler->php_pre_render();
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->php_unwrap();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the count query, which will be done just prior to the query
|
||||
|
@ -16,6 +16,8 @@ class views_php_plugin_query extends views_php_plugin_wrapper {
|
||||
|
||||
$this->wrapped->execute($view);
|
||||
|
||||
$pager->php_unwrap();
|
||||
// We cannot unwrap here because we need to run the pre_render functions.
|
||||
// See: views_php_plugin_pager::pre_render()
|
||||
//$pager->php_unwrap();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,24 @@
|
||||
diff --git a/plugins/views/views_php_plugin_pager.inc b/plugins/views/views_php_plugin_pager.inc
|
||||
index bb7d2d9..5ffa123 100644
|
||||
--- a/plugins/views/views_php_plugin_pager.inc
|
||||
+++ b/plugins/views/views_php_plugin_pager.inc
|
||||
@@ -47,19 +47,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
- $this->update_wrapped_pager();
|
||||
$this->php_unwrap();
|
||||
- }
|
||||
-
|
||||
- protected function update_wrapped_pager() {
|
||||
- $this->wrapped->total_items = count($this->wrapped->view->result);
|
||||
- $this->wrapped->update_page_info();
|
||||
-
|
||||
- $item_per_page = $this->wrapped->get_items_per_page();
|
||||
- if ($item_per_page > 0) {
|
||||
- $offset = $this->wrapped->get_current_page() * $item_per_page + $this->wrapped->get_offset();
|
||||
- $this->wrapped->view->result = array_slice($this->wrapped->view->result, $offset, $item_per_page);
|
||||
- }
|
||||
}
|
||||
|
||||
/**
|
@ -15,9 +15,9 @@ files[] = plugins/views/views_php_plugin_pager.inc
|
||||
files[] = plugins/views/views_php_plugin_query.inc
|
||||
files[] = plugins/views/views_php_plugin_wrapper.inc
|
||||
|
||||
; Information added by Drupal.org packaging script on 2014-05-08
|
||||
version = "7.x-1.0-alpha1+2-dev"
|
||||
; Information added by Drupal.org packaging script on 2015-04-21
|
||||
version = "7.x-2.x-dev"
|
||||
core = "7.x"
|
||||
project = "views_php"
|
||||
datestamp = "1399543127"
|
||||
datestamp = "1429645983"
|
||||
|
||||
|
@ -47,8 +47,8 @@ function views_php_form_element($handler, $checkbox = FALSE, $input, $variables
|
||||
'$handler' => t('The handler object.'),
|
||||
'$plugin' => t('The plugin object.'),
|
||||
'$static' => t('A variable that can be used to store reusable data per row.'),
|
||||
'$row' => t('Contains the retrieved record from the database (e.g. $data->nid).'),
|
||||
'$data' => t('Contains the retrieved record from the database (e.g. $data->nid).'),
|
||||
'$row' => t('Contains the retrieved record from the database per row.'),
|
||||
'$data' => t('Contains the retrieved record from the database for all rows.'),
|
||||
'$results' => t('Array containing the view\'s result.'),
|
||||
'$cache' => t('The cache object.'),
|
||||
);
|
||||
@ -102,7 +102,16 @@ function views_php_form_element($handler, $checkbox = FALSE, $input, $variables
|
||||
$items[] = l($variable_name, '', array('fragment' => $container[$name]['#id'], 'external' => TRUE)) . ': ' . $description;
|
||||
|
||||
if (strpos($variable_name, '$row') === 0) {
|
||||
$php_value = ($input[0] == 'php_value') ? true : false;
|
||||
|
||||
foreach ($handler->view->display_handler->get_handlers('field') as $field => $field_handler) {
|
||||
// Do not add fields that will not have data when evaluating the value code. This occurs because
|
||||
// the value code is evaluated in hook_views_post_execute(), but field data is made available in hook_views_pre_render(),
|
||||
// which is called after hook_views_post_execute().
|
||||
if ($php_value && $field_handler->table != $field_handler->view->base_table) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$items[] = l($variable_name . '->' . $field, '', array('fragment' => $container[$name]['#id'], 'external' => TRUE)) . ': ' . $field_handler->ui_name();
|
||||
}
|
||||
}
|
||||
@ -142,7 +151,7 @@ function views_php_views_pre_execute($view) {
|
||||
/**
|
||||
* Implements hook_views_post_execute().
|
||||
*/
|
||||
function views_php_views_post_execute($view) {
|
||||
function views_php_views_post_render($view) {
|
||||
// Restore original query plugin if it was wrapped.
|
||||
if ($view->query instanceof views_php_plugin_wrapper) {
|
||||
$view->query->php_unwrap();
|
||||
|
Loading…
x
Reference in New Issue
Block a user