Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Tagi html w Label
Forum PHP.pl > Forum > PHP > Frameworki
The Night Shadow
Witam,

Radzę sobie już z tworzeniem formularzy za pomocą ZendFramework poprzez deklaracje tablicowe np:

  1. <?php
  2. $this->view->formularz_uzytkownikow = new Zend_Form( array(
  3.         'method' => 'post',
  4.         'action' => $this->view->baseUrl.'/uzytkownicy/rejestracja/',
  5.         'elements' => array(
  6.            'login' => array( 'text', array(
  7.               'required' => true,
  8.               'label' => '* Login:',
  9.               'value' => $t_uzytkownik->login,
  10.               'filters' => array(
  11.                  'StripTags'
  12.               ),
  13.               'validators' => array(
  14.                  array( 'NotEmpty', true, array(
  15.                     'messages' => array(
  16.                        'isEmpty' => 'Proszę podać login.'
  17.                  ))),
  18.                  array( 'StringLength', true, array(
  19.                     'min' => false,
  20.                     'max' => '50',
  21.                     'messages' => array(
  22.                        'stringLengthTooLong' => 'Login jest zbyt długi. Maksymalna ilość znaków to %max%.'
  23.                  ))),
  24.                  array( 'Alnum', true, array(
  25.                     'messages' => array(
  26.                        'notAlnum' => 'Login może składać się wyłącznie z liter i cyfr.'
  27.                  )))
  28.               ),
  29.               'attribs' => array(
  30.                  'maxlength' => '50'
  31.               )
  32.            ))
  33.         )
  34.      ));
  35. ?>


W przypadku tworzenia prostych, "oczywistych" systemów nie ma problemu. W momencie tworzenia bardziej skomplikowanych, wymagających pewnych wyjaśnień, zbieranie wszystkich potrzebnych informacji np. "Jeśli dodasz użytkownika zaznaczając pole KONTO AKTYWNE, automatycznie zostanie uzupełniona data aktywacji konta użytkownika." stworzy kompletny chaos i skutek będzie odwrotny do zamierzonego.

Chciałbym stworzyć kontekstową pomoc do formularzy. Nad formularzem widniałby tekst: "Pomoc możesz uzyskać po umieszczeniu kursora myszy nad nazwą pola np. "Login".

Wykorzystałbym system wyskakujących dymków OVERLIB. W jaki sposób go wykorzystywać wiem, jednakże natrafiłem na problem z wstawianiem tagów HTML do znacznika Label.

Powyższy przykład notacji tablicowej dla formularza posłuży za przykład. Jeśli zamiast Login w tag LABEL wstawię np. <div onmouseover="alert('cos')">tekst</div> tagi html nie są w ogóle interpretowane (są wywalane na ekran podobnie jak robić to można za pomocą funkcji htmlspecialchars).

Pytania są trzy.

Czy wykorzystując moją notację tablicową mogę do znacznika label dodać atrybut onmouseover wraz z wartością?

Jeśli tego zrobić nie mogę to ewentualnie, czy istnieje jakaś metoda na to by wykorzystać notację tablicową (może należałoby ją pisać w inny sposób), by ten atrybut móc dodać?

Jeśli dodać go w ogóle nie można, to w jaki sposób włączyć możliwość korzystania z tagów html w znaczniku label? W tym wypadku poradziłbym sobie "na około", poprzez właśnie wstawianie np. diva z nadanym atrybutem onmouseover.

Wiem, że można pisać własne decoratory formularzy, ale nie bardzo potrafię z tego korzystać. Poza tym chciałbym korzystać z domyślnego układu treści stosowanego w dekoratorze Zend, czyli znaczników dt dd itp.

Pozdrawiam i z góry dziękuję za pomoc.

PS: Wiem, że onmouseover mogę dodać bezpośrednio do pola tekstowego, ale to nie jest dobre rozwiązanie, bo niektóre pola tekstowe zamieniane są na edytor typu WYSYWIG. Poza tym dymek w takich miejscach byłby trochę upieredliwy.
Skyline
Możesz użyc decoratorów, ale mają one pewne ograniczenia i nie wszystko da się zrobic za ich pomoca. Zeby moc wstawiac tagi html do Label robisz cos takiego jak ponizej Ci wkleilem w array('Label', array('tag' => 'dt', 'escape' => false) ustawiasz opcje escape na false i wtedy w label mozesz dac tagi html.

  1. <?php
  2. $name = $this->createElement('text', 'name', array('label' => '<span class="name">Nazwa domeny: www.</span>'));
  3.         $name->setRequired(true);
  4.         $name->addValidator('NotEmpty',false,array('messages' => array('isEmpty' => 'Pole "Nazwa domeny" nie moze byc puste')))
  5.              ->addValidator('Hostname',false);
  6.        $name->getValidator('Hostname')->setMessage('Podana domena jest nieprawidlowa.');
  7.        $name->addDecorators(array(
  8.            array('ViewHelper'),
  9.            array('Errors'),
  10.            array('HtmlTag', array('tag' => 'dd', 'class' => 'input')),
  11.            array('Label', array('tag' => 'dt', 'escape' => false)),
  12.        ));
  13. ?>


Ale najprosciej jest wyswietlic poszczegolne pola formularza w pliku widoku, wtedy mozesz wokol nich dac dowolny kod html:

  1. <form action="<?php echo $this->escape($this->form->getAction()); ?>"
  2.                    method="<?php echo $this->escape($this->form->getMethod()); ?>">
  3.            
  4.                        <dl class="zend_form">
  5.                            <?php echo $this->form->password; ?>
  6.                            <dt class="to-right">
  7.                                <label for="password1a" class="required"><span class="password">Powtohasl‚o</span></label>
  8.                            </dt>
  9.                            <?php echo $this->form->password2; ?>
  10.                        </dl>
  11.                            <?php echo $this->form->Zapisz; ?>
  12.                </form>
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.