Clicky

Skocz do zawartości


Zdjęcie
- - - - -

formularz + walidacja + bootstrap + powtarzanie zawartosci formularza = sieczka

7 odpowiedzi w tym temacie

  • Zaloguj się, aby dodać odpowiedź

#1 Kandyd

Kandyd

    Początkujący

  • Użytkownik
  • Pip
  • 3 postów

Napisano 03 grudzień 2013 - 12:41

Witam,

 

zrobiłem prosty formularz do rejestracji, w przypadku błędu walidacji wyswietla sie ponownie

a wpisane dane maja sie w nim pojawiac ponownie, do tego css + odpowiednie klasy z bootstrap ( http://getbootstrap.com/ )...

i w widoku wyszła mi sieczka htmla, php i helperow kohany.

 

W szczegolnosci brzydkie jest ustawianie klasy CSS pola na has-error (klasa z bootstrap) gdy jest blad dotyczacy tego pola. Dzieki klasie has-error pole z błędem ma czerwoną ramkę, ale kod tego jest brzydki:

class="form-group <?php if (Arr::get($errors,'username')) { echo 'has-error';}; ?>"

Dodatkowo wpisywanie wartosci przeslanej poprzednio tez nie wyglada ladnie:

<input .... value="<?php echo Arr::get($postdata,'email') ?>"

 

 

Czy da sie to zrobic bardziej elegancko?

<?php echo Form::open('signup',array("class"=>"form-horizontal","role"=>"form"));?>
  <div class="form-group <?php if (Arr::get($errors,'username')) { echo 'has-error';}; ?>">

        <?php echo Form::label('username', 'Nazwa użytkownika',array("class"=>"col-sm-2 control-label"))?>
    
    <div class="col-sm-10 col-md-5 col-lg-5">
      <input type="text" class="form-control" id="username" name="username" placeholder="Nazwa użytkownika" value="<?php echo Arr::get($postdata,'username') ?>" required>

<p class="help-block"><?php echo(Arr::get($errors,'username')); ?>  </p>

    </div>

  </div>

  <div class="form-group <?php if (Arr::get($errors,'email')) { echo 'has-error';}; ?>">
        <?php echo Form::label('email', 'Adres e-mail',array("class"=>"col-sm-2 control-label"))?>
    <div class="col-sm-10 col-md-4 col-lg-4">
      <input type="email" class="form-control" id="email" name="email" placeholder="E-mail" value="<?php echo  Arr::get($postdata,'email') ?>" required>
      <p class="help-block"> <?php echo(Arr::get($errors,'email')); ?>  </p>
    </div>
  </div>
  <div class="form-group <?php if (Arr::get($errors,'password')) { echo 'has-error';}; ?>">
        <?php echo Form::label('password', 'Hasło',array("class"=>"col-sm-2 control-label"))?>
    <div class="col-sm-10 col-md-4 col-lg-4">
      <input type="password" class="form-control" name="password"  id="password" placeholder="Wybierz hasło" required>
      <p class="help-block"> <?php echo(Arr::get($errors,'password')); ?>  </p>
    </div>
  </div>

...

kohana 3.3.1 i bootstrap 3 ( http://getbootstrap.com/ )



#2 Riu

Riu

    Senior Mastah

  • Webmastahy
  • PipPipPip
  • 949 postów

Napisano 03 grudzień 2013 - 13:04

Można np tak:

 

https://github.com/wgiog/kohana-formal

 

Generalnie to żeby uniknąć sieczki validację po stronie php'a robisz jako zapasową, a validujesz sobie js'em. Lnków kilka poniżej:

 

http://alittlecode.c...tter-bootstrap/

http://casperin.github.io/nod/

https://github.com/m...rapJQValPopover

http://reactiveraven...trapValidation/


Debian/Ubuntu + Kohana/Hanariu/Phalcon + MongoDB/MySQL + HTML5/CSS3 + Node.js/jQuery + CEO Sport Magazyn/CEO Hanariu


#3 Maciek

Maciek

    Senior Mastah

  • Użytkownik
  • PipPipPip
  • 780 postów

Napisano 03 grudzień 2013 - 13:15

Na początek - skoro labele rysujesz za pomocą klasy Form, to dlaczego konsewentnie nie rysujesz za jej pomocą inputów?



#4 Kandyd

Kandyd

    Początkujący

  • Użytkownik
  • Pip
  • 3 postów

Napisano 03 grudzień 2013 - 14:57

Na początek - skoro labele rysujesz za pomocą klasy Form, to dlaczego konsewentnie nie rysujesz za jej pomocą inputów?

 

Ponieważ dodaje na końcu niepotrzebny "/" -

    return '<input'.HTML::attributes($attributes).' />';

http://kohanaframewo.../api/Form#input (dokumentacji do 3.3 nie ma)



#5 Maciek

Maciek

    Senior Mastah

  • Użytkownik
  • PipPipPip
  • 780 postów

Napisano 03 grudzień 2013 - 16:24

Być może dla Ciebie ten "/" jest niepotrzebny, ale świat przechodzi/przeszedł (niepotrzebne skreślić) na XHTML, w którym jest on potrzebny.

 

Differences Between HTML and XHTML

In HTML, the <input> tag has no end tag.

In XHTML, the <input> tag must be properly closed, like this <input />.

 

Jest API dla Form::input dla wersji 3.3.x.



#6 mck

mck

    Jestę Blogerę

  • Admin
  • 1544 postów

Napisano 03 grudzień 2013 - 17:11

Ponieważ dodaje na końcu niepotrzebny "/" -

    return '<input'.HTML::attributes($attributes).' />';

http://kohanaframewo.../api/Form#input (dokumentacji do 3.3 nie ma)

Powiedz, że żartujesz, że to jakaś ukryta ironia. Dla "niepotrzebnego" backslasha wolisz pisać samemu całe pola ze wszystkimi argumentami? Wolisz utrudniać sobie życie, niż mieć 2 znaki więcej w wynikowym kodzie? :o

 

Być może dla Ciebie ten "/" jest niepotrzebny, ale świat przechodzi/przeszedł (niepotrzebne skreślić) na XHTML, w którym jest on potrzebny.

Świat przechodzi na HTML5, a tam końcowy backslash nie jest potrzebny. Co nie oznacza oczywiście, że w czymś przeszkadza :)



#7 Kandyd

Kandyd

    Początkujący

  • Użytkownik
  • Pip
  • 3 postów

Napisano 04 grudzień 2013 - 09:16

Powiedz, że żartujesz, że to jakaś ukryta ironia. Dla "niepotrzebnego" backslasha wolisz pisać samemu całe pola ze wszystkimi argumentami? Wolisz utrudniać sobie życie, niż mieć 2 znaki więcej w wynikowym kodzie? :o

 

 

Po prostu chciałem żeby był poprawny HTML5 - to takie dziwne? Sam pisałeś:

 

"Świat przechodzi na HTML5, a tam końcowy backslash nie jest potrzebny. "

 

Wracając do meritum, przy generowaniu inputu przez Form::input byłoby mniej-więcej tyle samo zachodu i mieszania:,

 

 

<input type="email" class="form-control" id="email" name="email" placeholder="E-mail" value="<?php echo Arr::get($postdata,'email') ?>" required>

czy:

<?php echo Form::input('email', Arr::get($postdata,'email'),array("class"=>"form-control","required", "id"=>"email", "placeholder"=>"E-mail", "type"=>"email" ))?>

 

Nie wiem też, czy da się dać do kodu "required" (bez wartości) używając HTML::attributes.



#8 mck

mck

    Jestę Blogerę

  • Admin
  • 1544 postów

Napisano 04 grudzień 2013 - 10:16

^^ Przy takim podejściu owszem, ale musisz pamiętać że to jest framework i w jego naturze leży rozszerzanie i maksymalne ułatwianie sobie pracy. Nic przecież nie stoi na przeszkodzie, by rozszerzyć helper Form o modyfikację input() (wyrzucenie backslasha, ustawienie domyślnie id takiego samego jak name) czy dodanie email() (który z automatu ustawi typ i placeholder). Używanie gołego frameworka to nie jest dobry sposób na szybką i wydajną pracę.






Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych