2016-01-07 3 views
0

Я пытаюсь добавить новое поле (программно) в раздел клиента (admin-> customer-> tab) клиентов, называемый номером клиента. Все работает так, как ожидалось, но я не хочу получать двойные числа в базе данных, так как пользователь может ввести свой собственный номер. Каждый раз, когда новый пользователь получает от администратора, код ищет последний (самый высокий) номер клиента и добавляет +1 к нему.Номер клиента дополнительного поля Opencart с подтверждением

Я не могу найти решение для этого случая:

  • Если клиент уже существует (режим редактирования) он должен показывать не редактируемые значения (только для чтения)

  • при регистрации нового клиента в последний (самый высокий) номер клиента должен быть показан (редактируемый). Если пользователь вводит номер, который меньше, чем самый высокий номер клиента, должна появиться ошибка, и должен отображаться максимальный номер клиента + 1.

Это код, который я до сих пор В контроллере (getForm):

if (isset($this->error['customer_number'])) { 
    $data['error_customer_number'] = $this->error['customer_number']; 
} else { 
    $data['error_customer_number'] = ''; 
} 

$data['latest_customer'] = $this->model_sale_customer->getLatestCustomerNumber(); 

if (isset($this->request->post['customer_number'])) { 
    $data['customer_number'] = $this->request->post['customer_number']; 
} elseif (!empty($customer_info)) { 
    $data['customer_number'] = $customer_info['customer_number']; 
} else { 
    $data['customer_number'] = '0'; 
} 

В валидации (validateForm):

$data['latest_customer'] = $this->model_sale_customer->getLatestCustomerNumber(); 

if (isset($this->request->post['customer_number']) && ($this->request->post['customer_number'] <= $data['latest_customer'])) { 
    $this->error['customer_number'] = $this->language->get('error_customer_number'); 
} 

В моей customer_form.tpl I имеют:

<div class="form-group"> 
    <label class="col-sm-2 control-label" for="input-customer-number"><span data-toggle="tooltip" title="<?php echo $help_customer_number; ?>"> <?php echo $entry_customer_number; ?></span></label> 
    <div class="col-sm-10"> 
     <?php if (!empty($customer_number) || $customer_number != 0){ ?> 
     <input type="text" name="customer_number" value="<?php echo $customer_number; ?>" placeholder="<?php echo $entry_customer_number; ?>" id="input-customer-number" class="form-control" /> 
     <?php }else{ ?> 
     <input type="text" name="customer_number" value="<?php echo $latest_customer + 1; ?>" placeholder="<?php echo $entry_customer_number; ?>" id="input-customer-number" class="form-control" /> 
     <?php if ($error_customer_number) { ?> 
     <div class="text-danger"><?php echo $error_customer_number; ?></div> 
     <?php } ?> 
     <?php } ?> 
    </div> 
</div> 

Это, очевидно, не работает, потому что при редактировании существующего клиента номер клиента всегда ниже, чем самый высокий номер клиента в системе (и, таким образом, дает ошибку). Надеюсь, кто-то может помочь мне с этим! Заранее спасибо!

+0

Для этого вам нужно будет использовать несколько условий. Я могу помочь вам с этим, если вы хотите. –

+0

Привет, Али, спасибо, что помогли мне. Можете ли вы показать мне некоторые примеры условий, которые мне нужно использовать? – Danny

+0

Вы можете объявить переменную и получить запрос 'id' через' запрос'. Если в 'url' есть некоторая' id', вы можете отключить 'check' в' validation'. Что-то вроде того. Для получения дополнительной информации вы можете добавить меня в skype. Мой идентификатор - 'syed_ali_zia' –

ответ

0

Для других, кто занимается этим, я сам решил свою проблему. Комментарий Али заставил меня подумать. Я добавил скрытое поле ввода, чтобы я мог проверить это. Это уже существующий клиент или нет (имеет номер или нет). Мне нужно проверить только для новых клиентов, что является полем ввода (существующий является readonly и, следовательно, не редактируется). Проверка заключается в том, чтобы узнать, является ли это новым клиентом (значение 0) - это значение < Наибольший номер клиента. Это оно!

Это код, я так в контроллере (getForm):

if (isset($this->error['customer_number'])) { 
$data['error_customer_number'] = $this->error['customer_number']; 
} else { 
$data['error_customer_number'] = ''; 
} 

if (isset($this->request->post['customer_number']) && (($this->request->post['customer_number'] < $data['latest_customer']) && $this->request->post['existing_customer'] == '0')) { 
     $this->request->post['customer_number'] = '0'; 
     $data['customer_number'] = '0'; 
    } elseif (isset($this->request->post['customer_number'])) { 
     $data['customer_number'] = $this->request->post['customer_number']; 
    } elseif (!empty($customer_info)) { 
     $data['customer_number'] = $customer_info['customer_number']; 
    } else { 
     $data['customer_number'] = '0'; 
    } 

    if (isset($this->request->post['existing_customer'])) { 
     $data['existing_customer'] = $this->request->post['existing_customer']; 
    } else { 
     $data['existing_customer'] = '0'; 
    } 

В валидации (validateForm):

$data['latest_customer'] = $this->model_customer_customer->getLatestCustomerNumber(); 

    if (isset($this->request->post['customer_number']) && (($this->request->post['customer_number'] < $data['latest_customer']) && ($this->request->post['existing_customer'] == '0' || $data['existing_customer'] = '0'))) { 
     $this->error['customer_number'] = $this->language->get('error_customer_number'); 
    } 

В моей customer_form.tpl у меня есть:

<div class="form-group"> 
       <label class="col-sm-2 control-label" for="input-customer-number"><span data-toggle="tooltip" title="<?php echo $help_customer_number; ?>"> <?php echo $entry_customer_number; ?></span></label> 
       <div class="col-sm-10"> 
       <?php if (!empty($customer_number) || $customer_number != 0){ ?> 
        <input type="text" name="customer_number" value="<?php echo $customer_number; ?>" placeholder="<?php echo $entry_customer_number; ?>" id="input-customer-number" class="form-control" readonly /> 
        <input type="hidden" name="existing_customer" value="1" id="input-existing-customer" class="form-control" /> 
        <?php }else{ ?> 

        <input type="text" name="customer_number" value="<?php echo $latest_customer + 1; ?>" placeholder="<?php echo $entry_customer_number; ?>" id="input-customer-number" class="form-control" /> 
        <input type="hidden" name="existing_customer" value="0" id="input-existing-customer" class="form-control" /> 
        <?php } ?> 
        <?php if ($error_customer_number) { ?> 
        <div class="text-danger"><?php echo $error_customer_number; ?></div> 
        <?php } ?> 
       </div> 
       </div> 
Смежные вопросы