Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CakePHP] Zapisanie wybranego stylu do bazy danych
Forum PHP.pl > Forum > PHP > Frameworki
Astan
Witam,

jak mogę zapisać wybrany styl przez użytkownika do bazy danych ? W bazie utworzyłem pole o nazwie style, w którym ma być przechowywany wybrany jeden styl z pośród sześciu.

Kawałek kodu z folderu View->Layouts->default.ctp
  1. <head>
  2. <?php echo $this->Html->css('style', array('rel' => 'stylesheet', 'title' => 'styl1')); ?>
  3. <?php echo $this->Html->css('style_brazowy', array('rel' => 'alternate stylesheet', 'title' => 'styl2')); ?>
  4. <?php echo $this->Html->css('style_niebieski', array('rel' => 'alternate stylesheet', 'title' => 'styl3')); ?>
  5. <?php echo $this->Html->css('style_pomaranczowy', array('rel' => 'alternate stylesheet', 'title' => 'styl4')); ?>
  6. <?php echo $this->Html->css('style_rozowy', array('rel' => 'alternate stylesheet', 'title' => 'styl5')); ?>
  7. <?php echo $this->Html->css('style_zielony', array('rel' => 'alternate stylesheet', 'title' => 'styl6')); ?>
  8. </head>


Kolejna część kodu z folderu View->User->settings.ctp
  1. <form id="switchform">
  2. <input type="radio" name="choice" value="styl1" onClick="chooseStyle(this.value, 60)"><?php echo $this->Html->image('czarny.png', array('width' => '150px', 'height' => '100px')); ?>
  3. <input type="radio" name="choice" value="styl2" onClick="chooseStyle(this.value, 60)"><?php echo $this->Html->image('brazowy.png', array('width' => '150px', 'height' => '100px')); ?>
  4. <input type="radio" name="choice" value="styl3" onClick="chooseStyle(this.value, 60)"><?php echo $this->Html->image('niebieski.png', array('width' => '150px', 'height' => '100px')); ?><br /><br />
  5. <input type="radio" name="choice" value="styl4" onClick="chooseStyle(this.value, 60)"><?php echo $this->Html->image('pomaranczowy.png', array('width' => '150px', 'height' => '100px')); ?>
  6. <input type="radio" name="choice" value="styl5" onClick="chooseStyle(this.value, 60)"><?php echo $this->Html->image('rozowy.png', array('width' => '150px', 'height' => '100px')); ?>
  7. <input type="radio" name="choice" value="styl6" onClick="chooseStyle(this.value, 60)"><?php echo $this->Html->image('zielony.png', array('width' => '150px', 'height' => '100px')); ?>
  8. </form>


próbowałem skorzystać z saveField w controlerze User tylko nie wiem co podać jako drugi argument aby mi zczytało i zapisało wybrany styl w bazie
  1. function settings(){
  2. $this->User->id = $this->Auth->user('id');
  3. $this->User->saveField('style', .... );
  4. }
Riggs
ja bym zrobił dodatkową tabelę w bazie danych np. Styles z następującymi polami: id, name, path (ścieżka do css), image (ścieżka do obrazka). W users pole style zamień na style_id i przechowuj id z tabeli styles. Później w layoucie sprawdzisz czy user jest zalogowany - jeśli jest to wczytasz styl ze ścieżki (będziesz miał to w sesji jeśli korzystasz z AuthComponent) a jeśli nie to wrzucisz jakiś domyślny.
Astan
Jest to dobre rozwiązanie lecz ja bym wolał stworzyć tylko dodatkową kolumne w tabeli Users o nazwie style i w niej przechowywać wybrany styl. Mój problem tkwi w tym, że nie mam pomysłu jak pobrać wartość value lub title w których jest przypisany wygląd pod nazwą styl1, styl2 itd. Dokładnie te wartości chcę pobrać i zapamiętać.

Brakuje mi drugiego argumentu, który będzie w poleceniu saveField
Riggs
jeśli wszystkie style masz w jednym katalogu to w kolumnie style przechowuj tylko nazwę pliku. A value w radio buttonach to będzie po prostu ta nazwa pliku
Astan
Byś mógł mnie mniej więcej nakierować jak mogę pobrać value z input'a ?
Riggs
Jeśli wysyłasz formularz postem to np. $_POST['choice'] albo $this->request->data['choice'] - ale zawsze warto użyć Cake'owego helpera do formularzy
Astan
Dziękuję za pomoc, utworzyłem kod, który poprawnie zapisuje i przechowuje dane w baziedanych. Sprawdzisz czy ten kawałek kodu ma prawdłową składnię czy trzeba go porprawić mimo że działa zapis danych.

  1. function settings(){
  2. if($this->request->is('post')){
  3.  
  4. $this->User->create();
  5. $this->User->id = $this->Auth->user('id');
  6. if ($this->User->saveField('style',$this->request->data['choice'])) {
  7. $this->Session->setFlash(__('Wybrany styl został dodany.'));
  8. return $this->redirect(array());
  9. } else {
  10. $this->Session->setFlash(__('Błąd podczas zapisu, proszę spróbować ponownie.'));
  11. }
  12.  
  13. }
  14. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.