Yii Framework Forum: Two Submit Buttons On View Page - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Two Submit Buttons On View Page CHtml::submitButton Rate Topic: -----

#1 User is offline   kogut 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 16-May 14
  • Location:Dublin, Ireland

Posted 21 May 2014 - 04:07 AM

Czesc !

Mam kolejny orzech do zgryzienia.

Postaram sie prosto wytlumaczyc na czym polega moj problem.NAjpier jednak przyblize na czym polega projekt.

Mam strone z przepisami kulinarnymi. Do tworzenia nowego przepisu uzywam kontrolera create ktory sprawdza czy zostala stworzona lista skaldnikow, jesli nie wyswietla view z dodawaniem skladnikow, z view wracam do tego kontrolera create i sprawdzam znowu czy lista jest, jesli tak wyswietla sie inny view z modelem juz samego przepisu. po nacisnieciu CHtml::submitButton konroler wykonuje ostateczna validacje i zapisuje mopdel. Na stronie przepisu jednak jest drugi przycisk subbmit ktory odpowiada za update listy skaldnikow - submit button ktory wraca do konrolera create i wyswietla znowu liste skaldniow, jednakze gubi mi model bo zrobiny jest w klasycznym stylu z ukrytym polem.


Pytanie:
Jak wstawic dwa przyciksi CHtml::submitButton tak abym za kazdym razem byl w stanie przeslac model ale mogl jednoczesnie rozpoznac ktry z submit buttons zostal przycisniety ?


Dzieki ogromne i pozdrawiam!

Marcin.
0

#2 User is offline   .viktor. 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 90
  • Joined: 25-August 10
  • Location:Sokołów Podlaski, Poland

Posted 21 May 2014 - 04:25 AM

np:
1. widok
<input type="submit" name="akcja" value="akcja1" />
<input type="submit" name="akcja" value="akcja2" />

1. kontroler
if ($_POST['akcja'] == 'akcja1') {
    //kod akcji 1
} else if ($_POST['akcja'] == 'akcja2') {
    //kod akcji 2
} else {
    //brak akcji
}


2. widok
<input type="submit" name="akcja1" value="akcja1" />
<input type="submit" name="akcja2" value="akcja2" />

2. kontroler
if (isset($_POST['akcja1')) {
    //kod akcja1
} else if (isset($_POST['akcja2'])) {
    //kod akcja2
} else {
    //brak akcji
}

0

#3 User is offline   kogut 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 16-May 14
  • Location:Dublin, Ireland

Posted 21 May 2014 - 04:36 AM

View Post.viktor., on 21 May 2014 - 04:25 AM, said:

np:
1. widok
<input type="submit" name="akcja" value="akcja1" />
<input type="submit" name="akcja" value="akcja2" />

1. kontroler
if ($_POST['akcja'] == 'akcja1') {
    //kod akcji 1
} else if ($_POST['akcja'] == 'akcja2') {
    //kod akcji 2
} else {
    //brak akcji
}


2. widok
<input type="submit" name="akcja1" value="akcja1" />
<input type="submit" name="akcja2" value="akcja2" />

2. kontroler
if (isset($_POST['akcja1')) {
    //kod akcja1
} else if (isset($_POST['akcja2'])) {
    //kod akcja2
} else {
    //brak akcji
}




Czesc Viktor, dzieki za szybka odpowiedz. Taki tradycyiny sposob wykorzystuje obecnie ale tym sposobmem nie przekazuje zmiennej $model ktora jest typu array wiec nie moze byc przekazana przez POST. Moglbym uzyc metody implode ale $model jest zbyt skomplikowany. Tak wiec jedynym sposobem jaki widzie jest uzycie CHtml::submitButton, dzieki ktoremu bede w stanie przeslac $model, Dzieki!
0

#4 User is offline   .viktor. 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 90
  • Joined: 25-August 10
  • Location:Sokołów Podlaski, Poland

Posted 21 May 2014 - 05:03 AM

View Postkogut, on 21 May 2014 - 04:36 AM, said:

Czesc Viktor, dzieki za szybka odpowiedz. Taki tradycyiny sposob wykorzystuje obecnie ale tym sposobmem nie przekazuje zmiennej $model ktora jest typu array wiec nie moze byc przekazana przez POST. Moglbym uzyc metody implode ale $model jest zbyt skomplikowany. Tak wiec jedynym sposobem jaki widzie jest uzycie CHtml::submitButton, dzieki ktoremu bede w stanie przeslac $model, Dzieki!

Dałem Ci tylko "wzorzec projektowy :)", wydaje mi się, że nie ma żadnych przeszkód żeby przesyłać array przez POST, bo tak właśnie jest przesyłany model w YII, dla pewności bo nie do końca rozumiem o co chodzi, wklej, widok, kontroler i model (jak nie tajemnica):

1. w widoku (public static string submitButton(string $label='submit', array $htmlOptions=array ( )))
//proste użycie
echo CHtml::submitButton(string $label='submit', array ('name'='akcja', value='akcja' ))
//dołączenie do modelu
echo CHtml::submitButton(string $label='submit', array ('name'='nazwa_modelu[akcja]', value='akcja' ))


2. kontroler
if ($_POST['nazwa_modelu']['akcja'] == 'akcja1') {
    //kod akcji 1
} else if ($_POST['nazwa_modelu']['akcja'] == 'akcja2') {
    //kod akcji 2
} else {
    //brak akcji
}


3.Dla pewności przed wypełnieniem modelu:
unset($_POST['nazwa_modelu']['akcja']);
$model->attributes=$_POST['Comment'];

0

#5 User is offline   kogut 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 16-May 14
  • Location:Dublin, Ireland

Posted 21 May 2014 - 05:30 AM

Dzieki wielkie za wsparcie.

Chodzilo mi o przslanie zmiennej $model jako jedna z inputow, ze sie tak wyraze
np.:
<input type="hidden" name="model" value="<?php if(isset($model)) echo $model; ?>">

W takim wypadku nie bedzie to mozliwe, nie moge przeslac calego modelu.

Wpadlem jednak na pomysl ze wszytskie znaczace zmienne modelu wylistuje i uzyje implode, wtedy bede mogl przeslac jako string i po drugiej stronie uzyje explode zeby powrocic do array.

chyba sie uda taki workaround :)

Dzieki ogromne za pomoc.

Pozdrawiam!

Marcin.
0

#6 User is offline   .viktor. 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 90
  • Joined: 25-August 10
  • Location:Sokołów Podlaski, Poland

Posted 21 May 2014 - 05:51 AM

Zainteresuj się raczej tym http://www.yiiframew...pl/topics.auth:

Yii::app()->user->twoj_model = $twoj_model


user jest zawsze dostępny, bo jest inicjowany automatycznie (jeżeli nic nie zmieniałeś), więc za pomocą "setState" możesz do niego wrzucić dowolny model lub zmienną i w każdej chwili ją odczytać, można użyć tego mechanizmu do przechowywania modelu między różnymi formularzami.

Lub zaimplementować użycie sesji session (dane dostępne dla użytkownika w jednej sesji praktycznie to samo co user setState) lub state persister (dane dostępne między wszstkimi żądaniami i sesjami)
http://www.yiiframew...ics.application

Twój pomysł z implode i explode jakoś do mnie nie przemawia :)
1

#7 User is offline   kogut 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 16-May 14
  • Location:Dublin, Ireland

Posted 21 May 2014 - 06:01 AM

Sprawdze to, bardzo dziekuje. Metoda z implode tez niezbyt mi sie podoba, ale jestem juz bliski skonczenia projektu i to sa ostateczne poprawki ktore odktylem tesutjac a deadline sie zbliza...

Dzieki za pomoc!
0

#8 User is offline   kogut 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 16-May 14
  • Location:Dublin, Ireland

Posted 21 May 2014 - 06:40 AM

Dzieki ogormne, dziala! if(isset($model)) Yii::app()->user->setState('model', $model);

moge przeslac caly model z view do kontorolera bez uzycia formularza. Dziekuje bardzo za pomoc!!!

Pozdrawiam!

Marcin.
0

#9 User is offline   afnwork 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 09-May 12

Posted 21 May 2014 - 09:59 AM

Nie prościej przekazać id modelu składników np w url?
0

#10 User is offline   kogut 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 16-May 14
  • Location:Dublin, Ireland

Posted 22 May 2014 - 06:20 AM

View Postafnwork, on 21 May 2014 - 09:59 AM, said:

Nie prościej przekazać id modelu składników np w url?


Dzieki za podpowiedz. Troche chaotycznie wytllumaczylem moj problem. Mianowicie, tak to wyglada.
Strona jest o przepisach kulinarnych. zarejestrowany urzytkonik moze stworzyc nowy przpis. Kazdy przpis posiada oczywisice liste skladnikow. Od strony bazy danych sa miedzy innymi 3 tablice: tablica w ktorej przechowywane sa przepisy zawierajaca min. id przepisu (PrimaryKey), druga tablica zawierajaca wszystkie mozliwe skladniki z id skaldnika (PK) i trzecia tablica laczaca przepisy z skaldnikami ( nazwana listaskaldnikow), tablica ta zawiera 4 kolumny: id przpisu (ForeginKey), id skaldnika(FK), ilosc, typ ilosci(FK). W momemcie towrzenia przpisu dane zapisaywane sa do dwoch tabel, mianowcie jeden record do tabeli przepisow, oraz kilka rekordow do tablicy listaSkladnikow w zaleznosci ile skldnikow posiada przepis. Moj problem polegal na tym ze nie chcialem miec sytucji w ktorej tworzy sie przepis bez listy skladnikow, w sytuacji gdy uzytkownik w pewnym momencie zamknie przegladareke i nei dokonczy procesu. Rozwiazalego uzywajac tylko jedenej metody actionCreate ktora w zaleznosci od postepu wyswietla inne widoki. Jezlie wszytsko ok to zapisuje do bazy danych calosc. Kolejny problem byl natury wyswietlania listy skladnikow do zaznaczenia. Chcialem to zrobic z lista checkbosow + dwa text pola przy kazdym checkbosie dla ilosci i typu i tutaj wlasnie nie moglem nigdzie znalezc jak to zrobic z yii. liste checkboxow moge wyswietlic ale nie moglem/nie potrafilem dodac pola textowego + dropdown list przy kazdym checkbosie no i pozniej zapisanie tego do bazy danych jako modelu, bo to jest wielokrotne zaspytanie w zaleznosci o ilosci wybranych skladnikow. Workaround do tego to zrobienie tej listy w tradycyjny sposob bez uzycia yii i tutaj wlasnie gubilem model danych dla przepisow.
Tak czy siak juz dziala. To jest projekt na prace dyplomowa, od instalacji systemu operacyjnego, do dzialajacej aplikacji. Mam czas do konca czerwca zeby to oddac a jeszcze musze opisac caly prcess, tak wiec sprezarka :) Dzieki ogromne za pomoc.

Mam juz kolejne pytanie, wiec zara zaczne watek :)

Pozdrawiam.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users