Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [CakePHP] Zapisanie wybranego stylu do bazy danych
Astan
post 21.05.2015, 08:30:18
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 16.01.2015

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
Riggs
post 21.05.2015, 08:38:42
Post #2





Grupa: Zarejestrowani
Postów: 162
Pomógł: 13
Dołączył: 16.06.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Astan
post 21.05.2015, 09:40:24
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 16.01.2015

Ostrzeżenie: (0%)
-----


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

Ten post edytował Astan 21.05.2015, 09:43:49
Go to the top of the page
+Quote Post
Riggs
post 21.05.2015, 09:51:20
Post #4





Grupa: Zarejestrowani
Postów: 162
Pomógł: 13
Dołączył: 16.06.2007

Ostrzeżenie: (0%)
-----


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

Ten post edytował Riggs 21.05.2015, 09:52:24
Go to the top of the page
+Quote Post
Astan
post 21.05.2015, 16:12:27
Post #5





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 16.01.2015

Ostrzeżenie: (0%)
-----


Byś mógł mnie mniej więcej nakierować jak mogę pobrać value z input'a ?
Go to the top of the page
+Quote Post
Riggs
post 22.05.2015, 08:54:14
Post #6





Grupa: Zarejestrowani
Postów: 162
Pomógł: 13
Dołączył: 16.06.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Astan
post 22.05.2015, 11:40:27
Post #7





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 16.01.2015

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 17.05.2024 - 17:11