konto usunięte

Temat: Popup zamiast tekstu JText

Witam,

mam w Joomli moduł kontaktowy Rapid Contact Ex. Wiem, że to nie grupa Joomli, ale nie samej Joomli to dotyczy ;)

Moduł ów wywala mi błędy w postaci tekstu nad formularzem. Chciałbym, żeby błędy był w formie wyskakującego okienka alert. Obecnie wygląda to tak:

 if (($mField->type == 2) && (!preg_match('/^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i', strtolower($postField)))) {
$myError = $myError . '<span style="color: '.$error_text_color.';">' . JText::_('Field'). ' ' . JText::_($mField->label) . ': ' . JText::_('Please write a valid email') . '</span><br/>';
}
else if (($mField->type == 4) && (!eregi("\b[0-9]{5}(?:-[0-9]{4})?\b", $postField))) {
$myError = $myError . '<span style="color: '.$error_text_color.';">' . JText::_('Field'). ' ' . JText::_($mField->label) . ': ' . JText::_('Please write a valid postal code') . '</span><br/>';
}
else if (($mField->type == 7) && (!eregi("^([a-zA-Z]){1}([0-9][0-9]|[0-9]|[a-zA-Z][0-9][a-zA-Z]|[a-zA-Z][0-9][0-9]|[a-zA-Z][0-9]){1}([ ])([0-9][a-zA-z][a-zA-z]){1}$", $postField))) {
$myError = $myError . '<span style="color: '.$error_text_color.';">' . JText::_('Field'). ' ' . JText::_($mField->label) . ': ' . JText::_('Please write a valid postal code') . '</span><br/>';
}
else if (($mField->type == 3) && (!eregi("^[0-9() -+]{7,}$", $postField))) {
$myError = $myError . '<span style="color: '.$error_text_color.';">' . JText::_('Field'). ' ' . JText::_($mField->label) . ': ' . JText::_('Please write a valid telephone number') . '</span><br/>';
}


Czy jest mi ktoś w stanie pomóc?
Marcin Gościcki

Marcin Gościcki Front-end
webdeveloper

Temat: Popup zamiast tekstu JText

W duży skrócie:

Z poziomu back-end'u nie wyrzucisz alert'a. Zgaduję, że zmienna $myError jest gdzieś dalej w tym kodzie echo'wana. Opakuj sobie (jeśli nie jest opakowana) tą zmienną przy echo'waniu jakimś div'em (np. <div id="validationErrors">..</div>). W CSS-ie ukryj tego div'a (#validationErrors { display: none; }) i z poziomu JavaScript sprawdź czy ten div' nie jest pusty, jeśli nie to alert'uj tekst (czyli treści błędów) który w nim jest.

konto usunięte

Temat: Popup zamiast tekstu JText

Zrobiłem to w ten sposób:
if ($myError != '') {
print '<div style="display: none;">' . $myError . '</div>';
}


ale o JavaScripcie nie mam zielonego pojęcia :)
Marcin Gościcki

Marcin Gościcki Front-end
webdeveloper

Temat: Popup zamiast tekstu JText

W PHP-ie przy wypluwaniu kodu dodaj jakieś id do div'a:

if ($myError != '') {
print '<div id="validationErrors" style="display: none;">' . $myError . '</div>';
}


W JavaScript (JQuery):

$(document).ready(function(){
var validationErrors = "";
$('div#validationErrors').children('span').each(function(){
validationErrors = validationErrors + "\n" + $(this).text();
});
});


Jeśli potrzebujesz to w czystym JavaScript też to możesz zrobić.Marcin Gościcki edytował(a) ten post dnia 13.02.12 o godzinie 13:46

konto usunięte

Temat: Popup zamiast tekstu JText

Gdzie umieścić ten JS? Umieściłem go w <head> w ten sposób:

<script type="text/javascript">
<!--
$(document).ready(function(){
var validationErrors = "";
$('div#validationErrors').children('span').each(function(){
validationErrors = validationErrors + "\n" + $(this).text();
});
});
// -->
</script>


ale nie działa. Ofc dodałem ID diva tak jak mówiłeś

EDIT

Wiem o co chodzi. Joomla korzysta u mnie z mootools, który to wykorzystuje $ i wchodzi w konflikt z JQuery, którego po za tym nie mam. Za dużo pitolenia, a i nie widzę sensu wrzucać całego przepasłego JQuery tylko dla jednej funkcji i to jeszcze przez noConflict.

Mogę to poprosić w czystym JS? :) Byłbym niezmiernie wdzięczny.Łukasz Mik edytował(a) ten post dnia 13.02.12 o godzinie 22:17
Adam Krupa

Adam Krupa Senior Software
Developer, Lethe

Temat: Popup zamiast tekstu JText

W tym przypadku błąd jest tylko jeden... więc najprościej:

echo "<script type=\"text/javascript\">alert('{$myError}');</script>";


Jeżeli kod masz w postaci takiej jak podałeś czyli:

print '<div id="bledy_jakies" style="display: none;">' . $myError . '</div>';


To w prototype wystarczy pokazać diva czyli:

$('bledy_jakies').show();
Marcin Gościcki

Marcin Gościcki Front-end
webdeveloper

Temat: Popup zamiast tekstu JText

Adam Krupa:
W tym przypadku błąd jest tylko jeden... więc najprościej:

echo "<script [/quote]> type=\"text/javascript\">alert('{$myError}');</script>";[quote]

Rzeczywiście to jest prostsze rozwiązanie aczkolwiek mieszanie PHP z JavaScript'em jest bardzo nieeleganckie i wprowadza dużo bałaganu. Dodatkowo przydałoby się wyrzucić style="display:none;" i chować tego div'a z poziomu JS by zapewnić funkcjonalność w przypadku braku/wyłączonego JS.

P.S. Łukasz, pogooglaj o pętli foreach w czystym JS albo Mootools i spokojnie sobie sam przepiszesz ten kod który Ci napisałem. Albo użyj rozwiązania zaproponowanego przez Adama.

konto usunięte

Temat: Popup zamiast tekstu JText

O i teraz to już w ogóle kompletnie Was nie rozumiem. Prototype? ;)

konto usunięte

Temat: Popup zamiast tekstu JText

Łukasz Mik:
O i teraz to już w ogóle kompletnie Was nie rozumiem. Prototype? ;)
Prócz jQuery są inne biblioteki. Choćby prototype.js.

Warto się rozejrzeć niż lecieć za tłumem :)

konto usunięte

Temat: Popup zamiast tekstu JText

Nie da się tego prościej zrobić? Prototype, jQuery, ja niczego z tych rzeczy nie potrzebuję, to prosta wizytówka :)

konto usunięte

Temat: Popup zamiast tekstu JText

Marcin Gościcki:
W duży skrócie:

Z poziomu back-end'u nie wyrzucisz alert'a.

oh rly?

http://www.php.net/manual/en/v8js.examples.php
Marcin Gościcki

Marcin Gościcki Front-end
webdeveloper

Temat: Popup zamiast tekstu JText

Łukasz Nowacki:
Marcin Gościcki:
W duży skrócie:

Z poziomu back-end'u nie wyrzucisz alert'a.

oh rly?

http://www.php.net/manual/en/v8js.examples.php

ok. Może rzeczywiście źle się wyraziłem. Miałem na myśli, że za wyrzucenie alert'a odpowiedzialna jest przeglądarka. Mocno naciągając można nawet uznać, że kod poniżej to wyrzucenie alert'a z poziomu back-end'u...


<?php
echo "<script type=\"text/javascript\">alert('{$myError}');</script>";
?>

konto usunięte

Temat: Popup zamiast tekstu JText

Marcinie, działa. Dzięki. Jest tylko jeden problem, strona zostaje załadowana do momentu w którym wywali alert, wtedy ładowanie elementów na stronie się zatrzymuje i oczekuje na kliknięciu OK. Da się to jakoś rozwiązać?

EDIT

poradziłem sobie w ten sposób:
<script type=\"text/javascript\">setTimeout(function() {alert('$myError');},1);</script>
Łukasz Mik edytował(a) ten post dnia 01.03.12 o godzinie 10:10

Następna dyskusja:

skrypt Splash/ popup




Wyślij zaproszenie do