PEAR is archived and read-only

This mirror preserves historical PEAR package releases and metadata so existing references remain available.

Home » Structures » Structures_DataGrid » Bug #3188

Can the callbacks pass the DataGrid_Column?

Details

Request #3188Can the callbacks pass the DataGrid_Column?
Submitted2005-01-13 15:34 UTC
Fromdasher at inspiredthinking dot co dot uk
Assignedasnagy
StatusClosed
PackageStructures_DataGrid
PHP VersionIrrelevant
OSN/A
Roadmaps(Not assigned)

Comments

[2005-01-13 15:34 UTC] dasher at inspiredthinking dot co dot uk

Description:
------------
Can the callback code pass a DataGrid_Column as one of the arguments?
Sometimes the width of the cell depends on what the callback does.
In the project I'm working on - links are generated - which depend on the arguments being passed in.

Reproduce code:
---------------
My column is:
$dg->addColumn(new Structures_DataGrid_Column('Actions', null, null, array('width' => '30%', 'align'=>'center'), null, "recordLinks(\$field=auth_user_id,\$type=edit|del)"));

With my callback recordLinks function:
function recordLinks($params) {
$script = ScriptName();
$editTypes = explode("|",$params['type']);
reset($editTypes);
$actions = "";
while(list($key, $type) = each($editTypes)) {
if (!(strpos($type,":")===false)) {
$elements = explode(":",$type);
$opTag = $elements[0];
$url = $elements[1];
} else {
$url = $script;
$opTag = $type;
}
$actions .="<a href='{$url}?op={$opTag}&id={$params['record'][$params['field']]} '>".ucfirst($opTag)."</a> | ";
}
$actions = substr($actions,0,strlen($actions)-2);
return $actions;
}

[2005-01-18 19:29 UTC] asnagy at webitecture dot org

I don't think this is necessary. You are asking for data to be passed into the formatter callback that is speccified in the same line of code. If you want the cell width, why don't you pass that into the callback also?

[2005-01-19 10:26 UTC] dasher at inspiredthinking dot co dot uk

I'd like to be able to set the cell width.
The callback generates some data - which affects the size of the cell. If the cell size has been specified when at addColumn - the callback might want to adjust things.

[2005-01-19 20:17 UTC] asnagy at webitecture dot org

That sounds a bit tricky. What if you have one cell trying to make the width = 200px and another cell trying to make the width = 100px. Since they are all in the same column, you will not get the results that you desire.

I think that this request is outside the scope of the formatter function. It's goals are to format what is inside the cell and not the cell itself.

I think the next step for this feature is to look into a new column class dedicated to controlling the size similiar to Bug#3170.

[2005-02-01 19:04 UTC] rolf at winmutt dot com

I think formatter should be modified to accpet complex
data types as I mentioned in bug 3089 (which I had
completelty labeled incorrectly). The patch I
supplied would allow any complex data to be passed, not
just some fixed string as we are currently limited to. In
php5 atleast you can pass any type of complex data into
call_user_func.

This patch :

snowcrash DataGrid # diff Column.php
~winmutt/pear/Structures_DataGrid/DataGrid/Column.php
186,189c186
< } elseif (is_array($this->formatter) &&
is_array($this->formatter[0])) {
< $formatter = $this->formatter[0];
< $paramList =
array_merge($this->formatter[1],
$record);
< } else {
---
> } else {
196c193
< $result = call_user_func($formatter,
($paramList?$paramList:$record));
---
> $result = call_user_func($formatter,
$paramList);



works just fine when passing complex data in :

$dg->addColumn(new Structures_DataGrid_Column($v, $v, $v,
null, null,
array(array(&$this,'printCrossLink'),array($v))));