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
-~----------~----~----~----~------~----~------~--~---

Reply via email to