From a393d3937b965d45449639807ae9c577c75a745e Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Tue, 17 Apr 2012 17:11:43 +0200 Subject: [PATCH] ENHANCEMENT Anonymous function support in GridField->setFieldFormatting() --- forms/gridfield/GridField.php | 3 ++- forms/gridfield/GridFieldDataColumns.php | 15 ++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/forms/gridfield/GridField.php b/forms/gridfield/GridField.php index 299442fb3..2c258fd92 100755 --- a/forms/gridfield/GridField.php +++ b/forms/gridfield/GridField.php @@ -195,7 +195,8 @@ class GridField extends FormField { /** * Specify custom formatting for fields, e.g. to render a link instead of pure text. * Caution: Make sure to escape special php-characters like in a normal php-statement. - * Example: "myFieldName" => '$ID' + * Example: "myFieldName" => '$ID'. + * Alternatively, pass a anonymous function, which takes one parameter: The list item. * * @param array $casting * @todo refactor this into GridFieldComponent diff --git a/forms/gridfield/GridFieldDataColumns.php b/forms/gridfield/GridFieldDataColumns.php index 2b6594e55..9ead7c663 100644 --- a/forms/gridfield/GridFieldDataColumns.php +++ b/forms/gridfield/GridFieldDataColumns.php @@ -95,11 +95,16 @@ class GridFieldDataColumns implements GridField_ColumnProvider { return $value; } - $format = str_replace('$value', "__VAL__", $gridField->FieldFormatting[$fieldName]); - $format = preg_replace('/\$([A-Za-z0-9-_]+)/', '$item->$1', $format); - $format = str_replace('__VAL__', '$value', $format); - eval('$value = "' . $format . '";'); - return $value; + $spec = $gridField->FieldFormatting[$fieldName]; + if(is_callable($spec)) { + return $spec($item); + } else { + $format = str_replace('$value', "__VAL__", $spec); + $format = preg_replace('/\$([A-Za-z0-9-_]+)/', '$item->$1', $format); + $format = str_replace('__VAL__', '$value', $format); + eval('$value = "' . $format . '";'); + return $value; + } } /**