Temat: Znów save ale inaczej.

Cześć,

Kolejny dzień to kolejny problem, dobrze tylko że poprzednie są już rozwizane dzięki wasze pomocy.

Dzień spędziłem nad takim zagadnieniem:

Mam tabelę settings a w niej:

id | label | value
1 | pokaż linki | 0
2 | pokaż opis zdjęć | 0
2 | pokaż wymiary | 0

Nie mam pojęcia jak utworzyc formularz, który zrobi mi :

[x] pokaż linki
[x] pokaż opis zdjęć
[x] pokaż wymiary
[zapisz ustawienia]

Nie piszę nawet o zapisywaniu ...

Chciałem ręcznie utworzyć inputy w stylu

echo $this->Form->checkbox('Setting.value', array('options'=>arra('value=>1);
echo $this->Form->checkbox('Setting.value', array('options'=>arra('value=>1);
echo $this->Form->checkbox('Setting.value', array('options'=>arra('value=>1);


Ale to nie zadziała w żaden sposób - chodziło mi o pomysł czy da się ręcznie jakoś to zrobic

Mam również pytanie czy da się może te dane przerobić w modelu i zapisać w kontrolerze?
To mi też nie działa:

public function beforeFilter() {
$this->data['Setting]['id'] = 1 // ręczne przypisanie czegoś do id nie zmienia $ths->request->data kontrolera


Za pomoc dziękuję.Ten post został edytowany przez Autora dnia 01.12.13 o godzinie 18:04
Kamil Kosiński

Kamil Kosiński CTO w
DobryMechanik.pl

Temat: Znów save ale inaczej.

różne pola na to daj. pojedyncze pole nadaje się do radio.
checkboxy w cakephp domyślne są w bazie jako tinyint długości 1 (wartość 0/1).

jeśli chcesz mieć tabelkę na settings to tak prosto nie będzie.
jeden ze sposobów:
1. w tabelce dodajesz kolumnę name
2. w formularzach używasz Settings.NAME (gdzie NAME to np SHOW_LINKS)
3. w akcji zapisujacej dla kazdego settings szukasz jego rekordu w bazie na podstawie name
4. po kolei/na raz (po przerobieniu danych foreachem) zapisujesz rekordy settings

możesz sobie później dorobić jakieś funkcje do wygodniejszego pobierania (a później zapisywania) danych, tak żeby robić np:
$this->Setting->find('setting', array('conditions' => array('Setting.name' => NAME))); (ja lubię utrzymywa ć konwencję cake, ale możesz to jeszcze bardziej uprościć)

Temat: Znów save ale inaczej.

Dzięki

4 punkt jest dla mnie jeszcze tajemnicą.
Dziś próbowałem pobawić się beforeSave modelu i przerobieniem $this->data ale wydawało się że kontroler nie widzi zmian w $this->request->data.

Czy mógłbyś mi podpowiedzieć, jak przerabiasz i gdzie $this->request->data przed zapisem?

Wydaję mi się, że znajomość takiego zagadnienia pozwoli czasem wyjść z opresji, może nie jakoś za bardzo elegancko, ale skoro jest metoda Cake do zrobienia czegoś, to czemu nieeleganckie ?:)

Dziękuję Kamilu za poświęcony czas.

Temat: Znów save ale inaczej.

Aha, czy jest sposób, w którym na żywca można polu nadać ID w celu wskazania że chodzi o dane pole?

Miałem już prawie rozwiązanie problemu, który opisuję w tym temacie, ale właśnie, brakło mi tego ID.

Zapisywałem sobie już fajnie dane jako checkboxy, ale miałem tylko jedno echo $this0>Form->input('id)

Gdyby był sposób na ręczne przypisanie, w połączeniu z saveMany chyba by poszło.
Dzięki.
Kamil Kosiński

Kamil Kosiński CTO w
DobryMechanik.pl

Temat: Znów save ale inaczej.

- foreach każde pole setting z formularza ($this->request->data['Setting'])
- znajdź rekord w bazie odpowiadający temu setting w bazie (find('first'))
- ustaw nową wartość dla tego setting
- zapisz setting w bazie (save)

koniec.

tutaj naprawdę nie ma co więcej myśleć nad tym.

zamiast szukać sposobu na save/saveManu/saveAll/... napisz czasami kilka linijek więcej, które przerobią dane przed zapisem lub zapisz dane pojedynczo, a nie będziesz miał ciągle problemów.

uwagi:
- nie przerabiasz danych w $this->data a jeśli już w $this->request->data
- nie wiem do czego ci id w formularzach o ile robisz tak jak zaproponowałem, a jeśli nie robisz to wklejaj następnym razem kod, bo to domyślanie się co i jak próbujesz robić i gdzie może być błąd jest bez sensu.

Temat: Znów save ale inaczej.

Podziałam, dziękuję,myślałem tylko że dane do obrobienia powinny być w modelu w beforeSave ( dlatego pisalem że w modelu jest to $this->data a w kontrolerze $this->request->data.

Dzięki, potestuję twoje uwagi.
Pozdrawiam.
Kamil Kosiński

Kamil Kosiński CTO w
DobryMechanik.pl

Temat: Znów save ale inaczej.

tak, tak faktycznie jest jak piszesz.
a do danych w modelu z poziomu kontrolera możesz się dostać przez $this->NazwaModelu->data (po tym jak wcześniej je do niego wrzucisz przez set/create).
Bartek Naski

Bartek Naski CakePHP developer

Temat: Znów save ale inaczej.

ja ostatnio przekonuję się do zapisu setingsów w yml, całkiem fajnie to działa a i nawet bezproblemowo...
np:
tablica settings
id | name | seting
1| nazwa | test:h:/s:{controller:tests:a:index:p0:2:p1:5}

w sumie przypadkiem na to wpadłem po zakupie ksiązki o frameworku symfony, warto poróbować
Kamil Kosiński

Kamil Kosiński CTO w
DobryMechanik.pl

Temat: Znów save ale inaczej.

Też ok pomysł. Ja jednak settings używam nie tylko do ustawień, ale np. do contentu bardzo unikalnego.
Np. o ile wiadomo jak trzymać strony tekstowe, newsy, produkty, ... to w przypadku na przykład strony kontaktowej gdzie chcesz mieć tekst + grafikę + mapkę wygodniej to wpakować właśnie w taką generic tabelkę niż robić oddzielną tabelę na jeden rekord.

Następna dyskusja:

Wiele stron(na tej samej ap...




Wyślij zaproszenie do