Saturday, December 27, 2008

RE: I am missing something obvious

Ahh I get it. Thanks very much.


-----Original Message-----
From: cake-php@googlegroups.com [mailto:cake-php@googlegroups.com] On Behalf
Of majna
Sent: Saturday, December 27, 2008 4:19 PM
To: CakePHP
Subject: Re: I am missing something obvious


you can render element from action:
$this->set('data_for_element', $some_data);
$this->render('/elements/my_elmenet');

On Dec 27, 10:03 pm, Steven Wright <rhythmicde...@gmail.com> wrote:
> I may have partially solved this using Ajax. But now I have a
> question. How do I get the content of an element in side of my model
> to pass back to the view?
>
> $this->set('mydivcontent', SOME ELEMENT); // somehow get the content
> for the element here?
>
> Thanks.
>
> -----Original Message-----
> From: cake-php@googlegroups.com [mailto:cake-php@googlegroups.com] On
> Behalf
>
> Of majna
> Sent: Saturday, December 27, 2008 2:12 PM
> To: CakePHP
> Subject: Re: I am missing something obvious
>
> This line iw wrong:
>  <td>
>    <?php echo $html->link('delete', 'ingredient_list/delete'); ?>
> </td> This is link not button, Your delete() method expects id as param:
>  $html->link('delete', 'ingredient_list/delete/$id'); ($id or your
> $index)
>
> On Dec 27, 7:11 pm, "rhythmicde...@gmail.com"
> <rhythmicde...@gmail.com> wrote:
> > I dont know why I cant wrap my head around this. I have been doing
> > LAMP development for years yet CakePHP basics seem to be escaping me.
> > So here it is. I am working on a recipe management application. A
> > recipe's ingredient list is stored in the ingredients_list table. I
> > am having an issue figuring out how to add another ingredient in the
> > add recipe view and how to add or delete another ingredient in the
> > edit recipe view.
>
> > To add a new ingredient to the recipe I should just hit a button
> > that adds a new line to the form with all the fields needed for the
> > ingredient. I cant seem to figure out the right strategy using Cake.
> > I can do it with Javascript but thats not really the point.
>
> > To delete an ingredient there should be a button next to the line
> > item in the recipe view that calls a delete method on the
> > ingredient_list controller and then returns you to the recipe view that
you were in.
> > When I call the delete method on the ingredient I get the following
> > from CakePHP:
>
> > Missing Method in RecipesController
>
> > Error: The action ingredient_list is not defined in controller
> > RecipesController
>
> > Error: Create RecipesController::ingredient_list() in file: app
> > \controllers\recipes_controller.php.
>
> > But I dont think that the delete method belongs there.
>
> > Help is much appreciated thanks.
>
> > Code.
>
> > RECIPES CONTROLLER
>
> > <?php
> > class RecipesController extends AppController {
> >         /*
> >         Make sure that if you add another controller that you put
> > the current controller
> >         in the array as well or it wont be found.
> >         */
>
> >         var $uses = array('Recipe', 'RecipeType', 'Ingredient',
> > 'MeasurementType', 'IngredientList');
>
> >         function index()
> >         {
> >                 $this->set('recipes', $this->Recipe->findAll());
> >                 $this->pageTitle = 'Recipes';
> >                 $this->layout = 'default';
> >         }
>
> >         function view($id = null)
> >         {
> >                 $this->Recipe->id = $id;
> >                 $this->set('recipe', $this->Recipe->read());
> >         }
>
> >         function add()
> >         {
> >                 $this->set_recipe_types();
> >                 $this->set_ingredients();
> >                 $this->set_measurement_types();
>
> >                 if (!empty($this->data))
> >                 {
> >                         if ($this->Recipe->saveAll($this->data))
> >                         {
> >                                 $this->flash('Your recipe has been
> > saved.', '/recipes');
> >                         }
> >                 }
> >         }
>
> >         function edit($id = null)
> >         {
> >                 $this->Recipe->id = $id;
> >                 $this->set_recipe_types();
> >                 $this->set_ingredients();
> >                 $this->set_measurement_types();
>
> >                 $list = $this->IngredientList->find('all', array
> > ('recipe_id' => $id));
>
> >                 //debug($list, true);
>
> >                 foreach($list as $item)
> >                 {
> >                        
> > //debug($item['IngredientList']['recipe_id'],
> > true);
> >                         if($item['IngredientList']['recipe_id'] ==
> > $id)
> >                         {
> >                                 $ing_list[] = $item;
> >                         }
> >                 }
>
> >                 $this->set('ingredient_list', $ing_list);
>
> >                 if (empty($this->data))
> >                 {
> >                         $this->data = $this->Recipe->read();
> >                 }
> >                 else
> >                 {
> >                         if ($this->Recipe->saveAll($this->data))
> >                         {
> >                                 $this->flash('Your recipe has been
> > updated.','/recipes');
> >                         }
> >                 }
> >         }
>
> >         function delete($id)
> >         {
> >                 $this->Recipe->del($id);
> >                 $this->flash('The recipe with id: '.$id.' has been
> > deleted.', '/ recipes');
> >         }
>
> >         private function set_recipe_types()
> >         {
> >                 $this->set('recipe_types',
> > $this->RecipeType->find('list', array
> > ('fields'=>'RecipeType.recipe_type',
> > 'order'=>'RecipeType.recipe_type')));
> >         }
>
> >         private function set_ingredients()
> >         {
> >                 $this->set('ingredients',
> > $this->Ingredient->find('list', array ('fields'=>'ingredient',
> > 'order'=>'ingredient')));
> >         }
>
> >         private function set_measurement_types()
> >         {
> >                 $this->set('measurement_types',
> > $this->MeasurementType->find('list',
> > array('fields'=>'measurement_type', 'order'=>'measurement_type')));
> >         }
>
> > }
>
> > ?>
>
> > INGREDIENT ELEMENT
>
> >         <tr id="ingredient_<?php echo $index; ?>">
> >                 <td>
> >                         <?php
> >                         echo $form->input('IngredientList.'. $index
> > .'.amount');
> >                         echo
> > $form->input('IngredientList.'.$index.'.id', array
> > ('type'=>'hidden'));
> >                         ?>
> >                 </td>
> >                 <td>
> >                         <?php
> >                         echo $form->label('IngredientList.'.
> > $index .'.measurement_type_id', 'Measurement Type');
> >                         echo $form->select('IngredientList.'.
> > $index .'.measurement_type_id', $measurement_types);
> >                         ?>
> >                 </td>
> >                 <td>
> >                         <?php echo $form->input('IngredientList.'.
> > $index .'.description'); ?>
> >                 </td>
> >                 <td>
> >                         <?php
> >                         echo $form->label('IngredientList.'. $index
> > .'.ingredient_id', 'Ingredient');
> >                         echo $form->select('IngredientList.'. $index
> > .'.ingredient_id', $ingredients);
> >                         ?>
> >                 </td>
> >                 <td>
> >                         <?php echo $html->link('delete',
> > 'ingredient_list/delete');       ?>
> >                 </td>
>
> >         </tr>
>
> > EDIT RECIPE VIEW
>
> > <h1>Edit Recipe</h1>
> > <?php
> > echo $form->create('Recipe', array('action' => 'edit')); echo
> > $form->input('Recipe.id', array('type'=>'hidden')); echo
> > $form->input('Recipe.recipe'); echo $form->input('Recipe.servings',
> > array('maxlength' => 5, 'size' => 5)); echo
> > $form->label('Recipe.servings', 'Recipe Type'); echo
> > $form->select('Recipe.recipe_type_id', $recipe_types); ?> <div>
> > <h2>Ingredient List</h2> <table id="ingredient_list"> <?php $x = 0;
> > foreach($ingredient_list as $ingredient) {
> >         echo $this->element('add_ingredient', array('index' => $x));
> >         $x++;}
>
> > ?>
> > </table>
> > <h2>Instructions and Description</h2> <?php echo
> > $form->input('Recipe.description', array('rows' => '3')); echo
> > $form->input('Recipe.instructions', array('rows' => '3')); echo
> > $form->end('Save Recipe'); ?>
>
> > ADD RECIPE VIEW
>
> > <h1>Add Recipe</h1>
> > <?php
> > echo $form->create('Recipe');
> > echo $form->input('Recipe.recipe');
> > echo $form->input('Recipe.servings', array('maxlength' => 5, 'size'
> > => 5)); echo $form->label('Recipe.servings', 'Recipe Type'); echo
> > $form->select('Recipe.recipe_type_id', $recipe_types); ?> <div>
> > <h2>Ingredient List</h2> <table id="ingredient_list"> <?php
> > for($index = 0; $index < 10; $index ++) {
> >         echo $this->element('add_ingredient', array('index' =>
> > $x));}
>
> > ?>
> > </table>
> > <h2>Instructions and Description</h2> <?php echo
> > $form->input('Recipe.description', array('rows' => '3')); echo
> > $form->input('Recipe.instructions', array('rows' => '3')); echo
> > $form->end('Save Recipe'); ?>


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to cake-php+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

No comments: