I would just change what you have to be a little bit less confusing.
Change from
$thisModel = $modelName;
$modelName = $this->User->$model_name->find('list', array('fields' =>
'name', 'order' => 'name ASC'));
$this->set($thisModel, $modelName);
To something like
$result= $this->User->$model_name->find('list', array('fields' =>
'name', 'order' => 'name ASC'));
$this->set($modelName , $result);
It just makes more sense then reusing the $modelName variable to store
your results in.
On Apr 11, 12:54 am, "Dave Maharaj :: WidePixels.com"
<[email protected]> wrote:
> Solved it....
>
> $thisModel = $modelName;
> $modelName = $this->User->$model_name->find('list', array('fields' =>
> 'name', 'order' => 'name ASC'));
> $this->set($thisModel, $modelName);
>
> Now I can edit all my forms with 1 function from different models :)
>
> -----Original Message-----
> From: Dave Maharaj :: WidePixels.com [mailto:[email protected]]
> Sent: April-10-09 8:18 PM
> To: [email protected]
> Subject: RE: DRY function
>
> OK I managed to get the form working but now it looks like 1 final issue.
>
> The:
>
> $skills = $this->User->$model_name->find('list', array('fields' => 'name',
> 'order' => 'name ASC'));
> $this->set(compact('skills'));
>
> I need to make the $skills dynamic based on the $modelName, I tried using:
>
> $modelName = $this->User->$model_name->find('list', array('fields' =>
> 'name', 'order' => 'name ASC'));
>
> But nothing shows up because $this->set(compact('skills')); is empty, tried
> using $this->set(compact('$modelName')); and nothing.
>
> Any ideas?
>
> function update($slug, $modelName)
> {
> $this->User->recursive = 1;
> $user = $this->User->findBySlug($slug);
> $id = $user['User']['id'];
> $model_name = Inflector::classify($modelName);
> $this->set('model_used', $model_name);
> if ($this->RequestHandler->isAjax()) {
> $this->set('user', $this->User->read(null, $id));
> if (!empty($this->data)) {
> if ($this->User->save($this->data)) {
> }
> }
> $skills = $this->User->$model_name->find('list',
> array('fields' => 'name', 'order' => 'name ASC'));
> $this->set(compact('skills'));
> }
> if (empty($this->data)) {
> $this->data = $this->User->read(null, $id);
> }
> $user = $this->User->read(null, $id);
> }
>
> -----Original Message-----
> From: Dave Maharaj :: WidePixels.com [mailto:[email protected]]
> Sent: April-10-09 5:26 PM
> To: [email protected]
> Subject: RE: DRY function
>
> OK I went with my original idea, changed the url and created 1 function to
> update everything individually. The problem I am running into now is when
> the form is displayed the options are no longer selected for each section.
>
> function update($slug, $modelName)
> {
> $user = $this->User->findBySlug($slug);
> if ($this->RequestHandler->isAjax()) {
>
> $this->set('user', $this->User->read(null, $id));
> if (!empty($this->data)) {
> if ($this->User->save($this->data)) {
> //$this->view_$modelName($slug);
> }
> }
> $model_name = Inflector::classify($modelName);
> $options = $this->User->$model_name->find('list',
> array('fields' => 'name', 'order' => 'name ASC'));
> $this->set(compact('options'));
> debug(array($slug, $modelName, $id, $model_name));
> }
> if (empty($this->data)) {
> $this->data = $this->User->read(null, $id);
> }
> }
>
> When I debug I get the correct info.
>
> $modelName = educations
> $model_name - Education
> $slug = the name on the account
> $id = the user id
>
> Just not sure why no info is being displayed on the form. (I have options
> selected in the original rendered view, when I click edit the form appears
> with all the options to choose from but the ones that were selected are now
> blank)
>
> Ideas?
>
> Thanks,
>
> Dave
> -----Original Message-----
> From: Walther [mailto:[email protected]]
> Sent: April-10-09 1:49 PM
> To: CakePHP
> Subject: Re: DRY function
>
> Your idea is the what I believe is the correct solution.
>
> Instead of calling $this->User->Skills->find... You'd call $this->User-
> >$modelName->find
>
> You'd need to do something with the view_skills and view_educations type
> functions. Assuming they are similar you could do $this->view ($slug,
> $modelName), otherwise perhaps move them into the model and call
> $this->User->$modelName->view($slug);
>
> Walther.
>
> On Apr 10, 5:34 pm, "Dave Maharaj :: WidePixels.com"
> <[email protected]> wrote:
> > I was hoping for some info on how to take 4 functions and make the
> > into 1.They all do the same thing except its a different model that they
> use.
> > They simply update a users options thru a select check box form,
> > that's the only thing being edited. Basically I took the edit view and
> > broke it up into
> > 4 different Ajax edits and each has its own function but since they
> > are all the same except for the model call I was hoping someone could
> > give me some advice on creating 1 standard function.
>
> > They all get called from the same page users/profile, the link in the
> > view is users/profile/[user slug]/update_eductions or
> > users/profile/[user slug]/update_skills. I am still very new with cake
> > but was thinking if I modified the link url used an additional
> > variable based on the link action to get users/profile/[user
> > slug]/educations/update I could then use 1 function called update and
> > set the "educations" in the url to define what model to update and
> > pass that into the function. the update function would be something
> > like function update ($slug, $modelName) then in the old function replace
> the model name with $modelName ?
>
> > function update_eductions($slug = null)
> > {
> > $this->User->recursive = 1;
> > if ($this->RequestHandler->isAjax()) {
> > $user = $this->User->findBySlug($slug);
> > $id = $user['User']['id'];
> > $this->set('user', $this->User->read(null, $id));
> > if (!empty($this->data)) {
> > if ($this->User->save($this->data)) {
> > $this->view_educations($slug);
> > }
> > }
> > $educations= $this->User->Educations->find('list',
> > array('fields' => 'name', 'order' => 'name ASC'));
> > $this->set(compact('educations'));
> > }
> > if (empty($this->data)) {
> > $this->data = $this->User->read(null, $id);
> > }
> > }
>
> > or to update skills
>
> > function update_skills($slug = null)
> > {
> > $this->User->recursive = 1;
> > if ($this->RequestHandler->isAjax()) {
> > $user = $this->User->findBySlug($slug);
> > $id = $user['User']['id'];
> > $this->set('user', $this->User->read(null, $id));
> > if (!empty($this->data)) {
> > if ($this->User->save($this->data)) {
> > $this->view_skills($slug);
> > }
> > }
> > $skills= $this->User->Skills->find('list',
> > array('fields' => 'name', 'order' => 'name ASC'));
> > $this->set(compact('skills'));
> > }
> > if (empty($this->data)) {
> > $this->data = $this->User->read(null, $id);
> > }
> > }
>
> > Ideas? Suggestions?
>
> > Thanks,
>
> > Dave
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"CakePHP" 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
-~----------~----~----~----~------~----~------~--~---