|
VETERINAR
|
 |
« : 26.05.2009, 15:40:18 » |
|
Кто ни будь разбирался как сделать в компоненте валидацию добавляемых данных, а точнее повесить обработчик события на кнопки "сохранить" и "применить"? Я смотрел код, который использует Joomla при добавлении контента, но там какой-то аццкий метод и не работает при использовании своего компонента. Пробовал на jquery вешать событие типа $("#adminForm").submit, но не срабатывает, т.к. Joomla сабмитит форму тоже через javascript и событие не возникает.
В общем кто как это разруливал?
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #1 : 26.05.2009, 15:43:09 » |
|
JHTML::_('behavior.formvalidation');и добавить в элемент формы класс required Подключается стандартная фишка mootools
|
|
|
|
|
Записан
|
|
|
|
|
|
vmir
Захожу иногда

Репутация: +4/-0
Offline
Сообщений: 17
|
 |
« Ответ #3 : 31.05.2009, 17:39:16 » |
|
Обработчик вещается тривиально просто. Вот пример: <script language="javascript" type="text/javascript"> function submitbutton(pressbutton) { if (pressbutton == 'copy') { if (document.adminForm.boxchecked.value == 0) { alert("Вы забыли указать объект. Выберите объект из списка для копирования."); } else { submitform('copy'); } } else { submitform(pressbutton); } } </script> В данном примере отлавливается событие нажатия кнопки copy. Если посетитель не выбрал ни одного элемента (document.adminForm.boxchecked.value == 0), то ему от ворот поворот. Ну а фактически можно проверять все что угодно в рамках javascript.
|
|
|
|
|
Записан
|
|
|
|
|
VETERINAR
|
 |
« Ответ #4 : 17.06.2009, 14:10:33 » |
|
Обработчик вещается тривиально просто. Вот пример Это конечно здорово и работает в линейке 1.0, но топик лежит в разделе 1.5 и этот метод в 1.5 не работает, к сожалению.
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #5 : 17.06.2009, 14:32:34 » |
|
Давай по порядку Подключили стандартный файлик validate.js JHTML::_('behavior.formvalidation');В форме пишем (именно класс form-validate скажет скрипту что надо отработать данную форму) <form action="" name="MyFormName" class="form-validate" method="post" > Ну и собственно поля формы <input name="pbform[fio]" class="inputbox required" value="" /> Класс required говорит, что это поле просто обязательное, если добавить еще numeric - будет проверка на значение и так далее. Смотри media\system\js\validate.js на предмет наличия стандартных возможностей валидации и по желанию дописывай туда свои правила И совсем забыл, для кнопки класс тоже надо указать class="button validate"
|
|
|
|
« Последнее редактирование: 16.07.2009, 14:56:47 от beliyadm »
|
Записан
|
|
|
|
x00xer
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 51
|
 |
« Ответ #6 : 19.06.2009, 00:10:00 » |
|
А есть ли у Джумлы готовые класс(ы) для валидации на стороне сервера ??
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #7 : 19.06.2009, 00:16:13 » |
|
Если посмотреть тот же компонент контактов, то в контроллере можно найти // Input validation if (!$this->_validateInputs( $contact, $email, $subject, $body ) ) { JError::raiseWarning( 0, $this->getError() ); return false; } Оттуда и плясать, сам как то не задумывался, обычно свои обработчики использовал
|
|
|
|
|
Записан
|
|
|
|
vmir
Захожу иногда

Репутация: +4/-0
Offline
Сообщений: 17
|
 |
« Ответ #8 : 22.06.2009, 16:33:10 » |
|
Это конечно здорово и работает в линейке 1.0, но топик лежит в разделе 1.5 и этот метод в 1.5 не работает, к сожалению.
Со стороны backend'а все работает, мануалы это подтверждают (http://docs.joomla.org/How_to_create_a_custom_button), уже не раз использовал этот прием в своем компоненте. Ну а по поводу frontend'а, можно сделать как пишут в мануалах http://docs.joomla.org/How_to_use_the_JToolBar_class_in_the_frontend. Про валидацию еще нашел вот это http://docs.joomla.org/Form_validation
|
|
|
|
|
Записан
|
|
|
|
LOBsTerr
Захожу иногда

Репутация: +2/-0
Offline
Пол: 
Сообщений: 23
Вопрос?
|
 |
« Ответ #9 : 09.10.2009, 13:32:54 » |
|
свалидировать select пытался написать свой обработчик, но почему то он не хочет работать. Также пытался на онлоад как доках написано. Но селект игнорируется. посмотрел файл vakidate.js там проверяется тип input, submit, button. Попытался там добавить селект, опять же не работает. разобраться. Хочу чтобы значение выпадающих списков проверялось на больше нуля. this.setHandler('validate-select', function (value) { return (value > 0); } );
this.setHandler('password', function (value) { regex=/^\S[\S ]{2,98}\S$/; return regex.test(value); } );
Заранее всем спасибо кто откликнется
|
|
|
|
|
Записан
|
|
|
|
LOBsTerr
Захожу иногда

Репутация: +2/-0
Offline
Пол: 
Сообщений: 23
Вопрос?
|
 |
« Ответ #10 : 19.10.2009, 08:21:35 » |
|
Что неужели никто не сталкивался с подобными задачами, валидации выпадающих списков (селект). Или все делали дополнительную валидацию ?
|
|
|
|
|
Записан
|
|
|
|
|
|
LOBsTerr
Захожу иногда

Репутация: +2/-0
Offline
Пол: 
Сообщений: 23
Вопрос?
|
 |
« Ответ #12 : 20.10.2009, 00:01:18 » |
|
Да находил, эту тему по ссылке. Только не смог разобраться, попробую еще раз разобраться, и задам уже более конкретные вопросы, либо напишу инструкцию.
|
|
|
|
|
Записан
|
|
|
|
|
|
LOBsTerr
Захожу иногда

Репутация: +2/-0
Offline
Пол: 
Сообщений: 23
Вопрос?
|
 |
« Ответ #14 : 27.10.2009, 15:24:00 » |
|
Спасибо всем кто откликнулся. 2 Kler - Это просто перевод статьи из официальной документации. Но все равно спасибо. И так вот решение. Есть два способа добавить свою функцию валидации. 1) пишем пользовательскую функцию для единичного случая. Я возьму свой пример и так у меня есть выпадающий спсисок: <select class="validate-select"> <option value="0">Выберите из списка</option> <option value="1">1</option> <option value="2">2</option> </select>
Прописываем у него наш класс validate-select. Подключаем библиотеку валидации : <?php JHTML::_('behavior.formvalidation'); ?>
Я хотел чтобы функция проверяла, что не стоит значение по умолчанию, проверяем значение на больше 0. Пишем следующую функцию: <script type="text/javascript"> Window.onDomReady( function() { document.formvalidator.setHandler('select', function(value) { return value > 0; }) } ); </script>
Вот и все как оказалось все просто. 2) Но каждый раз писать эту функцию согласитесь не удобно, добавим нашу функцию в библиотеку validate.js Открываем этот файл и после this.setHandler('email', function (value) { regex=/^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/; return regex.test(value); } );
Добавляем наш метод: this.setHandler('select', function (value) { return value > 0; } );
Теперь прописав у любого селекта класс validate-select можно проверять на значение по умолчанию. PS поменяйте тело функции и название префикса на нужное вам. Прошу не ругаться за столь разжеванное объяснение сделано специально для новичков, или для тех кто совсем не в курсе. Как всегда все оказалось просто, только нужна внимательность и аккуратность.
|
|
|
|
« Последнее редактирование: 29.10.2009, 21:02:33 от LOBsTerr »
|
Записан
|
|
|
|
shprota
Разработчик расширений для Joomla 1.5
Репутация: +53/-1
Offline
Пол: 
Сообщений: 790
Тружусь, не покладая рук
|
 |
« Ответ #15 : 29.10.2009, 09:53:46 » |
|
Это конечно здорово и работает в линейке 1.0, но топик лежит в разделе 1.5 и этот метод в 1.5 не работает, к сожалению.
В 1.5 этот метод прекрасно работает, если что.
|
|
|
|
|
Записан
|
|
|
|
LOBsTerr
Захожу иногда

Репутация: +2/-0
Offline
Пол: 
Сообщений: 23
Вопрос?
|
 |
« Ответ #16 : 29.11.2009, 00:56:18 » |
|
Вот еще одна полезная модификация. Я столкнулся с такой проблемой, что форма была у меня очень длинная (опрос в три экрана). Так вот валидация формы проходила нормально, но у меня помечались поля, которые были в самом начале, т.е. пользователь их не мог видеть. И для пользователя складывалось такое ощущение, что кнопка сабмита просто не работает. Тогда я решил как то оповещать пользователя, что он сделал что-то не так. Откываем файл media/system/js/validate.js Находим такой вот код строка 138 (может отличаться): // Run custom form validators if present $A(this.custom).each(function(validator){ if (validator.exec()!= true) { valid = false; } });
после него добавляем if (!valid) { alert('Вы не заполнили все необходимые поля!'); }
PS поменяйте сообщение на свое. и теперь можно проверять
|
|
|
|
|
Записан
|
|
|
|
viroff
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 42
потому что не все йогурты одинаково полезны...
|
 |
« Ответ #17 : 07.03.2010, 23:14:12 » |
|
Давай по порядку Подключили стандартный файлик validate.js JHTML::_('behavior.formvalidation');В форме пишем (именно класс form-validate скажет скрипту что надо отработать данную форму) <form action="" name="MyFormName" class="form-validate" method="post" > Ну и собственно поля формы <input name="pbform[fio]" class="inputbox required" value="" /> Класс required говорит, что это поле просто обязательное, если добавить еще numeric - будет проверка на значение и так далее. Смотри media\system\js\validate.js на предмет наличия стандартных возможностей валидации и по желанию дописывай туда свои правила И совсем забыл, для кнопки класс тоже надо указать class="button validate" beliyadm - спасибо большое! Я вот как полчаса ищу про валидаторы форм, а тут ваше объяснение - здорово - кратко, доходчиво и понятно! Спасибо.
|
|
|
|
|
Записан
|
|
|
|
viroff
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 42
потому что не все йогурты одинаково полезны...
|
 |
« Ответ #18 : 07.03.2010, 23:37:47 » |
|
Спасибо всем кто откликнулся. 2 Kler - Это просто перевод статьи из официальной документации. Но все равно спасибо. И так вот решение. Есть два способа добавить свою функцию валидации. 1) пишем пользовательскую функцию для единичного случая. Я возьму свой пример и так у меня есть выпадающий спсисок: <select class="validate-select"> <option value="0">Выберите из списка</option> <option value="1">1</option> <option value="2">2</option> </select>
Прописываем у него наш класс validate-select. Подключаем библиотеку валидации : <?php JHTML::_('behavior.formvalidation'); ?>
Я хотел чтобы функция проверяла, что не стоит значение по умолчанию, проверяем значение на больше 0. Пишем следующую функцию: <script type="text/javascript"> Window.onDomReady( function() { document.formvalidator.setHandler('select', function(value) { return value > 0; }) } ); </script>
Вот и все как оказалось все просто. 2) Но каждый раз писать эту функцию согласитесь не удобно, добавим нашу функцию в библиотеку validate.js Открываем этот файл и после this.setHandler('email', function (value) { regex=/^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/; return regex.test(value); } );
Добавляем наш метод: this.setHandler('select', function (value) { return value > 0; } );
Теперь прописав у любого селекта класс validate-select можно проверять на значение по умолчанию. PS поменяйте тело функции и название префикса на нужное вам. Прошу не ругаться за столь разжеванное объяснение сделано специально для новичков, или для тех кто совсем не в курсе. Как всегда все оказалось просто, только нужна внимательность и аккуратность. спасибо тебе! я вообще и не думал, что все ответы в одном месте лежат 
|
|
|
|
|
Записан
|
|
|
|
viroff
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 42
потому что не все йогурты одинаково полезны...
|
 |
« Ответ #19 : 28.03.2010, 03:13:57 » |
|
В 1.5 этот метод прекрасно работает, если что.
А работает только под зарегистрированным пользователем, или же при любом?? Просто сейчас проблема - если пользователь никакой (не админ, не автор...) то submitform не срабатывает... Подскажите путь к решению. ---- решено УЖАСНО, но работает. Ф-ции submitform и submitbutton прописал в коде вида (submitform просто скопировал!)
|
|
|
|
« Последнее редактирование: 31.03.2010, 19:59:18 от viroff »
|
Записан
|
|
|
|
C_CLuber
Новичок
Репутация: +0/-0
Offline
Пол: 
Сообщений: 7
|
 |
« Ответ #20 : 18.05.2010, 00:08:40 » |
|
Как по мне то лучше написать собственный валидатор используя приемы из жумлы.... Правда у меня есть особенность. муттулз и капшен пришлось отключить... конфликтовало с jQuery(не нашел как исправить).
|
|
|
|
|
Записан
|
|
|
|
yunoshev
Разработчик расширений для Joomla 1.0
Репутация: +134/-1
Offline
Пол: 
Сообщений: 924
|
 |
« Ответ #21 : 13.08.2010, 15:15:19 » |
|
Кто-то пробовал работать с валидатором в обновленной версии Joomla 1.5.19(20) с включенным плагином "System - Mootools Upgrade"? После загрузки страницы выдает ошибку скрипта: "el.getTag is not a function" (validate.js). Замечены и другие ошибки. Может, кто сталкивался и нашел решение? Все, нормально. Оказалось, это просто конфликт с jQuery -- забыл добавить noConflict(). 
|
|
|
|
« Последнее редактирование: 13.08.2010, 15:18:49 от yunoshev »
|
Записан
|
|
|
|
bajun
Новичок
Репутация: +0/-0
Offline
Сообщений: 5
|
 |
« Ответ #22 : 19.07.2011, 13:56:53 » |
|
Все сделал,как посоветовали уважаемые знатоки,все работает,но одна незадача. Не подсвечивает красным цветом незаполненное поле. в чем может быть проблема?
|
|
|
|
|
Записан
|
|
|
|
yunoshev
Разработчик расширений для Joomla 1.0
Репутация: +134/-1
Offline
Пол: 
Сообщений: 924
|
 |
« Ответ #23 : 19.07.2011, 15:48:06 » |
|
@bajun Проинспектировать стили, задать красный цвет рамок, если не указано в шаблоне сайта.
|
|
|
|
|
Записан
|
|
|
|
bajun
Новичок
Репутация: +0/-0
Offline
Сообщений: 5
|
 |
« Ответ #24 : 16.08.2011, 11:39:26 » |
|
Да,все классно,но есть еще одна трабла.Возникла необходимость сделать так,чтобы одно из полей не проверялось на валидацию в зависимости от выбранного значения селекта. Я сделал так: в файле ps_userfield.php else { if ((formelement.value == '')&& (document.getElementById('country_field').value != 'UKR')) { document.getElementById(required_fields[i]+'$div_id_postfix').className += ' missing'; isvalid = false; } else if (document.getElementById(required_fields[i]+'$div_id_postfix').className == 'formLabel missing') { document.getElementById(required_fields[i]+'$div_id_postfix').className = 'formLabel'; } if ((formelement.name == 'vm_inn')&&(formelement.value == '')) { if ((document.getElementById('country_field').value == 'BLR')||(document.getElementById('country_field').value == 'RUS')) { document.getElementById(required_fields[i]+'$div_id_postfix').className += ' missing'; isvalid = false; } else if (document.getElementById(required_fields[i]+'$div_id_postfix').className == 'formLabel missing') { document.getElementById(required_fields[i]+'$div_id_postfix').className = 'formLabel'; } if ((document.getElementById('country_field').value == 'UKR')) { document.getElementById(required_fields[i]+'$div_id_postfix').className = 'formLabel'; } else if (document.getElementById(required_fields[i]+'$div_id_postfix').className == 'formLabel missing') { document.getElementById(required_fields[i]+'$div_id_postfix').className = 'formLabel'; } } }
ну собственно vm_inn это поле а country_field - это селект со странами. вроде бы все правильно,расставленные по тексту алерты говорят что в ненужные блоки вход не происходит. но if( !isvalid) { alert("'.addslashes( $VM_LANG->_('CONTACT_FORM_NC',false) ).'" ); } alert("METKA!"); return isvalid; alert ("!7");
алерт с МЕТКА! срабатывает а с !7 не срабатывает и почему то выбрасывает alert("'.addslashes( $VM_LANG->_('CONTACT_FORM_NC',false) ).'" ); помогите пожалуйста,второй день не могу вкурить в чем проблема.
|
|
|
|
|
Записан
|
|
|
|
titansword
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 13
|
 |
« Ответ #25 : 24.08.2011, 20:31:07 » |
|
Господа, как а Joomla 1.6 во фронт-энд сделать кнопку сабмита не активной если некоторые поля не прошли валидацию? В официальных доках есть только решение для бэк-энд: Joomla.submitbutton = function(task) { if (task == '') { return false; } else { var isValid=true; var action = task.split('.'); if (action[1] != 'cancel' && action[1] != 'close') { var forms = $$('form.form-validate'); for (var i=0;i<forms.length;i++) { if (!document.formvalidator.isValid(forms[i])) { isValid = false; break; } } } if (isValid) { Joomla.submitform(task); return true; } else { alert(Joomla.JText._('COM_HELLOWORLD_HELLOWORLD_ERROR_UNACCEPTABLE', 'Some values are unacceptable')); return false; } } }
|
|
|
|
|
Записан
|
|
|
|
MICH55
Новичок
Репутация: +0/-0
Offline
Сообщений: 1
|
 |
« Ответ #26 : 01.11.2011, 14:09:06 » |
|
Помогите пожалуйста разобраться... не работает валидация стандартной формы регистрации Joomla 1.5.12 файлик default.php с формой лежит в папке с шаблоном /templates/rhuk_milkyway/html/com_user/register Содержит код: <?php // no direct access defined('_JEXEC') or die('Restricted access'); JHTML::_('behavior.formvalidation'); ?> <script type="text/javascript"> <!-- Window.onDomReady(function(){ document.formvalidator.setHandler('passverify', function (value) { return ($('password').value == value); } ); }); // --> </script> <?php if(isset($this->message)){ $this->display('message'); } ?> <form action="<?php echo JRoute::_( 'index.php?option=com_user&view=register' ); ?>" method="post" id="josForm" name="josForm" class="form-validate" ;> <?php if ( $this->params->def( 'show_page_title', 1 ) ) : ?> <div class="componentheading<?php echo $this->escape($this->params->get('pageclass_sfx')); ?>"><?php echo $this->escape($this->params->get('page_title')); ?></div> <?php endif; ?> <table cellpadding="0" cellspacing="0" border="0" width="100%" class="contentpane"> <tr> <td width="30%" height="40"> <label id="namemsg" for="name"> <?php echo JText::_( 'Name' ); ?>: </label> </td> <td> <input type="text" name="name" id="name" size="40" value="<?php echo $this->escape($this->user->get( 'name' ));?>" class="required" maxlength="50" /> * </td> </tr> <tr> <td height="40"> <label id="usernamemsg" for="username"> <?php echo JText::_( 'User name' ); ?>: </label> </td> <td> <input type="text" id="username" name="username" size="40" value="<?php echo $this->escape($this->user->get( 'username' ));?>" class="required validate-username" maxlength="25" /> * </td> </tr> <tr> <td height="40"> <label id="emailmsg" for="email"> <?php echo JText::_( 'Email' ); ?>: </label> </td> <td> <input type="text" id="email" name="email" size="40" value="<?php echo $this->escape($this->user->get( 'email' ));?>" class="required validate-email" maxlength="100" /> * </td> </tr> <tr> <td height="40"> <label id="pwmsg" for="password"> <?php echo JText::_( 'Password' ); ?>: </label> </td> <td> <input class="required validate-password" type="password" id="password" name="password" size="40" value="" /> * </td> </tr> <tr> <td height="40"> <label id="pw2msg" for="password2"> <?php echo JText::_( 'Verify Password' ); ?>: </label> </td> <td> <input class="required validate-passverify" type="password" id="password2" name="password2" size="40" value="" /> * </td> </tr> <tr> <td colspan="2" height="40"> <?php echo JText::_( 'REGISTER_REQUIRED' ); ?> </td> </tr> </table> <button class="button validate" type="submit"><?php echo JText::_('Register'); ?></button> <input type="hidden" name="task" value="register_save" /> <input type="hidden" name="id" value="0" /> <input type="hidden" name="gid" value="0" /> <?php echo JHTML::_( 'form.token' ); ?> </form>
|
|
|
|
|
Записан
|
|
|
|
v-idea
Осваиваюсь на форуме
 
Репутация: +30/-0
Offline
Пол: 
Сообщений: 156
|
 |
« Ответ #27 : 02.02.2012, 23:05:51 » |
|
Добавляем наш метод: this.setHandler('select', function (value) { return value > 0; } ); Народ, SOS! А как то же самое сделать для поля 'checkbox' ? ? ?
|
|
|
|
« Последнее редактирование: 02.02.2012, 23:26:19 от v-idea »
|
Записан
|
|
|
|
Captain
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 41
|
 |
« Ответ #28 : 06.08.2012, 02:20:02 » |
|
Народ, подниму тему. Мне нужно в админке форму проверять на событие OnSubmit. Проверять-то проверяет, но форма коммитится вне зависмости от того, прошла она валидацию или нет (вернула функция true или false). Подскажите как быть.
|
|
|
|
|
Записан
|
|
|
|
|