edit page done from data in Database and has dynamic js
This commit is contained in:
parent
7775074e22
commit
12a6d649a4
@ -8,7 +8,7 @@ final class RecipeController
|
||||
if(count($A_urlParams)!=1){
|
||||
return View::show("errors/404");
|
||||
}
|
||||
|
||||
|
||||
$O_recipeModel = new RecipeModel();
|
||||
$A_returnArray = $O_recipeModel->getFullRecipeWithComments($A_urlParams[0]);
|
||||
if ($A_returnArray === null) {
|
||||
@ -24,4 +24,35 @@ final class RecipeController
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public function editAction(Array $A_urlParams = null, Array $A_postParams = null)
|
||||
{
|
||||
// demo array, remove this when we use the real edit function
|
||||
$A_returnArray = array(
|
||||
"recipeName" => "Pâte à crêpe",
|
||||
"recipeDescription" => "Légère et délicate, la pâte à crêpe est idéale pour des crêpes fines et croustillantes. Avec sa texture est onctueuse et son goût subtil, c'est un plat traditionnel français populaire chez tout le monde.",
|
||||
"recipeDifficutly" => "Facile",
|
||||
"recipeType" => array(),
|
||||
"recipeTime" => "45",
|
||||
"recipeIngredients" => array(
|
||||
"Farine" => "300g",
|
||||
"Sucre" => "3 cuillère à soupe",
|
||||
"Beurre fondu" => "50g",
|
||||
"Rhum" => "5cl",
|
||||
"Œuf" => "3",
|
||||
"Huile" => "2 cuillères à soupe",
|
||||
"Lait" => "60cl"
|
||||
),
|
||||
"recipeInstructions" => "Mettre la farine dans une terrine et former un puits.\nY déposer les oeufs entiers, le sucre, l'huile et le beurre.\nMélanger délicatement avec un fouet en ajoutant au fur et à mesure le lait. La pâte ainsi obtenue doit avoir une consistance d'un liquide légèrement épais.\nParfumer de rhum.\nFaire chauffer une poêle antiadhésive et la huiler très légèrement à l'aide d'un papier Essuie-tout. Y verser une louche de pâte, la répartir dans la poêle puis attendre qu'elle soit cuite d'un côté avant de la retourner. Cuire ainsi toutes les crêpes à feu doux."
|
||||
);
|
||||
|
||||
// need to send an array with names even if content is empty
|
||||
View::show("recipe/edit", $A_returnArray);
|
||||
|
||||
// print_r($A_urlParams);
|
||||
// $O_recetteModel = new RecipeIngredientsModel();
|
||||
// $O_recetteModel->getByID("");
|
||||
// View::show('helloworld/testform', array('formData' => $A_postParams));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,7 +1,232 @@
|
||||
<?php
|
||||
echo var_dump($A_vue['formData']);
|
||||
function getOrEmpty($A_Dict, $S_keyName) {
|
||||
if (isset($A_Dict[$S_keyName])) {
|
||||
return $A_Dict[$S_keyName];
|
||||
} else {
|
||||
if($S_keyName == "recipeType" || $S_keyName == "recipeIngredients")
|
||||
return array();
|
||||
return "";
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
echo '<form action="" method="post">';
|
||||
echo '<input type="text" name="test" id="test">';
|
||||
echo '<input type="submit" value="tester">';
|
||||
echo '</form>';
|
||||
<main>
|
||||
|
||||
<form action="/recipe/save" method="post">
|
||||
|
||||
<label for="recipeImage">Entrez l'image de haut de page :</label>
|
||||
<input type="file" name="recipeImage" id="recipeImage" required>
|
||||
|
||||
<label for="recipeName">Nom de la recette :</label>
|
||||
<input type="text" name="recipeName" id="recipeName" placeholder="Nom du plat" value="<?= getOrEmpty($A_view, "recipeName") ?>" required>
|
||||
</br>
|
||||
<label for="recipeDescription">Description de la recette</label>
|
||||
</br>
|
||||
<textarea name="recipeDescription" id="recipeDescription"><?= getOrEmpty($A_view, "recipeDescription") ?></textarea>
|
||||
|
||||
<section>
|
||||
<h1>Informations alimentaires</h1>
|
||||
|
||||
<label for="recipeFifficulte">Niveau de difficulé :</label>
|
||||
<select name="recipeDifficulte" id="recipeDifficulte" required>
|
||||
<option value="tresFacile" <?= getOrEmpty($A_view, "recipeDifficutly")=="Très facile"? 'selected="selected"' : "" ?> >Très facile</option>
|
||||
<option value="facile" <?= getOrEmpty($A_view, "recipeDifficutly")=="Facile"? 'selected="selected"' : "" ?>>Facile</option>
|
||||
<option value="moyen" <?= getOrEmpty($A_view, "recipeDifficutly")=="Moyen"? 'selected="selected"' : "" ?>>Moyen</option>
|
||||
<option value="difficile" <?= getOrEmpty($A_view, "recipeDifficutly")=="Difficle"? 'selected="selected"' : "" ?>>Difficile</option>
|
||||
</select>
|
||||
|
||||
|
||||
<legend>Type de plat :</legend>
|
||||
<input type="checkbox" name="recipeVegan" id="recipeVegan" <?= in_array("Végan", getOrEmpty($A_view, "recipeType"))? "checked":"" ?> >
|
||||
<label for="recipeVegan">Végan</label>
|
||||
<input type="checkbox" name="recipeLactoseFree" id="recipeLactoseFree" <?= in_array("Sans lactose", getOrEmpty($A_view, "recipeType"))? "checked":"" ?> >
|
||||
<label for="recipeLactoseFree">Sans lactose</label>
|
||||
<input type="checkbox" name="recipeGlutenFree" id="recipeGlutenFree" <?= in_array("Sans gluten", getOrEmpty($A_view, "recipeType"))? "checked":"" ?> >
|
||||
<label for="recipeGlutenFree">Sans gluten</label>
|
||||
|
||||
</br>
|
||||
|
||||
<label for="recipeTime">Temps de préparation :</label>
|
||||
<input type="number" name="recipeTime" id="recipeTime" min="5" max="1500" step="5" placeholder="Temps de préparation" value="<?= getOrEmpty($A_view, "recipeTime") ?>" required>
|
||||
<label for="recipeTime">minutes</label>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
<section>
|
||||
|
||||
<h1>Ingrédients</h1>
|
||||
|
||||
<ul class="recipeIngredients">
|
||||
<?php
|
||||
$ingredients = getOrEmpty($A_view, "recipeIngredients");
|
||||
if(sizeof($ingredients) > 0) {
|
||||
$i = 1;
|
||||
foreach($ingredients as $ingredientName => $ingredientValue) {
|
||||
echo '<li>
|
||||
<label for="recipeIngredient'.$i.'">Ingrédient :</label>
|
||||
<input type="text" name="recipeIngredient'.$i.'" id="recipeIngredient'.$i.'" placeholder="Farine" value="'.$ingredientName.'">
|
||||
<label for="recipeQuantity'.$i.'">Quantité :</label>
|
||||
<input type="text" name="recipeQuantity'.$i.'" id="recipeIngredient'.$i.'" placeholder="500g" value="'.$ingredientValue.'">
|
||||
</li>';
|
||||
$i++;
|
||||
}
|
||||
echo '</ul>
|
||||
<button type="button" id="recipeButtonIngrdientLess">-</button>';
|
||||
$numberOfIngredients = $i-1;
|
||||
} else {
|
||||
echo '<li>
|
||||
<label for="recipeIngredient1">Ingrédient :</label>
|
||||
<input type="text" name="recipeIngredient1" id="recipeIngredient1" placeholder="Farine">
|
||||
<label for="recipeQuantity1">Quantité :</label>
|
||||
<input type="text" name="recipeQuantity1" id="recipeIngredient1" placeholder="500g">
|
||||
</li>
|
||||
</ul>
|
||||
<button type="button" disabled="disabled" id="recipeButtonIngrdientLess">-</button>';
|
||||
$numberOfIngredients = 1;
|
||||
}
|
||||
?>
|
||||
<button type="button" id="recipeButtonIngredientPlus">+</button>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
<section>
|
||||
|
||||
<h1>Préparation</h1>
|
||||
|
||||
<ol class="recipeInstructions">
|
||||
<?php
|
||||
$preparation = getOrEmpty($A_view, "recipeInstructions");
|
||||
if(!empty($preparation)) {
|
||||
$steps = explode("\n", $preparation);
|
||||
$i = 1;
|
||||
foreach($steps as $step) {
|
||||
echo '<li>
|
||||
<label for="recipeInstruction'.$i.'">Étape '.$i.' :</label>
|
||||
<input type="text" name="recipeInstruction'.$i.'" id="recipeInstruction'.$i.'" placeholder="Battre les oeufs et la farine dans un grand saladier." value="'.$step.'">
|
||||
</li>';
|
||||
$i++;
|
||||
}
|
||||
$numberOfInstructions = $i-1;
|
||||
echo '</ol>
|
||||
<button type="button" id="recipeButtonInstructionLess">-</button>';
|
||||
} else {
|
||||
echo '<li>
|
||||
<label for="recipeInstruction1">Étape 1 :</label>
|
||||
<input type="text" name="recipeInstruction1" id="recipeInstruction1" placeholder="Battre les oeufs et la farine dans un grand saladier.">
|
||||
</li>
|
||||
</ol>
|
||||
<button type="button" disabled="disabled" id="recipeButtonInstructionLess">-</button>';
|
||||
$numberOfIngredients = 1;
|
||||
}
|
||||
?>
|
||||
<button type="button" id="recipeButtonInstructionPlus">+</button>
|
||||
|
||||
|
||||
</section>
|
||||
|
||||
<input type="submit" value="Enregistrer">
|
||||
|
||||
</form>
|
||||
|
||||
</main>
|
||||
|
||||
<style>
|
||||
#recipePreparation {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
textarea#recipeInstructions {
|
||||
resize: none;
|
||||
overflow: hidden;
|
||||
line-height: 20px;
|
||||
min-height: 20px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.lineNumber span {
|
||||
counter-increment: linenumber;
|
||||
}
|
||||
|
||||
.lineNumber span::before {
|
||||
content: counter(linenumber)".";
|
||||
display: block;
|
||||
line-height: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
numberOfIngredients = <?= $numberOfIngredients ?>;
|
||||
const buttonIngredientPlus = document.querySelector("#recipeButtonIngredientPlus");
|
||||
const buttonIngredientLess = document.querySelector("#recipeButtonIngrdientLess");
|
||||
const liIngredients = document.querySelector(".recipeIngredients");
|
||||
|
||||
buttonIngredientPlus.addEventListener('click', () => {
|
||||
numberOfIngredients++;
|
||||
let nextArray = Array.from(liIngredients.lastElementChild.cloneNode(true).children);
|
||||
let next = document.createElement('li');
|
||||
|
||||
for(let e in nextArray) {
|
||||
console.log(nextArray[e]);
|
||||
if(nextArray[e].tagName == "LABEL") {
|
||||
nextArray[e].setAttribute("for", "recipeIngredient"+numberOfIngredients);
|
||||
} else {
|
||||
nextArray[e].setAttribute("name", "recipeIngredient"+numberOfIngredients);
|
||||
nextArray[e].setAttribute("id", "recipeIngredient"+numberOfIngredients);
|
||||
nextArray[e].value = "";
|
||||
}
|
||||
next.appendChild(nextArray[e]);
|
||||
}
|
||||
|
||||
console.log(next);
|
||||
|
||||
liIngredients.appendChild(next);
|
||||
buttonIngredientLess.disabled = "";
|
||||
});
|
||||
|
||||
buttonIngredientLess.addEventListener('click', () => {
|
||||
numberOfIngredients--;
|
||||
liIngredients.lastElementChild.remove();
|
||||
if(liIngredients.children.length == 1)
|
||||
buttonIngredientLess.disabled = "disabled";
|
||||
});
|
||||
|
||||
|
||||
numberOfInstructions = <?= $numberOfInstructions ?>;
|
||||
const buttonInstructionPlus = document.querySelector("#recipeButtonInstructionPlus");
|
||||
const buttonInstructionLess = document.querySelector("#recipeButtonInstructionLess");
|
||||
const liInstruction = document.querySelector(".recipeInstructions");
|
||||
|
||||
buttonInstructionPlus.addEventListener('click', () => {
|
||||
numberOfInstructions++;
|
||||
let nextArray = Array.from(liInstruction.lastElementChild.cloneNode(true).children);
|
||||
let next = document.createElement('li');
|
||||
|
||||
for(let e in nextArray) {
|
||||
console.log(nextArray[e]);
|
||||
if(nextArray[e].tagName == "LABEL") {
|
||||
nextArray[e].setAttribute("for", "recipeIngredient"+numberOfInstructions);
|
||||
nextArray[e].textContent = "Étape "+numberOfInstructions+"\u00A0:";
|
||||
} else {
|
||||
nextArray[e].setAttribute("name", "recipeIngredient"+numberOfInstructions);
|
||||
nextArray[e].setAttribute("id", "recipeIngredient"+numberOfInstructions);
|
||||
nextArray[e].value = "";
|
||||
}
|
||||
next.appendChild(nextArray[e]);
|
||||
}
|
||||
|
||||
console.log(next);
|
||||
|
||||
liInstruction.appendChild(next);
|
||||
buttonInstructionLess.disabled = "";
|
||||
});
|
||||
|
||||
buttonInstructionLess.addEventListener('click', () => {
|
||||
numberOfInstructions--;
|
||||
liInstruction.lastElementChild.remove();
|
||||
if(liInstruction.children.length == 1)
|
||||
buttonInstructionLess.disabled = "disabled";
|
||||
});
|
||||
// TODO: refactor this
|
||||
</script>
|
||||
|
Loading…
Reference in New Issue
Block a user