Форум русской поддержки Joomla!® CMS
09.12.2016, 02:11:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Валидация способа оплаты без перезагрузки страницы

 (Прочитано 425 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sashgera
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 105


« : 23.09.2015, 04:07:55 »

Здравствуйте
Если в оформлении заказа не сделать выбор Способа оплаты, то страница перезагружается и выводится сообщение - "Пожалуйста, выберите способ оплаты"

За проверку отвечает этот кусок кода:
Код
if (!$this->validate_form($d, $thisch)) {
$msg = @unserialize($_SESSION['error_msg']);
if (!empty($vmLogger->_messages) && (is_array($vmLogger->_messages)))
$msg .= '<br />'.end($vmLogger->_messages);
$_SESSION['error_msg'] = serialize($msg.'<br />Пожалуйста, выберите способ оплаты');
return false;
}
 

Как можно сделать валидацию без перезагрузки страницы?

Пробовал сделать JS. В начале страницы, перед кодом PHP:
Код
<script type="text/javascript"> 
function checks (obj){
if (obj.payment_method_id.checked == '') {
alert ('Пожалуйста, выберите способ оплаты'); return false;}
}
</script>
 

Не получилось..
« Последнее редактирование: 23.09.2015, 07:05:21 от sashgera » Записан
fsv
Moderator
*****

Репутация: +330/-2
Online Online

Пол: Мужской
Сообщений: 2246


« Ответ #1 : 23.09.2015, 14:58:03 »

Цитировать
В начале страницы, перед кодом PHP:
Функцию вставили. А как ее вызываете?

Обычно на клик по кнопке "заказать" вешается обработчик валидации заполнения полей формы, если true, форма отсылается.
Записан
sashgera
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 105


« Ответ #2 : 23.09.2015, 19:03:54 »

Функцию вставили. А как ее вызываете?
Вызов добавил в onclick кнопки
Код
<input type="submit" class="button_confirm" value="<?php echo $VM_LANG->_('PHPSHOP_ORDER_CONFIRM_MNU')?>" onclick="javascript: return(submitregistration());checks;" id="confirmbtn" />
А как сделать обработчик валидации я не знаю. Поможете?
Записан
fsv
Moderator
*****

Репутация: +330/-2
Online Online

Пол: Мужской
Сообщений: 2246


« Ответ #3 : 23.09.2015, 19:54:19 »

У вас уже есть по клику вызов функции submitregistration(). Уберите после нее "чек", в submitregistration() допишите вашу проверку. Насколько помню (давно было), в ней валидация заполнения адресных полей. Плюсом добавляйте в нее и свои поля, по аналогии смотрите, там переменной false присваивается.

Цитировать
А как сделать обработчик валидации я не знаю.
Это второй вариант, возможно, и без него все получится. "Возможно", т.к. там у вас OPC (в др.теме упоминали), плюс что там еще накручено, не знаю. Попробуйте сначала с submitregistration().
Записан
sashgera
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 105


« Ответ #4 : 23.09.2015, 22:22:14 »

fsv, submitregistration() нашел только здесь:
(здесь проверка полей адреса)
administrator/components/com_virtuemart/classes/ps_userfield.php
Код
function printJS_formValidation( $required_fields, $allfields, $formname = 'adminForm', $functioname='submitregistration', $div_id_postfix = '_div' ) {
global $VM_LANG, $page, $mainframe, $vm_mainframe;
 

дописал:
Код
$field_list = str_replace( "'payment_method_id',", '', $ps_payment_method );
 

ниже, после проверки email
дописал:
Код
if( isset( $ps_payment_method['payment_method_id'] )) {
 
echo '
function checks (obj){
 if (obj.payment_method_id.checked == \'\') {
 alert (\'Пожалуйста, выберите способ оплаты\'); return false;}
 } '
;
}
 

в итоге - проверка оплаты не работает, что-то сделал не так
« Последнее редактирование: 23.09.2015, 22:25:26 от sashgera » Записан
fsv
Moderator
*****

Репутация: +330/-2
Online Online

Пол: Мужской
Сообщений: 2246


« Ответ #5 : 23.09.2015, 23:24:55 »

Все, что в функции написали, уберите. Попробуйте в ее конце код
Код:
// Finish the validation function
    echo '
        if( !isvalid) {
заменить на
Код:
// Finish the validation function
    echo '
        if( document.querySelectorAll("input[name=payment_method_id]:checked").length < 1 ){
            alert( "Выберите способ оплаты" );
            return false;
        }
        if( !isvalid) {
Записан
sashgera
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 105


« Ответ #6 : 24.09.2015, 00:08:35 »

fsv, большое спасибо!
Записан
fsv
Moderator
*****

Репутация: +330/-2
Online Online

Пол: Мужской
Сообщений: 2246


« Ответ #7 : 24.09.2015, 11:37:10 »

лучше обернуть еще одним условием:
Код:
if( document.querySelectorAll("input[name=payment_method_id]").length ){
if( document.querySelectorAll("input[name=payment_method_id]:checked").length < 1 ){
alert( "Выберите способ оплаты" );
return false;
}
}
Иначе, если функция используется не только при одностраничном оформлении (или вид оплаты будет только 1), эти изменения будут мешать.
Записан
sashgera
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 105


« Ответ #8 : 24.09.2015, 13:21:10 »

fsv, спасибо!
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet