Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Корзина->Узнать стоимость доставки->Добавить города


opalko

Recommended Posts

В корзине опенкарт 2.3 есть пункт -Узнать стоимость доставки. Для расчета есть выбор стран и регионов с выпадающим списком, но нет городов. Сами города есть в базе, получены посредством модуля НоваяПочта Api. Но как добавить их в контроллер? Кто разбирается, прошу помочь...
image.thumb.png.c9a4d7bbabb25e0e9b850786ee234009.png
 
Код из контроллера shipping.php
<?php
class ControllerExtensionTotalShipping extends Controller {
    public function index() {
        if ($this->config->get('shipping_status') && $this->config->get('shipping_estimator') && $this->cart->hasShipping()) {
            $this->load->language('extension/total/shipping');

            $data['heading_title'] = $this->language->get('heading_title');

            $data['text_shipping'] = $this->language->get('text_shipping');
            $data['text_shipping_method'] = $this->language->get('text_shipping_method');
            $data['text_select'] = $this->language->get('text_select');
            $data['text_none'] = $this->language->get('text_none');
            $data['text_loading'] = $this->language->get('text_loading');

            $data['entry_country'] = $this->language->get('entry_country');
            $data['entry_zone'] = $this->language->get('entry_zone');
            $data['entry_postcode'] = $this->language->get('entry_postcode');

            $data['button_quote'] = $this->language->get('button_quote');
            $data['button_shipping'] = $this->language->get('button_shipping');
            $data['button_cancel'] = $this->language->get('button_cancel');

            if (isset($this->session->data['shipping_address']['country_id'])) {
                $data['country_id'] = $this->session->data['shipping_address']['country_id'];
            } else {
                $data['country_id'] = $this->config->get('config_country_id');
            }

            $this->load->model('localisation/country');

            $data['countries'] = $this->model_localisation_country->getCountries();

            if (isset($this->session->data['shipping_address']['zone_id'])) {
                $data['zone_id'] = $this->session->data['shipping_address']['zone_id'];
            } else {
                $data['zone_id'] = '';
            }

            if (isset($this->session->data['shipping_address']['postcode'])) {
                $data['postcode'] = $this->session->data['shipping_address']['postcode'];
            } else {
                $data['postcode'] = '';
            }

            if (isset($this->session->data['shipping_method'])) {
                $data['shipping_method'] = $this->session->data['shipping_method']['code'];
            } else {
                $data['shipping_method'] = '';
            }

            return $this->load->view('extension/total/shipping', $data);
        }
    }

    public function quote() {
        $this->load->language('extension/total/shipping');

        $json = array();

        if (!$this->cart->hasProducts()) {
            $json['error']['warning'] = $this->language->get('error_product');
        }

        if (!$this->cart->hasShipping()) {
            $json['error']['warning'] = sprintf($this->language->get('error_no_shipping'), $this->url->link('information/contact'));
        }

        if ($this->request->post['country_id'] == '') {
            $json['error']['country'] = $this->language->get('error_country');
        }

        if (!isset($this->request->post['zone_id']) || $this->request->post['zone_id'] == '') {
            $json['error']['zone'] = $this->language->get('error_zone');
        }

        $this->load->model('localisation/country');

        $country_info = $this->model_localisation_country->getCountry($this->request->post['country_id']);

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

        if (!$json) {
            $this->tax->setShippingAddress($this->request->post['country_id'], $this->request->post['zone_id']);

            if ($country_info) {
                $country = $country_info['name'];
                $iso_code_2 = $country_info['iso_code_2'];
                $iso_code_3 = $country_info['iso_code_3'];
                $address_format = $country_info['address_format'];
            } else {
                $country = '';
                $iso_code_2 = '';
                $iso_code_3 = '';
                $address_format = '';
            }

            $this->load->model('localisation/zone');

            $zone_info = $this->model_localisation_zone->getZone($this->request->post['zone_id']);

            if ($zone_info) {
                $zone = $zone_info['name'];
                $zone_code = $zone_info['code'];
            } else {
                $zone = '';
                $zone_code = '';
            }

            $this->session->data['shipping_address'] = array(
                'firstname'      => '',
                'lastname'       => '',
                'company'        => '',
                'address_1'      => '',
                'address_2'      => '',
                'postcode'       => $this->request->post['postcode'],
                'city'           => '',
                'zone_id'        => $this->request->post['zone_id'],
                'zone'           => $zone,
                'zone_code'      => $zone_code,
                'country_id'     => $this->request->post['country_id'],
                'country'        => $country,
                'iso_code_2'     => $iso_code_2,
                'iso_code_3'     => $iso_code_3,
                'address_format' => $address_format
            );

            $quote_data = array();

            $this->load->model('extension/extension');

            $results = $this->model_extension_extension->getExtensions('shipping');

            foreach ($results as $result) {
                if ($this->config->get($result['code'] . '_status')) {
                    $this->load->model('extension/shipping/' . $result['code']);

                    $quote = $this->{'model_extension_shipping_' . $result['code']}->getQuote($this->session->data['shipping_address']);

                    if ($quote) {
                        $quote_data[$result['code']] = array(
                            'title'      => $quote['title'],
                            'quote'      => $quote['quote'],
                            'sort_order' => $quote['sort_order'],
                            'error'      => $quote['error']
                        );
                    }
                }
            }

            $sort_order = array();

            foreach ($quote_data as $key => $value) {
                $sort_order[$key] = $value['sort_order'];
            }

            array_multisort($sort_order, SORT_ASC, $quote_data);

            $this->session->data['shipping_methods'] = $quote_data;

            if ($this->session->data['shipping_methods']) {
                $json['shipping_method'] = $this->session->data['shipping_methods'];
            } else {
                $json['error']['warning'] = sprintf($this->language->get('error_no_shipping'), $this->url->link('information/contact'));
            }
        }

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }

    public function shipping() {
        $this->load->language('extension/total/shipping');

        $json = array();

        if (!empty($this->request->post['shipping_method'])) {
            $shipping = explode('.', $this->request->post['shipping_method']);

            if (!isset($shipping[0]) || !isset($shipping[1]) || !isset($this->session->data['shipping_methods'][$shipping[0]]['quote'][$shipping[1]])) {
                $json['warning'] = $this->language->get('error_shipping');
            }
        } else {
            $json['warning'] = $this->language->get('error_shipping');
        }

        if (!$json) {
            $shipping = explode('.', $this->request->post['shipping_method']);

            $this->session->data['shipping_method'] = $this->session->data['shipping_methods'][$shipping[0]]['quote'][$shipping[1]];

            $this->session->data['success'] = $this->language->get('text_success');

            $json['redirect'] = $this->url->link('checkout/cart');
        }

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }

    public function country() {
        $json = array();

        $this->load->model('localisation/country');

        $country_info = $this->model_localisation_country->getCountry($this->request->get['country_id']);

        if ($country_info) {
            $this->load->model('localisation/zone');

            $json = array(
                'country_id'        => $country_info['country_id'],
                'name'              => $country_info['name'],
                'iso_code_2'        => $country_info['iso_code_2'],
                'iso_code_3'        => $country_info['iso_code_3'],
                'address_format'    => $country_info['address_format'],
                'postcode_required' => $country_info['postcode_required'],
                'zone'              => $this->model_localisation_zone->getZonesByCountryId($this->request->get['country_id']),
                'status'            => $country_info['status']
            );
        }

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }
}

 

Змінено користувачем opalko
Надіслати
Поділитися на інших сайтах


@opalko 

1. Почитать инструкцию по модулю Новая почта API

2. Написать в тему поддержки, если не поняли инструкцию

Надіслати
Поділитися на інших сайтах

15 хвилин назад, opalko сказав:

1. если бы я разбирался в коде, этой темы не было бы

 

Чтобы вывести поле с городом, не нужно разбираться в коде, это все в настройках модуля +  нужно установить правильный модификатор

Надіслати
Поділитися на інших сайтах

51 хвилину назад, opalko сказав:

Вы знаете как это реализовать?

Да. Тут большинство знает как. Возможно у вас не правильно модуль установился. По большому счету там все из коробки должно работать

  • +1 1
Надіслати
Поділитися на інших сайтах

37 минут назад, Flint2000 сказал:

Да. Тут большинство знает как. Возможно у вас не правильно модуль установился. По большому счету там все из коробки должно работать

Расскажите пожалуйста более подробно... Модуль установлен и настроен правильно. Симпл настраивал для вывода регионов, городов и отделений, там всё выводится и работает. Но вот только там нужно просто в нужные поля прописать правильные вызовы, типа getShippingCities. В опенкарте, городов нету, есть только страны и регионы, поэтому я решил по принципу их добавления в файле шаблона, добавить поле Город. И оно появилось (на фото с ошибкой), но списка нет, как мне кажется он должен появится если в контроллер прописать правильный код с нужным вызовом правильного метода. Но я в этом совсем не шарю. Пробывал по аналогии с регионами добавлять код, но там zone, zone_id, я разницы не знаю, и просто добавляя аналогичные куски кода с city, и city_id, получаю ошибку 500.

Надіслати
Поділитися на інших сайтах


1 година назад, opalko сказав:

Симпл настраивал для вывода регионов, городов и отделений, там всё выводится и работает.

а чем вас Симпл не устраивает то? Я что-то вообще не могу понять, что вы хотите.  С модулем Новой почты идут несколько модификаторов, для разных модулей оформления заказа

Надіслати
Поділитися на інших сайтах

35 минут назад, Flint2000 сказал:

а чем вас Симпл не устраивает то? Я что-то вообще не могу понять, что вы хотите.  С модулем Новой почты идут несколько модификаторов, для разных модулей оформления заказа

В опенкарт 2.3 (может и в других), есть отдельные страницы корзины и оформления заказа. Оформление за модулем симпл, а корзина - это штатная страница опенкарта (не всплывающее окно, а страница с адресом //мой сайт/cart/ На этой странице можно посчитать предварительную стоимость доставки, туда-то мне и нужно добавить поле города. Я не могу дать ссылку на сайт, потому что он доступен по определенному ip, а по доменному имени в сети другой сайт. 

Что-бы было понятно о чем речь, вот ссылка на демо опенкарта http://demo-opencart.ru/ . Купите товар и нажмите перейти в корзину, а не оформить заказ.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.