Jump to content
Sign in to follow this  
slesar23

как проверить поле ввода

Recommended Posts

Всем привет, продолжаю разбираться с ocshop 1.5.....

Освоил шаблоны, css стили, несложные скрипты.

Не могу найти подробной инфы как реализовать проверку числового поля ввода на лету, т.е.:

 

1. человек на странице товара вводит желаемое количество в поле:

<input type="text" name="quantity" class="quant" value="<?php echo $minimum; ?>" id="input-quantity" size="5"/>

 

Как только он убирает из поля курсор, т.е. кликает где то в другом месте, хотелось бы проверять введенное количество на:

а) формат ввода: целые положительные числа

б) должно быть больше или равно минимального количества заказа <?php echo $minimum; ?>

в) должно быть меньше или равно количества на складе <?php echo $stock; ?>

г) должно быть кратно минимальному количеству <?php echo $minimum; ?>

После проверки корректировать введенные данные, округляя до ближайшего кратного или до минимума и максимума.

 

2. Если человек после ввода неугодного мне числа сразу кликнул на корзину, то выполнять ту же функцию на этом "клике" и заносить в корзину корректное значение.

 

Алгоритм проверки я напишу, мне бы понять саму структуру как выполнить эту проверку, какие атрибуты нужно добавить в поле ввода, как задать выполнение скрипта проверки поля и общую структуру скрипта.

И главное, как отследить событие "клик" при выходе из поля ввода, по которому все это будет выполняться.

Не знаю, можно ли тут делиться ссылками на сайт где это реализовано, поэтому не буду. 

 

Share this post


Link to post
Share on other sites

Ну ладно, никто не отвечает....

Нашел частичное решение на просторах интернета, реализован запрет на добавление, если количество больше чем на складе.

Учтено текущее количество в корзине.

 

Вопрос: как вывести в шаблон сообщение об ошибочном количестве, при срабатывании этого запрета.

С json я еще не сталкивался, поэтому и возник такой  вопрос.

 

файл /system/library/cart.php, добавляем

public function checkStock($product_id$qty){
   
$canAdd true;
   
$cartProducts $this->getProducts();

   if(!empty(
$cartProducts)){
     
$products_ids = array();

     foreach (
$cartProducts as $pData) {
       if(isset(
$products_ids[$pData['product_id']])){
         
$products_ids[$pData['product_id']]++;
       } else {
         
$products_ids[$pData['product_id']] = 1;
       }
     }

     foreach (
$products_ids as $p_id => $count) {
       if(
$product_id == $p_id){
         
$stock $this->db->query("SELECT quantity FROM " DB_PREFIX "product p
           WHERE p.product_id = '" 
. (int)$product_id "'
           AND p.date_available <= NOW() AND p.status = '1'"
)->row();

         if(
$stock $count $qty <= 0){
           
$canAdd false;
         }

         break;
       }
     }
   }

   return 
$canAdd;
}

 

Файл /catalog/controller/checkout/cart.php

добавляем перед

if (!$json) {
                
$this->cart->add($this->request->post['product_id'], $quantity$option);

вот это:

$canAdd $this->cart->checkStock($this->request->post['product_id'], $quantity);
if(!
$canAdd){
    
$json['error']['stock'] = 'Error message';
}

 

Edited by slesar23

Share this post


Link to post
Share on other sites
В 28.09.2017 в 12:37, slesar23 сказал:

проверку числового поля ввода на лету

 

это делается на javascript

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.