Alex Riabtsev

Alex Riabtsev

Стартапи. Маркетинг. Освіта

© 2021

Dark Mode

Редактирование полей в корзине OpenCart

Давече попался мне в руки небольшой интернет-магазин, который сделан на OpenCart, в котором необходимо было упростить процесс регистрации пользователей и, собственно, заказ товаров.

Кто не знает, то OpenCart – это наследник старой доброй CMS osCommerce, в которой худо-бедно реализовано псевдо-MVC, что существенно упрощает жизнь по сравнению с оригинальной osCommerce, от которой я отказался несколько лет назад ввиду муторности поддержки.

Так вот, стоит задача – убрать лишние поля в формах регистрации и заказа для гостей.

Решение достаточно простое и элегантное:

Шаг 1. Редактируем шаблоны

Их два:

  • catalog/view/theme/default/template/checkout/register.tpl  – для формы регистрации
  • catalog/view/theme/default/template/checkout/guest.tpl – для гостей

Структура файлов у них похожая, потому говорить буду на примере одного из них.

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

Копируем шаблоны и создаем файлы:

  • catalog/view/theme/default/template/checkout/register-new.tpl  
  • catalog/view/theme/default/template/checkout/guest-new.tpl

Само копирование не позволит нам использовать новые шаблоны в OpenCart, потому идем в catalog/controller/checkout/register.php и редактируем строки (145-147), которые отвечают за выбор шаблона:

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/checkout/register.tpl')) {
        $this->template = $this->config->get('config_template') . '/template/checkout/register.tpl';
} else {
        $this->template = 'default/template/checkout/register.tpl';
}

Меняем register.tpl на register-new.tpl, сохраняем и проверяем – теперь мы можем вносить изменения в наши новые шаблоны.

Собственно процесс редактирования формы будет заключаться в том, что мы скроем поля, благодаря использованию style=”display:none” и удалим соответствующие заголовки полей.

Удаляем строки типа:

  • <span class=“required”>*</span> <!—?php echo $entry_postcode; ?—>

После этого редактируем поля:

  • <input class="large-field" style="display: none;" type="text" name="postcode" value="" />

добавляем style=”display:none” (или просто удаляем строки, чтобы не засорять код).

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

Шаг 2. Контроллер

Контроллер отвечает за валидность данных, которые мы вводим на этапе заказа, и проверяем все поля, если мы не внесем изменения, то он будет ожидать данных в тех полях, которые мы скрыли, и ругаться ошибкой Undefined index.

Валидация происходит в файлах

  • catalog/controller/checkout/register.php – для зарегистрированных пользователей
  • catalog/controller/checkout/guest.php 

Начиная с 18 строки контроллер проверяет все поля, которые есть по умолчанию в форме.

if ($country_info && $country_info['postcode_required'] && (utf8_strlen($this->request->post['postcode']) < 2) || (utf8_strlen($this->request->post['postcode']) > 10)) {
    //$json['error']['postcode'] = $this->language->get('error_postcode');
}

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

На этом в принципе все, так как мы скрыли поля формы в шаблоне и сказали конроллеру, что нам их использоваться не надо. Но мы сделаем еще один шаг, который будет своебразной “защитой от дурака”, если кто-то будет пытаться передать данные в тех полях, которые мы убрали, то контроллер будет присваивать пустые значения:

if ($this->request->server['REQUEST_METHOD'] == 'POST') {
    if (!$json) {
        $this->request->post['postcode'] = '';
..

 

Вот теперь точно все, а наш интернет-магазин готов к обработке лавины заказов перед Новым Годом! С наступающими праздниками!