2012-08-01 12 views
6

Używam pomocnika formularza, aby wygenerować etykietę:Ciasto PHP 2 zwyczaj form-> Etykiety

$this->Form->label('Contact.name', 'Name'); 

który generuje następujące:

<label for="ContactName">Name</label> 

Czy to możliwe, aby wygenerować przy użyciu następujących pomocnik:

<label for="ContactName"><span class="mandatory">*</span> Name</label> 

Chociaż mogę ręcznie napisać html dla powyższego staje się nieco trudniejsze, gdy używam metoda wprowadzania, w której etykieta jest generowana automatycznie.

Na przykład:

$this->Form->input('Contact.forename',array('div' =>false, 
        'label' => array(
        text'=> 'First Name',class =>'myclass'), 
        'class' => 'input','size' => '25' ,'tabindex' => '1')); 

Czy jest to możliwe w cieście czy muszę ręcznie wstrzyknąć HTML za pomocą JavaScript po załadowaniu strony? Które uważam za raczej brzydkie.

Odpowiedz

8

Jeśli używasz walidację modelu dla pola obowiązkowe następnie CakePHP automatycznie stosuje „*” na etykiecie jeszcze można użyć pomocnika następujące znaczenie:

echo $this->Form->label('name', '<span class="mandatory">*</span> Name'); 

Jeśli nie chcesz, aby wygenerować etykiety automatycznie możesz użyć "label => false" podczas korzystania z helpera.

echo $this->Form->input('Contact.forename',array('label' =>false)); 
+0

Wielkie dzięki. Skończyło się na użyciu obu, ponieważ znalazłem błędy sprawdzania poprawności formularza tylko wyświetlać przy użyciu formularza-> wprowadzania i nie przy użyciu formularza-> tekst. $ this-> Form-> label ("Contact.forename", " * Name '); i $ this-> Form-> input ('Contact.forename', array ('div' => false, 'label' => false, 'class' => 'input', 'size' => '25', "tabindex" => '2')); działa świetnie :-). – Bear

4

Nie jestem pewien, czy CakePHP to obsługuje (i tak by się nieźle bałaganił). Najprostszym rozwiązaniem można myślę, jest przypisanie „obowiązkowe” klasę na etykiecie poprzez pomocnika forma:

$this->Form->label('User.name', 'Your username', array('class'=>'mandatory')); 

która produkuje coś takiego:

<label class="mandatory" for="ContactName">Name</label> 

Wtedy reszta odbywa się wyłącznie w CSS :

label.mandatory:after { 
    content: ' *'; 
    color: red; 
    display: inline; 
} 

Omija posiadanie dodatkowego kodu HTML.

+0

Wielkie dzięki za odpowiedź, nie pomyślałem, aby to zrobić w ten sposób. Jedynym minusem, jaki widzę, jest to, że muszę stworzyć kilka klas dla różnych treści. Zastanów się, czy chciałem (jeśli dotyczy) jako treść. – Bear

0

można to zrobić prosty przez

echo $this->Form->input('whatever', array('between'=>'<label for="ContactName"><span class="mandatory">*</span> Name</label>','label'=>false)); 
1

wiem, że to jest stary, ale może ktoś z CakePHP 3 jest ten sam problem. To jest to, co naprawiłem dla mnie, bez żadnego inlinecode.

<?php 
echo $this->Form->input(
'renovate_old', 
[ 
'type' => 'checkbox', 
'label' => ['text' => __('Alte Wohnung'), 'class' => 'moCheckLabel'] 
]); ?> 

Możesz więc nazwać swoją etykietę i użyć pola Baza danych do napisania.