Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Frameworki _ [CakePHP] Zapisanie wybranego stylu do bazy danych

Napisany przez: Astan 21.05.2015, 08:30:18

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 http://www.php.net/echo $this->Html->css('style', http://www.php.net/array('rel' => 'stylesheet', 'title' => 'styl1')); ?>
  3. <?php http://www.php.net/echo $this->Html->css('style_brazowy', http://www.php.net/array('rel' => 'alternate stylesheet', 'title' => 'styl2')); ?>
  4. <?php http://www.php.net/echo $this->Html->css('style_niebieski', http://www.php.net/array('rel' => 'alternate stylesheet', 'title' => 'styl3')); ?>
  5. <?php http://www.php.net/echo $this->Html->css('style_pomaranczowy', http://www.php.net/array('rel' => 'alternate stylesheet', 'title' => 'styl4')); ?>
  6. <?php http://www.php.net/echo $this->Html->css('style_rozowy', http://www.php.net/array('rel' => 'alternate stylesheet', 'title' => 'styl5')); ?>
  7. <?php http://www.php.net/echo $this->Html->css('style_zielony', http://www.php.net/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 http://www.php.net/echo $this->Html->image('czarny.png', http://www.php.net/array('width' => '150px', 'height' => '100px')); ?>
  3. <input type="radio" name="choice" value="styl2" onClick="chooseStyle(this.value, 60)"><?php http://www.php.net/echo $this->Html->image('brazowy.png', http://www.php.net/array('width' => '150px', 'height' => '100px')); ?>
  4. <input type="radio" name="choice" value="styl3" onClick="chooseStyle(this.value, 60)"><?php http://www.php.net/echo $this->Html->image('niebieski.png', http://www.php.net/array('width' => '150px', 'height' => '100px')); ?><br /><br />
  5. <input type="radio" name="choice" value="styl4" onClick="chooseStyle(this.value, 60)"><?php http://www.php.net/echo $this->Html->image('pomaranczowy.png', http://www.php.net/array('width' => '150px', 'height' => '100px')); ?>
  6. <input type="radio" name="choice" value="styl5" onClick="chooseStyle(this.value, 60)"><?php http://www.php.net/echo $this->Html->image('rozowy.png', http://www.php.net/array('width' => '150px', 'height' => '100px')); ?>
  7. <input type="radio" name="choice" value="styl6" onClick="chooseStyle(this.value, 60)"><?php http://www.php.net/echo $this->Html->image('zielony.png', http://www.php.net/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. }

Napisany przez: Riggs 21.05.2015, 08:38:42

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.

Napisany przez: Astan 21.05.2015, 09:40:24

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

Napisany przez: Riggs 21.05.2015, 09:51:20

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

Napisany przez: Astan 21.05.2015, 16:12:27

Byś mógł mnie mniej więcej nakierować jak mogę pobrać value z input'a ?

Napisany przez: Riggs 22.05.2015, 08:54:14

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

Napisany przez: Astan 22.05.2015, 11:40:27

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(http://www.php.net/array());
  9. } else {
  10. $this->Session->setFlash(__('Błąd podczas zapisu, proszę spróbować ponownie.'));
  11. }
  12.  
  13. }
  14. }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)