Всем доброго времени суток. Столкнулся с такой проблемой, вот оригинальный скрипт: Код (CODE): <?php /** * @version 4.4.1 10.02.2014 * @author MAXXmarketing GmbH * @package Jshopping * @copyright Copyright (C) 2010 webdesigner-profi.de. All rights reserved. * @license GNU/GPL */ defined('_JEXEC') or die('Restricted access'); ?> <table> <tr> <td width="200"> <?php echo _JSHOP_ACCOUNT_HOLDER;?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][acc_holder]" id="params_pm_debit_acc_holder" value="<?php print $params['acc_holder']?>"/> </td> </tr> <tr> <td> <?php echo _JSHOP_IBAN?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][bank_iban]" id="params_pm_debit_bank_iban" value="<?php print $params['bank_iban']?>"/> </td> </tr> <tr> <td> <?php echo _JSHOP_BIC_BIC?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][bank_bic]" id="params_pm_debit_bank_bic" value="<?php print $params['bank_bic']?>"/> </td> </tr> <tr> <td> <?php echo _JSHOP_BANK?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][bank]" id="params_pm_debit_bank" value="<?php print $params['bank']?>"/> </td> </tr> </table> <script type="text/javascript"> function check_pm_debit(){ var ar_focus=new Array(); var error=0; unhighlightField('payment_form'); if (isEmpty($F_("params_pm_debit_acc_holder"))) { ar_focus[ar_focus.length]="params_pm_debit_acc_holder"; error=1; } if (isEmpty($F_("params_pm_debit_bank_iban"))) { ar_focus[ar_focus.length]="params_pm_debit_bank_iban"; error=1; } if (isEmpty($F_("params_pm_debit_bank"))) { ar_focus[ar_focus.length]="params_pm_debit_bank"; error=1; } if (error){ $_(ar_focus[0]).focus(); for (var i=0; i<ar_focus.length; i++ ){ highlightField(ar_focus[i]); } return false; } jQuery('#payment_form').submit(); } </script> В нем скрипт Код (CODE): <script type="text/javascript"> function check_pm_debit(){ var ar_focus=new Array(); var error=0; unhighlightField('payment_form'); if (isEmpty($F_("params_pm_debit_acc_holder"))) { ar_focus[ar_focus.length]="params_pm_debit_acc_holder"; error=1; } if (isEmpty($F_("params_pm_debit_bank_iban"))) { ar_focus[ar_focus.length]="params_pm_debit_bank_iban"; error=1; } if (isEmpty($F_("params_pm_debit_bank"))) { ar_focus[ar_focus.length]="params_pm_debit_bank"; error=1; } if (error){ $_(ar_focus[0]).focus(); for (var i=0; i<ar_focus.length; i++ ){ highlightField(ar_focus[i]); } return false; } jQuery('#payment_form').submit(); } </script> Как я понимаю - проверяет заполнены ли 3 поля: acc_holder, bank_iban и debit_bank. Если они не заполнены, то заявка не отправляется и эти поля подсвечиваются. Я переписал этот скрипт под свои нужные поля, вот что получилось: Код (CODE): <?php /** * @version 4.4.1 10.02.2014 * @author MAXXmarketing GmbH * @package Jshopping * @copyright Copyright (C) 2010 webdesigner-profi.de. All rights reserved. * @license GNU/GPL */ defined('_JEXEC') or die('Restricted access'); ?> <table> <tr> <td width="200"> <?php echo _JSHOP_ACCOUNT_NAME;?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][name]" id="params_pm_debit_name" value="<?php print $params['name']?>"/> </td> </tr> <tr> <td width="200"> <?php echo "Юридический адрес";?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][faddr]" id="params_pm_debit_faddr" value="<?php print $params['faddr']?>"/> </td> </tr> <tr> <td width="200"> <?php echo "Фактический адрес";?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][addr]" id="params_pm_debit_addr" value="<?php print $params['addr']?>"/> </td> </tr> <tr> <td width="200"> <?php echo "ИНН/КПП";?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][inn]" id="params_pm_debit_inn" value="<?php print $params['inn']?>"/> </td> </tr> <tr> <td width="200"> <?php echo "ОКПО";?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][okpo]" id="params_pm_debit_okpo" value="<?php print $params['okpo']?>"/> </td> </tr> <tr> <td width="200"> <?php echo "Наименования банка";?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][nazb]" id="params_pm_debit_nazb" value="<?php print $params['nazb']?>"/> </td> </tr> <tr> <td width="200"> <?php echo "БИК";?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][bik]" id="params_pm_debit_bik" value="<?php print $params['bik']?>"/> </td> </tr> <tr> <td width="200"> <?php echo "Р/С";?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][ras]" id="params_pm_debit_ras" value="<?php print $params['ras']?>"/> </td> </tr> <tr> <td width="200"> <?php echo "К/С";?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][ks]" id="params_pm_debit_ks" value="<?php print $params['ks']?>"/> </td> </tr> <tr> <td width="200"> <?php echo "Ген. директор";?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][gend]" id="params_pm_debit_gend" value="<?php print $params['gend']?>"/> </td> </tr> <tr> <td width="200"> <?php echo "Телефон";?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][tele]" id="params_pm_debit_tele" value="<?php print $params['tele']?>"/> </td> </tr> </table> <script type="text/javascript"> function check_pm_debit(){ var ar_focus=new Array(); var error=0; unhighlightField('payment_form'); if (isEmpty($F_("params_pm_debit_name"))) { ar_focus[ar_focus.length]="params_pm_debit_name"; error=1; } if (isEmpty($F_("params_pm_debit_addr"))) { ar_focus[ar_focus.length]="params_pm_debit_addr"; error=1; } if (isEmpty($F_("params_pm_debit_faddr"))) { ar_focus[ar_focus.length]="params_pm_debit_faddr"; error=1; } if (isEmpty($F_("params_pm_debit_inn"))) { ar_focus[ar_focus.length]="params_pm_debit_inn"; error=1; } if (isEmpty($F_("params_pm_debit_okpo"))) { ar_focus[ar_focus.length]="params_pm_debit_okpo"; error=1; } if (isEmpty($F_("params_pm_debit_nazbe"))) { ar_focus[ar_focus.length]="params_pm_debit_nazb"; error=1; } if (isEmpty($F_("params_pm_debit_ras"))) { ar_focus[ar_focus.length]="params_pm_debit_ras"; error=1; } if (isEmpty($F_("params_pm_debit_ks"))) { ar_focus[ar_focus.length]="params_pm_debit_ks"; error=1; } if (isEmpty($F_("params_pm_debit_bik"))) { ar_focus[ar_focus.length]="params_pm_debit_bik"; error=1; } if (isEmpty($F_("params_pm_debit_gend"))) { ar_focus[ar_focus.length]="params_pm_debit_gend"; error=1; } if (isEmpty($F_("params_pm_debit_tele"))) { ar_focus[ar_focus.length]="params_pm_debit_tele"; error=1; } if (error){ $_(ar_focus[0]).focus(); for (var i=0; i<ar_focus.length; i++ ){ highlightField(ar_focus[i]); } return false; } jQuery('#payment_form').submit(); } </script> Как видите мой скрипт снизу один в один, как в оригинале. Но почему то, у меня не срабатывает проверка на заполненность. Можете подсказать в чем проблема? Спасибо
UPD Если оставить только 4 проверки - то они срабатывают, если проверок больше, то ни одна не срабатывает.
Все поля корректные. Мне так кажется, что где то стоит условия на проверку не более 4 полей) Я в джумле новичок, самому не найти где.
А при чем Джумла ? Ты выложил таблицу в полями и яваскрипт, я понял что не получается пройти проверку полей в браузере. Ищи в настройке движка ЖШ список полей заполняемых юзером.
Эта таблица и js и есть встроенный в ЖШ модуль pm_debit Он состоит из двух скриптов. Вот оригиналы: paymentform.php Код (CODE): <?php /** * @version 4.4.1 10.02.2014 * @author MAXXmarketing GmbH * @package Jshopping * @copyright Copyright (C) 2010 webdesigner-profi.de. All rights reserved. * @license GNU/GPL */ defined('_JEXEC') or die('Restricted access'); ?> <table> <tr> <td width="200"> <?php echo _JSHOP_ACCOUNT_HOLDER;?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][acc_holder]" id="params_pm_debit_acc_holder" value="<?php print $params['acc_holder']?>"/> </td> </tr> <tr> <td> <?php echo _JSHOP_IBAN?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][bank_iban]" id="params_pm_debit_bank_iban" value="<?php print $params['bank_iban']?>"/> </td> </tr> <tr> <td> <?php echo _JSHOP_BIC_BIC?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][bank_bic]" id="params_pm_debit_bank_bic" value="<?php print $params['bank_bic']?>"/> </td> </tr> <tr> <td> <?php echo _JSHOP_BANK?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][bank]" id="params_pm_debit_bank" value="<?php print $params['bank']?>"/> </td> </tr> </table> <script type="text/javascript"> function check_pm_debit(){ var ar_focus=new Array(); var error=0; unhighlightField('payment_form'); if (isEmpty($F_("params_pm_debit_acc_holder"))) { ar_focus[ar_focus.length]="params_pm_debit_acc_holder"; error=1; } if (isEmpty($F_("params_pm_debit_bank_iban"))) { ar_focus[ar_focus.length]="params_pm_debit_bank_iban"; error=1; } if (isEmpty($F_("params_pm_debit_bank"))) { ar_focus[ar_focus.length]="params_pm_debit_bank"; error=1; } if (error){ $_(ar_focus[0]).focus(); for (var i=0; i<ar_focus.length; i++ ){ highlightField(ar_focus[i]); } return false; } jQuery('#payment_form').submit(); } </script> pm_debit.php Код (CODE): <?php /** * @version 4.4.1 10.02.2014 * @author MAXXmarketing GmbH * @package Jshopping * @copyright Copyright (C) 2010 webdesigner-profi.de. All rights reserved. * @license GNU/GPL */ defined('_JEXEC') or die('Restricted access'); class pm_debit extends PaymentRoot{ function showPaymentForm($params, $pmconfigs){ if (!isset($params['acc_holder'])) $params['acc_holder'] = ''; if (!isset($params['bank_iban'])) $params['bank_iban'] = ''; if (!isset($params['bank_bic'])) $params['bank_bic'] = ''; if (!isset($params['bank'])) $params['bank'] = ''; include(dirname(__FILE__)."/paymentform.php"); } function getDisplayNameParams(){ $names = array('acc_holder' => _JSHOP_ACCOUNT_HOLDER, 'bank_iban' => _JSHOP_IBAN, 'bank_bic' => _JSHOP_BIC_BIC, 'bank' => _JSHOP_BANK ); return $names; } } ?> В настройках ЖШ список полей заполняемых юзером - не то. В данном скрипте можно указать произвольные поля, которые не выводятся в админке. Все работает хорошо, кроме одного - не проверяется на заполненность более 4 полей. То есть, если оставить любые 4 проверки - они проверяются. если поставить например пятую проверку, то ни одна проверка не срабатывает. В отладчике все чисто.
И где в этих скриптах форма, которая отправляется ? Код (javascript): jQuery('#payment_form').submit(); Так в скрипте или в параметрах модуля ? Ищи форму, и куда она отправляет данные, и в уже обработчике данных, смотри проверку олей на сервере. .
По поиску "payment_form". Нашел всего в ЖШ два вхождения: \com_jshopping\js\functions.js Код (CODE): function checkPaymentForm(){ if (activePaymentMethod){ if (payment_type_check[activePaymentMethod]=='1'){ try { eval("check_"+activePaymentMethod+"();"); }catch(exception){ console.log(exception); jQuery('#payment_form').submit(); } }else{ jQuery('#payment_form').submit(); } } } \com_jshopping\templates\responsive\checkout\payments.php Код (CODE): <div id="comjshop"> <?php print $this->checkout_navigator?> <?php print $this->small_cart?> <script type="text/javascript"> var payment_type_check = {}; <?php foreach($this->payment_methods as $payment){?> payment_type_check['<?php print $payment->payment_class;?>'] = '<?php print $payment->existentcheckform;?>'; <?php }?> </script> <div class="jshop checkout_payment_block"> <form id = "payment_form" name = "payment_form" action = "<?php print $this->action ?>" method = "post" autocomplete="off" enctype="multipart/form-data"> <?php print $this->_tmp_ext_html_payment_start?> <table id="table_payments"> <?php $payment_class = ""; foreach($this->payment_methods as $payment){ if ($this->active_payment==$payment->payment_id) $payment_class = $payment->payment_class; ?> <tr class="name"> <td class="name"> <input type = "radio" name = "payment_method" id = "payment_method_<?php print $payment->payment_id ?>" onclick = "showPaymentForm('<?php print $payment->payment_class ?>')" value = "<?php print $payment->payment_class ?>" <?php if ($this->active_payment==$payment->payment_id){?>checked<?php } ?> /> <label for = "payment_method_<?php print $payment->payment_id ?>"><?php if ($payment->image){ ?><span class="payment_image"><img src="<?php print $payment->image?>" alt="<?php print htmlspecialchars($payment->name)?>" /></span><?php } ?><b><?php print $payment->name;?></b> <?php if ($payment->price_add_text!=''){?> <span class="payment_price">(<?php print $payment->price_add_text?>)</span> <?php }?> </label> </td> </tr> <tr class="paymform" id="tr_payment_<?php print $payment->payment_class ?>" <?php if ($this->active_payment != $payment->payment_id){?>style = "display:none"<?php } ?>> <td class = "jshop_payment_method"> <?php print $payment->payment_description?> <?php print $payment->form?> </td> </tr> <?php } ?> </table> <?php print $this->_tmp_ext_html_payment_end?> <input type = "button" id = "payment_submit" class = "btn btn-primary button" name = "payment_submit" value = "<?php print _JSHOP_NEXT ?>" onclick="checkPaymentForm();" /> </form> </div> </div> <?php if ($payment_class){ ?> <script type="text/javascript"> showPaymentForm('<?php print $payment_class;?>'); </script> <?php } ?> Параметр модуля в админке НЕ имеет настроек полей. Я еще раз повторюсь, надеюсь поймете меня) Таблица с параметрами и скрипт отправки: Код (CODE): <tr> <td width="200"> <?php echo "Телефон";?> </td> <td> <input type="text" class="inputbox" name="params[pm_debit][tele]" id="params_pm_debit_tele" value="<?php print $params['tele']?>"/> </td> </tr> // А ВОТ ЭТО ПРОВЕРКА НА ЗАПОЛНЕННОСТЬ ПОЛЯ И ОТПРАВКА!!!!!!!!!!! <script type="text/javascript"> function check_pm_debit(){ var ar_focus=new Array(); var error=0; unhighlightField('payment_form'); if (isEmpty($F_("params_pm_debit_tele"))) { ar_focus[ar_focus.length]="params_pm_debit_tele"; error=1; } if (error){ $_(ar_focus[0]).focus(); for (var i=0; i<ar_focus.length; i++ ){ highlightField(ar_focus[i]); } return false; } jQuery('#payment_form').submit(); } </script> "tele" полностью выдуманный из головы параметр. Он ПРОВЕРЯЕТСЯ!!! Если продублировать все, например: tele1, tele2, tele3, tele4... То будет проверятся только 4 параметра. Если добавить пятую и следующие проверку, то ни один параметр проверятся не будет.