It's easy, really - for each of the 3 fields (keyPath, valuePath and
groupPath), instead of passing a string, you can pass an array.
The first entry in the array is the format string, the rest are the
parameters (extracted with Set::extract()).
The format is exactly the same as sprintf() [it calls vsprintf()
internally].
So, passing array('%s %s', '{n}.Person.firstname',
'{n}.Person.surname') as the valuePath does the following:
* realizes it's an array, not a string
* grabs the first entry ('%s %s') for the format, remembers the rest
as parameters
* for each parameter, calls Set::extract($data, ...) :
+ Set::extract($data, '{n}.Person.firstname');
+ Set::extract($data, '{n}.Person.last');
* calls vsprintf($format, $parameters)
You can also use "{1} {2}" as the format string instead of the
sprintf() format, if you like. Personally I prefer the sprintf format,
because I'm more used to it. Plus you can do things like padding,
truncating and whatnot:
Slightly more complicated example:
$data = array(
array('User' => array('id' => 1, 'firstname' => 'Joe', 'surname' =>
'Bloggs')),
array('User' => array('id' => 2, 'firstname' => 'Fred', 'surname' =>
'Bloggs')),
array('User' => array('id' => 3, 'firstname' => 'Jim', 'surname' =>
'Beam')),
array('User' => array('id' => 4, 'firstname' => 'Jack', 'surname' =>
'Daniels')),
);
debug(Set::combine(
$data,
'{n}.User.id',
array('%2$s, %1$.1s.', '{n}.User.firstname', '{n}.User.surname'),
'{n}.User.surname.0'
));
result:
Array
(
[B] => Array
(
[1] => Bloggs, J.
[2] => Bloggs, F.
[3] => Beam, J.
)
[D] => Array
(
[4] => Daniels, J.
)
)
neat, no?
On Feb 11, 4:36 pm, Baz <[EMAIL PROTECTED]> wrote:
> Yeah, I've seen that a lot.
>
> What I was referring to with grigri's example is that :
>
> array(%s %s %s) thing for the path...
>
> I have tons of examples like these where I need to do a "$firstname -
> $lastname" type of thing.
>
> On Feb 11, 2008 10:22 AM, Samuel DeVore <[EMAIL PROTECTED]> wrote:
>
>
>
> > there is the start of some information on Set:: at
>
> >http://www.thinkingphp.org/2007/02/24/cake-12s-set-class-eats-arrays-...
>
> > Sam D
>
> > On Feb 11, 2008 9:04 AM, Baz <[EMAIL PROTECTED]> wrote:
> > > Are you serious?????
>
> > > Ok, you guys need a Set::combine tutorial or something!
>
> > > I've been trying to figure this out how to combine fields for a few
> > months
> > > now. I've been reduced to creating a custom array in a foreach loop.
>
> > > But I knew, deep down inside, there must be way. ThanX
> > > --
> > > Baz L
> > > Web Development 2.0
> > >http://WebDevelopment2.com/
>
> > > On Feb 11, 2008 3:59 AM, roryy <[EMAIL PROTECTED]> wrote:
>
> > > > It works, thank you very much!
> > > > Now i'm gonna try to make a function to combine the two functions :)
>
> > > > On 11 feb, 10:41, grigri <[EMAIL PROTECTED]> wrote:
> > > > > find('list') only works with simple fields, you won't be able to do
> > > > > this.
>
> > > > > Still, it's easy enough with find('all') and Set::combine():
>
> > > > > $people = $this->Person->find('all', array(
> > > > > 'fields' => array('id', 'firstname', 'insertion', 'surname'),
> > > > > 'recursive' => -1
> > > > > ));
> > > > > $list = Set::combine(
> > > > > $people,
> > > > > '{n}.Person.id',
> > > > > array('%s %s %s', '{n}.Person.firstname', '{n}.Person.insertion',
> > > > > '{n}.Person.surname')
> > > > > );
>
> > > > > On Feb 11, 9:25 am, roryy <[EMAIL PROTECTED]> wrote:
>
> > > > > > Hello cakephp friends,
>
> > > > > > I have 2 tables. Communications and people. In communications/add
> > i
> > > > > > want a list where you can choose one person from table people. But
> > you
> > > > > > don't see his name, only his ID. I have these fields in table
> > people:
>
> > > > > > id
> > > > > > firstname
> > > > > > insertion
> > > > > > surname
>
> > > > > > Can someone help me to make a list where you can see a persons
> > > > > > firstname, insertion and surname with find('list' , .....) in the
> > > > > > communication controller.
>
> > > > > > Thanks in advance!- Tekst uit oorspronkelijk bericht niet
> > weergeven -
>
> > > > > - Tekst uit oorspronkelijk bericht weergeven -
>
> > --
> > --
> > (the old fart) the advice is free, the lack of crankiness will cost you
>
> > - its a fine line between a real question and an idiot
>
> >http://blog.samdevore.com/archives/2007/03/05/when-open-source-bugs-me/
> >http://blog.samdevore.com/cakephp-pages/my-cake-wont-bake/
> >http://blog.samdevore.com/cakephp-pages/i-cant-bake/
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake
PHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---