Ahh I get it. Thanks very much.
-----Original Message----- From: [email protected] [mailto:[email protected]] 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 <[email protected]> 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: [email protected] [mailto:[email protected]] 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, "[email protected]" > <[email protected]> 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 [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 -~----------~----~----~----~------~----~------~--~---
