Temat: Validation message
Czy ktos wie gdzie mozna ustawic wyswietlanie sie message przy walidacji? Mam na mysli miejsce na ekranie zeby moc ustawic np obok pola ktore waliduje a nie pod.
Ostatnio edytowany przez carlin (2009-06-05 18:50:22)
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
Czy ktos wie gdzie mozna ustawic wyswietlanie sie message przy walidacji? Mam na mysli miejsce na ekranie zeby moc ustawic np obok pola ktore waliduje a nie pod.
Ostatnio edytowany przez carlin (2009-06-05 18:50:22)
Do tego służy najprawdopodobniej metoda error klasy FormHelper. Nie używałem tego akurat nigdy osobiście, ale myślę że o to Ci chodzi.
Maiłem ten sam problem. Jak pod polem input wyskakiwal error to chrzanił mi się wygląd formularza.
Ja chciałem error mesgs wyświetlać na górze formularza. Zrobiłem to za pomocą css i javascript.
Robiłem to na szybciora i nie chciało mi się zastanawiać ani szukać jak to zrobić w CakePHP.
Jeśli komuś nie będzie działało to od razu odpowiem standardową odpowiedzią informatyczną #3: "U mnie działa". A potem #2: "Dziwne".
Wiem, wiem kod jest brzydki, rozwiązanie głupie i wogóle JavaScript jest be i fu, a prawdziwi mężczyźni nie robią backupów itp itd.
Jeśli ktoś ma lepsze rozwiązanie tego problemu (na 200% istnieje takie) bardzo proszę o podzielenie się nim.
CSS
div.error-message {
display:none;
}
#flashBledy {
background-color: #FFCCCC;
text-align: center;
width: 40em;
margin:0;
padding-bottom:1em;
font-size:70%;
border: 1px black solid;
}JavaScript ( funkcję getElementsByClassName() wygooglujcie i dodajcie do tego samego pliku )
function bledy() {
if(document.getElementById("flashMessage")!=null) {
var elms = getElementsByClassName('error-message');
var inputy = [];
var error_msg = '';
error_msg += '<div id="flashBledy">';
for(var i=0,j=elms.length; i<j; i++) {
inputy.push(elms[i].parentNode.getElementsByTagName('input')[0]);
error_msg += '<br/><p>'+elms[i].innerHTML+'</p>';
}
for(var i=0,j=inputy.length; i<j; i++) inputy[i].style.background="#FFCCCC";
error_msg += '</div>';
document.getElementById("flashMessage").innerHTML += error_msg;
}
}Musicie umieścić plik z js w app/webroot/js , dołączyć plik z js np. w layoucie default.ctp
Pamiętajcie o dodaniu helpera JavaScript np w AppController.
default.ctp
echo $javascript->link('nazwa_pliku_bez_rozszerzenia');app_controller.php
var $helpers = array('Javascript', ...............);Na koniec dodamy wywołanie funkcji bledy() do pliku z widokiem zawierającym formularz.
Dodajcie gdzieś na końcu pliku.
widok_akcji_z_formularzem.ctp
$script = 'bledy();';
echo $javascript->codeBlock($script);Ostatnio edytowany przez alfabeta (2009-06-09 10:38:15)
Dzieki za odpowiedzi. alfabeta zrobilem podobnie do Ciebie tzn. na szybciora dalem tylko
div.error-message {
margin-left: 450px;
color: red;
}
czyli przesunalem tekst bledu na prawo (wczesniej tekst byl schowany pod nizszym formularzem). Na razie takie cos mi wystarcza.
Tak jeszcze trochę offtopowo ale co tam, skoro już jesteśmy w temacie error mesgów to ...
Ja miałem taki problem więc ostrzegam innych. Pamiętajcie, że funkcja read() czyści tablice z błędami walidacji.
Wtedy nie zobaczysz błędów choćbyś nawet chciał. Rozwiązanie bardzo proste: find() zamiast read().
Witam!!!
Można jeszcze w inny sposób bardziej łatwy to zrobić. Wystarczy edytować plik form.php scieżla do niego to cake/libs/view/helpers/form.php oczywiscie mowa o cake 1.2.*. U mnie to jest linia 824 i tak to powinno wyglądać:
if ($type != 'hidden') {
$out .= $after;
if ($error !== false) {
$errMsg = $this->error($fieldName, $error);
if ($errMsg) {
//TODO zęby bylo na gorze
$out = $errMsg.$out;
$divOptions = $this->addClass($divOptions, 'error');
}
}
}.editUsersWindow input {
display:block;
float:left;
width: 170px;
font-size:11px;
margin: 5px;
}
.editUsersWindow .clear {
clear:both;
}
.editUsersWindow .error-message {
font-size:9px;
color:#00FF66;
}
html wyglada tak: <clear><input></input><error>tu sie pojawia error</error></clear>
w ten sposob mam inputy jeden pod drugim a po pojawieniu sie bledu blad pokazuje sie obok inputa, po jego prawej stronie.
Ostatnio edytowany przez duke_piotr (2009-07-06 10:47:49)
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
Forum oparte o: PunBB, Gigaone - Certyfikaty SSL
Currently installed 10 official extensions. Copyright © 2003–2009 PunBB.