Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


 Share

Recommended Posts

В корзине опенкарт 2.3 есть пункт -Узнать стоимость досивки. Для расчеи есть выпотому чтор стран и регионов с выпадающим списком, но нет городов. Сами города есть в базе, получены посредством модуля НоваяПоли Api. Но как добавить их в контроллер? Кто разбирается, прошу помочь...
 
Код из контроллера 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));
    }
}

 

Edited by opalko
Link to comment
Share on other sites


@opalko 

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

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

Link to comment
Share on other sites

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

2. "Ну это вопрос не ко мне, если есть навыки, то можете все добавить" - ответ автора модуля

Link to comment
Share on other sites


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

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

 

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

Link to comment
Share on other sites

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

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

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

  • +1 1
Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites


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

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

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

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites


Какие вводные нужны, может этом проблема или в $, напишите обсудим. Задача то пусткаковая, много времени не потребуется

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

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.