Łukasz
Mik
Technik-informatyk,
grafik, webmaster,
fotograf,
dziennik...
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
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.
Łukasz
Mik
Technik-informatyk,
grafik, webmaster,
fotograf,
dziennik...
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
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
Łukasz
Mik
Technik-informatyk,
grafik, webmaster,
fotograf,
dziennik...
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
Programista,
LearnPlace.pl
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
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.
Łukasz
Mik
Technik-informatyk,
grafik, webmaster,
fotograf,
dziennik...
Temat: Popup zamiast tekstu JText
O i teraz to już w ogóle kompletnie Was nie rozumiem. Prototype? ;)
Michał
Wachowski
Freelancer na
zakręcie i
bazodanowiec z
bożej łaski
Temat: Popup zamiast tekstu JText
Łukasz Mik:Prócz jQuery są inne biblioteki. Choćby prototype.js.
O i teraz to już w ogóle kompletnie Was nie rozumiem. Prototype? ;)
Warto się rozejrzeć niż lecieć za tłumem :)
Łukasz
Mik
Technik-informatyk,
grafik, webmaster,
fotograf,
dziennik...
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 :)
Łukasz
Nowacki
Front-End Developer,
Scrum Master
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
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>";
?>
Łukasz
Mik
Technik-informatyk,
grafik, webmaster,
fotograf,
dziennik...
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
