1

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)

2

Odp: Validation message

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.

http://api.cakephp.org/class/form-helpe … elpererror

New Now Know How

3

Odp: Validation message

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)

4

Odp: Validation message

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.

5

Odp: Validation message

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().

6

Odp: Validation message

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');
                }
            }
            
        }

7

Odp: Validation message

.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)