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 ?
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):
//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' ))
kontroler
if ($_POST['nazwa_modelu']['akcja'] == 'akcja1') {
//kod akcji 1
} else if ($_POST['nazwa_modelu']['akcja'] == 'akcja2') {
//kod akcji 2
} else {
//brak akcji
}
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.
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)
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 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.