Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] ZendForm preview/readonly
Forum PHP.pl > Forum > PHP > Frameworki
nospor
Hejka,
czy istnieje w ZendForm opcja preview lub readonly?
Chodzi mi konkretnie o taką sytuację:
Mamy formularz. Wszystkie pola są do edycji. No i super fajnie.
Ale wchodzi do edycji użytkownik, który ma prawdo do edycji tylko wybranych pól. Czyli ustawiam mu dla pól, których nie może edytować, atrybut preview/readonly i tych pól już nie może ruszyc. W formularzu będą one widoczne tylko jako etykiety z tekstem wartosci tego pola, a po stronie serwera pola te nie będą przechodziły walidacji ani nie będą zbierać wartości z post.

idzie coś takiego zrobic w ZendForm czy trzeba kombinować?
destroyerr
W dokumentacji zostało o tym napisane, jak nadawać atrybuty winksmiley.jpg
Małe przeszukanie internetu i wiem jak zabezpieczyć takie pola. Metoda setIgnore na danym elemencie.

Oczywiście oświadczam, że nie znam ZF, przyjdzie batman to odpowie lepiej.
nospor
Cytat
W dokumentacji zostało o tym napisane, jak nadawać atrybuty
O jakich atrybutach mówisz? To jak ustawiac atrybuty to ja wiem, a jesli ci chodzilo a htmlowy readonly to naprawde nie o to mi chodzilo.

Cytat
Metoda setIgnore na danym elemencie.
Widziałem tę metodę. Ale ona powoduje jedynie ze element jest ignorowany ale nadal jest wyswietlany jak był.

darko
Aby wyłączyć z walidacji wybrane pola można użyć setRequired(false); tutaj przykład, natomiast, aby ukryć (właściwie dosłownie nie wywalisz z formularza pól) można zmienić atrybut klasy css, np. $element->setAttrib('class','hidden'); (+ w cssie określenie pseudoklasy css hidden). Nic innego mi nie przychodzi do głowy, jednak te dwa zabiegi powinny razem dać zamierzony efekt. Ach, metodą analogiczną dla addElement jest removeElement <-- poszukaj, bo nie stosowałem jeszcze tego smile.gif
nospor
setRequred() zarządza wymagalnością pola. A są jeszcze inne walidatory

Podsumowując bo widzę za idiote mnie biorą winksmiley.jpg :
wiem jak ustawic lub nie ustawic walidator
wiem jak ustawic dowolny atrybut html dla elementu
wiem jak dodac element
wiem jak usunac element
nie chce ustawiac atrybutum, który schowa mi element, bo ja chce ten element widziec, ale jako tekst

Pytam sie, czy jest magiczny guzik, ktory utawi mi formularz w tryb preview.

Jak nie ma, to bede zmuszony połączyc rozne rzeczy by to osiągnac.
destroyerr
@nospor wybacz, ale najzwyczajniej w świecie nie zrozumiałem Twojego zamysłu. Nie biorę Ciebie za idiotę, chciałem pomóc.
Teraz już chyba rozumiem i pozostaje mi napisać, że nie ma nic takiego w zendzie. Da się zrobić i nie trzeba kombinować. Chcesz coś takiego lub takiego?

Linki są poprawne, ich serwer miał problemy (zawsze jest cache google) teraz wydaje się działać już normalnie.
darko
Według mojej najlepszej wiedzy - nie ma takiego "magicznego guzika".
nospor
@destroyer
pierwszy link raczy mnie komunikatem
Cytat
This ZF Tool is Temporarily Down for Maintenance


Przy idiocie dałem przymruzenie oka, by bylo wiadomo, ze mowie to na pół serio i się nie gniewam smile.gif

Jak poprawisz linka to wieczorem przejrzę obydwa

@darko dopytuję sie tak dlatego, ze swego czasu (jeszcze w php4) napisalem klase formularza i tam byl "magicnzy guzik". Nie bylo to skomplikowane do napisania i sie zastanawialem czy tez potezny ZF tez tak ma winksmiley.jpg
thm
a może wystarczy ci usunięcie dekoratorów "viewHelper" i i "htmlTag" a wartośc pola wrzucić w "description" ?
nospor
nie, gdyż wówczas wyłozy sie na walidatorach. Trzeba jeszcze wyłączyc walidatory winksmiley.jpg
darko
Też kiedyś napisałem podobną klasę i formularz w łatwy sposób spełniał rolę podglądu dla np. artykułów. Niestety, jak bawię się ZF już trzeci miesiąc, tak jeszcze nie znalazłem "magicznego guzika" spełniającego podobną funkcję. No, ale zawsze można sobie taki "guzik" samemu napisać rozszerzając klasę Zend_Form.
pgrzelka
w klasie dziedziczącej po Zend_Form robisz coś takiego
  1. if ( ! $acl->isAlloved('grupa', 'zasob', 'edit') ) {
  2. foreach ($this->getElements() as $element) {
  3. $element->setDisabled(true); // tu nie wiem czy będzie ok ... bo ja całkowicie inaczej tworzę formularze
  4. }
  5. }


chyba bardziej 'automatycznie' się nie da

oczywiście pamiętaj aby do funkcji zapisywania danych dostęp mieli tylko uprawnieni użytkownicy.
destroyerr
Problem jest taki, ze Zend_Form_Element nie ma funkcji setDisabled. Jesli miales na mysli ustawienie atrybutu, to nospor juz pisal, ze wie jak to zrobic i ze nie rozwiazuje to jego problemu.
darko
Tak mi przyszło do głowy, że możesz przekazać formularz do widoku i tam możesz sobie w dowolny sposób decydować, które elementy i jak wyświetlić, w zależności od potrzeb.
nospor
@darko to była moja pierwsza mysl jaka przyszła mi do głowy, zanim jeszcze założyłem temat winksmiley.jpg
Pewnie na niej się skonczy.
batman
Cytat(destroyerr @ 23.02.2010, 12:49:17 ) *
Oczywiście oświadczam, że nie znam ZF, przyjdzie batman to odpowie lepiej.
Dziękuję za uznanie. Nie zostanie to zapomniane winksmiley.jpg

W moim przypadku rozwiązałem podobny problem w nico inny sposób. U mnie wymogiem było stworzenie kilku wersji tego samego formularza w zależności od uprawnień użytkownika. Admin widzi wszystkie pola, użytkownik tylko niektóre, a o reszcie nie ma pojęcia.
Udało mi się to osiągnąć poprzez dziedziczenie. Na "samej górze" znajduje się formularz admina, zawierający wszystkie pola. "Pod nim" na zasadzie dziedziczenia znajdują się formularze poszczególnych ról. W klasach tych usuwam niektóre pola poprzez removeElement.

W twoim przypadku zamiast usuwać, mógłbyś podmienić element na hidden, który dane ma zapisane w description. Następnie mała zabawa z CSS i description wyświetla się jako zwykły tekst obok etykiety.
nospor
Dziękuję panowie, wasze odpowiedzi w pewnym sensie pomogły smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.