Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] Tworzenie formularza
peter13135
post 17.07.2012, 17:20:29
Post #1





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Framework symfony2 ma fajną opcję automagicznego budowania formularzy.

Mogę np. jednym poleceniem utworzyć sobie grupę checkoxów, czy radiobuttonów z polami z bazy.
Tutaj mały example znaleziony w sieci obrazujący co mam na myśli
  1. $builder->add('users', 'entity', array(
  2. 'class' => 'AcmeHelloBundle:User',
  3. ));



W jaki sposób teraz mam skonsturować templatkę, tak aby pomiędzy radiobuttonami (czy tam checboxami - w zależności od parametrów które podam) mogę umieścić jakieś elementy html ? Na przykład diva ?

Czyli chcę osiągnąć taki efekt :

  1. <input />
  2. tutaj jakiś mój divek
  3. <input />
  4. <input />


--------------------
:)
Go to the top of the page
+Quote Post
usb2.0
post 17.07.2012, 17:23:26
Post #2





Grupa: Zarejestrowani
Postów: 341
Pomógł: 25
Dołączył: 28.09.2008
Skąd: Lublin

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


no w widoku oczywiście jeśli używasz twiga to chyba tak to leci
Kod
{{ form_row('form.nazwa_pola') }}


no i wyświetlając tak input każdy osobno możesz wcisnąć miedzy nie co uważasz

Ten post edytował usb2.0 17.07.2012, 17:24:27
Go to the top of the page
+Quote Post
peter13135
post 17.07.2012, 17:32:00
Post #3





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Nie bardzo.


--------------------
:)
Go to the top of the page
+Quote Post
toffiak
post 17.07.2012, 17:43:20
Post #4





Grupa: Zarejestrowani
Postów: 395
Pomógł: 80
Dołączył: 24.08.2009

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


http://symfony.com/doc/current/cookbook/fo...tomization.html


--------------------
Go to the top of the page
+Quote Post
peter13135
post 17.07.2012, 20:13:32
Post #5





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Dzięki za odpowiedzi, ale po ponownym przeczytaniu tego artykułu nie jestem w stanie rozwiązać swojego. Albo tam nie ma informacji o tym, jak mój problem rozwiązać, albo po prostu nie potrafię go tam wyszukać. Czy mogę po prosić o bezpośredni link do przykładu questionmark.gif

wiem, że form_row mogę sobie rozdzielić na form_widget, label, oraz errors. Ale jak rozdzielić form_widget któro wyświetla mi kilka radiobuttonów/checkboxów na pojedyncze radiobuttony/checkboxy ?


--------------------
:)
Go to the top of the page
+Quote Post
Crozin
post 17.07.2012, 20:20:14
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Żeby wstawić coś pomiędzy renderowane checkboksy/radio-buttony musiałbyś dla tego elementu formularza nadpisać widget form_field. Jednakże takie coś podejrzanie pachnie błędnym modelem danych - potrzeba wstawienia czegoś pomiędzy serię checkboksów jest bardzo nietypowa. Mógłbyś przybliżyć nam strukturę/przeznaczenie tego formularza?
Go to the top of the page
+Quote Post
peter13135
post 17.07.2012, 20:43:22
Post #7





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


To ma być "formularz wyceny" dla firmy robiącej strony www. W tym formularzu są różne pola tekstowe, checkboxy, radiobuttony. Po kliknięciu w niektóre radiobuttony pojawiają się inne inputy. Dość to rozbudowane.

Jest sobie dla przykładu "projekt graficzny" i 3 opcje (radio) do wyboru. Po zaznaczeniu jednej z opcjii pojawiają się kolejne pola. Są one różne w zależności od zaznaczenia.

w chwili obecnej jest tak, że te "kolejne pola" pojawiają się pod tymi trzema opcjami... no i to działa. Ale prezes sobie zarzyczył, że jak zaznaczę pierwszy radiobutton, to te dodatkowe pola mają się ukazać między pierwszym a drugim radiobuttonem.


mam nadzieję, że za mocno nie pokręciłem.


--------------------
:)
Go to the top of the page
+Quote Post
Crozin
post 17.07.2012, 20:48:53
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Z punktu widzenia wygody obsługi takiego formularza jest to idiotyczny pomysł, ale mniejsza z tym. Zapewne i tak korzystasz tam z JS do pokazywania kolejnych elementów formularza, tak? To przy pomocy JS przenieś resztę pól w odpowiednie miejsce - tak będzie szybciej i wygodniej.
Go to the top of the page
+Quote Post
peter13135
post 17.07.2012, 20:52:25
Post #9





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Dokładnie tak. Przeniesienie pól jsem to oczywiste rozwiązanie, ale liczyłem na coś bardziej po stronie symfony.
No ale... skoro mówisz, że nie da rady, to zostanę przy JS. Dzięki za odpowiedź.


--------------------
:)
Go to the top of the page
+Quote Post
toffiak
post 17.07.2012, 20:56:08
Post #10





Grupa: Zarejestrowani
Postów: 395
Pomógł: 80
Dołączył: 24.08.2009

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


Jako przykład mogę podać dodawanie br-ki i tekstu przed każdym nowym polem radio.

Klasa formularza tu a szablon tu

Za pomocą
Kod
{% form_theme form _self %}
wymuszam wyszukiwanie nadpisanych bloków w tym samym szablonie w którym znajduje się mój wyświetlany formularz, wszystko jest objaśnione w linku który podałem wcześniej ( metoda pierwsza ). Sam formularz wyświetla 5 przycisków radio, jako że nadpisałem domyślny szablon zamiast wyświetlać blok z pliku używany jest mój.

Cała trudność polega na wybraniu odpowiedniego bloku do nadpisania.

Trochę się spóźniłem i rozwiązanie z javascriptem będzie lepsze/szybsze choć nadpisywanie bloków widgetów wewnątrz innych nadpisywanych bloków pewnie by się udało to jest to rozwiązanie zbyt skomplikowane.

Ten post edytował toffiak 17.07.2012, 21:01:49


--------------------
Go to the top of the page
+Quote Post
Crozin
post 17.07.2012, 21:07:00
Post #11





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@toffiak: Tutaj większym problemem było to, że wewnątrz bloku radio_widget nie wystarczyło podać statycznego kodu HTML, a należało wygenerować inne pola z formularza - o ile dobrze kojarzę, takie coś mogłoby już być nieco problematyczne i napakowane różnymi hackami.
Go to the top of the page
+Quote Post
peter13135
post 19.07.2012, 08:58:02
Post #12





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Dziękuje wam za odpowiedzi smile.gif
Zostanę chyba przy javascripcie, bo wydaje mi się, że po prostu łatwiej będzie mi w nim to zrobić. Symfony2 uczę się dopiero od 2 tygodni.

http://www.yewchube.com/2011/08/symfony-2-...form-templates/
http://forum.symfony-project.org/viewtopic...=23&t=35769

Tutaj znalazłem kod za pomocą którego mogę zmienić "label" formularza (tak przynajmniej mi się wydaje tongue.gif ) Jednak nie potrafię tego dostosować

zrobiłem takie coś :

  1. {% form_theme form _self %}
  2.  
  3. {% block radio_label %}
  4.  
  5. {% spaceless %}
  6.  
  7. <span>hehe</span><img class="tooltipek" src=" {{asset('help.png')}}"/> <br>
  8.  
  9. {% endspaceless %}
  10.  
  11. {% endblock radio_label %}

To wyświetla dla każdego radiobuttona taki sam label, bo zmiennych żadnych nie ma.

Chciałem dodać {{label}} tak jak w examplu, ale mam błąd, że takiego czegoś twig nie zna.

Czy mogę prosić o podanie "oryginalnej" wersji radio_label, którą następnie będę mógł zmodyfikować ?
Generalnie chodzi mi tylko o dodanie obrazka na końcu każdego label'a


edit://

takie coś też nie hula :/

Kod
{% block radio_label %}

{% spaceless %}

     {{ block('base_field_label') }}
     <img class="tooltipek" src=" {{asset('help.png')}}"/> <br>

{% endspaceless %}

{% endblock radio_label %}


moja ikonka się pokazuje, ale poza tym nic. TO {{ block('base_field_label') }} niczego nie wyświetla.

Ten post edytował peter13135 19.07.2012, 09:07:45


--------------------
:)
Go to the top of the page
+Quote Post
Crozin
post 19.07.2012, 09:23:45
Post #13





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Domyślne szablony elementów formularzy: https://github.com/symfony/symfony/tree/mas...rces/views/Form. Korzystając z Twiga masz dostęp do dokładnie tych samych zmiennych.

Ten post edytował Crozin 19.07.2012, 09:24:12
Go to the top of the page
+Quote Post
peter13135
post 19.07.2012, 10:08:29
Post #14





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Dzięki za odpowiedź, jednak ja nadal nie potrafię tego wykorzystać. Znalazłem tam np. field_label
  1. <?php echo $view['form']->block('form_label') ?>

Ale radio label już nie ma.
Piszesz, że mam dostęp do dokładnie tych samych zmiennych. O jakich zmiennych piszesz ? wink.gif

Takie coś :

{{block(form_label)}}

Mi nie działa.

Kod
{{ block('field_label')}}

Takie coś mi działa, ale.. jak dam kod obrazka pod tym, to jest on pod label'em, a chciałbym, żeby był on obok niego :/


--------------------
:)
Go to the top of the page
+Quote Post
Crozin
post 19.07.2012, 10:19:41
Post #15





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


To już kwestia odpowiedniego ostylowania tego w CSS-ie.
Go to the top of the page
+Quote Post
peter13135
post 19.07.2012, 10:27:08
Post #16





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


OK poradziłem sobie.
A czy da się jakoś "wyciągnąć" atrybut for z label'a
Chciałbym go wrzucić jako id w img w nieco zmienionej formie.

czyli chcę taki efekt uzyskać :
  1. <input type="radio" id="valuationform_graphicProject_0" name="valuationform[graphicProject]" required="required" value="0" />
  2. <label for="valuationform_graphicProject_0" class=" required">Stworzenie projektu graficznego</label>
  3. <img id="tooltip_valuationform_graphicProject_0" class="tooltipek" src=" /help.png"/>


Ten post edytował peter13135 19.07.2012, 10:27:26


--------------------
:)
Go to the top of the page
+Quote Post
Crozin
post 19.07.2012, 10:31:03
Post #17





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


https://github.com/symfony/symfony/blob/mas...widget.html.php

Jak widzisz atrybuty dla elementu <input /> są renderowane przez kolejny blok - attributes - a tam widać, że jest dostęp do zmiennej $id, która przechowuje w tym przypadku poszukiwane przez Ciebie tooltip_valuationform_graphicProject_0.
Go to the top of the page
+Quote Post
peter13135
post 19.07.2012, 10:45:16
Post #18





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Doszedłem do takiego czegoś :
Kod
    {{ block('widget_attributes') }}

Co wyświetla
Kod
id="valuationform_graphicProject_0" name="valuationform[graphicProject]" required="required"

Ale... jak wyciągnąć wartość samego id ?

Ten post edytował peter13135 19.07.2012, 10:45:59


--------------------
:)
Go to the top of the page
+Quote Post
Crozin
post 19.07.2012, 11:23:16
Post #19





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


No to rzuć jeszcze okiem na to co wyświetla "widget_attributes" i z jakich zmiennych korzysta - pisałem już przecież o tym post wcześniej.
Go to the top of the page
+Quote Post
usb2.0
post 19.07.2012, 15:46:02
Post #20





Grupa: Zarejestrowani
Postów: 341
Pomógł: 25
Dołączył: 28.09.2008
Skąd: Lublin

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


tak może żeby nie spamić, pozwolę zadań sobie pytanie w Twoim temacie;)
odnośnie walidacji takiego formularza, załóżmy że w akcji index tworzę cały formularz, pojawia się tam metoda bindRequest ()i isValid(), reguły walidacji mam napisane w yaml'u. No i oczywiście, jeśli dane z formularza są poprawne chce przekazać je do innej akcji przez action w formularzu. No i tu sie rodzii problem, jeśli mam action do akcji innej niż index, to walidacja nie działa, natomiast jeśli action w ogole nie ma, lub jest to index/# to jest dobrze. Co to może byc?smile.gif

wygłupiłem sie sory;P

Ten post edytował usb2.0 19.07.2012, 15:55:21
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: 10.08.2025 - 17:58