[OCMOD] Автозаполнение города в оформлении заказа

Тема в разделе "Готовые модули и модификаторы. Бесплатно", создана пользователем RoS, 21 авг 2016.

  1. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    ОПИСАНИЕ:
    Модификатор добавляет функцию автозаполнения к полю "Город" на страницах
    оформления заказа, регистрации и в личном кабинете покупателя.

    Возможность через админку добавлять города которые относится к регионам.

    Например:
    пгт. Шевченково -> Измаил обл.
    пгт. Шевченково -> Харьковская обл.
    пгт. Шевченково -> Черкасская обл.


    ИЗОБРАЖЕНИЯ:
    City.jpg edit.jpg list-city.jpg oform.jpg oforml.jpg reg.jpg regi.jpg


    УСТАНОВКА:
    Важно!!! В архиве есть файл install.sql если у вас префикс базы не oc_ , то внесите изменения в файл и потом установите модификатор:​
    1. В админке "Меню - Модули - Установка расширений" загрузите модификатор.
    2. После этого зайдите в "Меню - Модули - Модификаторы" и нажимаем "Обновить" для обновления кеша модификаторов.
    РАБОТАЕТ - только со стандартным оформлением заказа!!!
    Opencart 2.1.0.1 - 2.1.0.2
    Opencart 2.2.0.0​
     

    Вложения:

    Последнее редактирование: 15 май 2021
    seodream, Ravilr, karpov и 3 другим нравится это.
  2. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    так, переделываем )

    1. В guest.tpl в строке запроса пишем так
    Код:
    url: 'index.php?route=account/register/autocomplete&zone_id=' +  $('#input-payment-zone').val(),
    Обрати внимание на zone_id, так как передаешь именно зону, для того чтобы получить города. Все верно, я не путаю??

    2. В контроллере естественно переименовать это дело на zone_id

    3. В модели получения городов, тоже немного не то
    PHP:
            if (!empty($data['city'])) {
                
    $sql .= " AND name LIKE '" $this->db->escape($data['city']) . "%'";
            }
    тут не city, а zone_id и не AND а WHERE
    да и проверка наверно на существовании зоны не нужна тут, лучше это делать в контроллере, т.е нет zone_id , то и запроса нет в модель.

    4. Ну и перенести город, под регион ))
     
  3. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    вот контроллер
    PHP:
                public function autocomplete() {
                    
    $json = array();

                    if ((
    $this->request->get['zone_id'])) {
                        
    $this->load->model('localisation/city');

                        if (isset(
    $this->request->get['zone_id'])) {
                            
    $zone_id $this->request->get['zone_id'];
                        } else {
                            
    $zone_id '';
                        }

                        if (isset(
    $this->request->get['limit'])) {
                            
    $limit $this->request->get['limit'];
                        } else {
                            
    $limit 5;
                        }

                        
    $filter_data = array(
                            
    'zone_id'         => $zone_id,
                            
    'start'        => 0,
                            
    'limit'        => $limit
                        
    );
                      
                        
    $results $this->model_localisation_city->getCitys($filter_data);

                        foreach (
    $results as $result) {
                            
    $json[] = array(
                                
    'city_id'    => $result['city_id'],
                                
    'name'       => strip_tags(html_entity_decode($result['name'], ENT_QUOTES'UTF-8'))
                            );
                        }
                    }

                    
    $this->response->addHeader('Content-Type: application/json');
                    
    $this->response->setOutput(json_encode($json));
                }
    а это модель
    PHP:
      public function getCitys($data = array()) {
         
    $sql "SELECT * FROM " DB_PREFIX "city ";

         
    $sql .= " WHERE zone_id = '" $this->db->escape($data['zone_id']) . "'";
      

         
    $sort_data = array(
           
    'name'
         
    );

         if (isset(
    $data['sort']) && in_array($data['sort'], $sort_data)) {
           
    $sql .= " ORDER BY " $data['sort'];
         } else {
           
    $sql .= " ORDER BY name";
         }

         if (isset(
    $data['order']) && ($data['order'] == 'DESC')) {
           
    $sql .= " DESC";
         } else {
           
    $sql .= " ASC";
         }

         if (isset(
    $data['start']) || isset($data['limit'])) {
           if (
    $data['start'] < 0) {
             
    $data['start'] = 0;
           }

           if (
    $data['limit'] < 1) {
             
    $data['limit'] = 20;
           }

           
    $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
         }

         
    $query $this->db->query($sql);

         return 
    $query->rows;
       }
        }    
    В таком варианте при выборе области Харьков, выводится Харьков и Чугуев
     
    Vlad нравится это.
  4. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    @Ален, спасибо, заработало как надо. Буду дорабатывать дальше.
     
  5. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Доработал модификатор. Архив разместил в первом посте.
     
    Ecsiron нравится это.
  6. Ecsiron

    Ecsiron Продвинутый пользователь

    Сообщения:
    415
    Симпатии:
    53
    А можно туда прикрутить РФ и запустить под ОС 2.2?)

    Я имею ввиду, чтобы человек вводил индекс и автоматом заполнялся город, улица?

    Перебор будет, если установить:
    Классификатор адресов России (КЛАДР)

    А вот может кто-нить прикрутить например postindexapi.ru/140180.json выдает в JSON данные по индексу
     
    Последнее редактирование: 29 авг 2016
  7. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Сделал под OC 2.2 архив прикрепил в первом посте.

    В архивах база городов идет пустая. Можете загрузить свою базу для любой страны.

    Данный функционал делал для связки со способом доставки "Новая почта".
     
  8. Ecsiron

    Ecsiron Продвинутый пользователь

    Сообщения:
    415
    Симпатии:
    53
    У меня эта сборка, так, что часть городов есть в базе.
    Сейчас гляну, а что с индексами? Можно же сделать, чтобы он его забирал, когда фокус из ячейки уходит и заполнял остальные?
    Я позже тоже конечно разберусь, как это делается, просто у меня сейчас голова забита товарами.
    Очень долго названия прописывать, прямо нереально мутерно и крайне долго...
     
  9. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Можно. В голову сейчас приходит такой вариант. В таблицу с городом, добавить поле для индекса. И потом написать условие с проверкой для вывода.
     
  10. Ecsiron

    Ecsiron Продвинутый пользователь

    Сообщения:
    415
    Симпатии:
    53
    Тебе выражаю огромное спасибо! подкинул мысли для размышления)
    А еще полазил по интернету нашел таблицу с большинством городов мира на русском языке, но они связаны с двумя другими таблицами - страны и регионы. И на сайте почты РФ лежит "Эталонный справочник почтовых индексов всех почтовых отделений". Формат его данных - dbf.
    Идея возникла такая.
    1) Загрузить новые таблицы (страны, индексы, области и города) и установить зависимость: Страна-> Индекс -> Область -> Город -> Улица
    2) Отказаться от использования стандартных таблиц с зонами в ОС - создать модификатор с изменениями.
    Вроде ничего не забыл)
     
    Последнее редактирование: 30 авг 2016
  11. pokryshkin

    pokryshkin Новичок

    Сообщения:
    8
    Симпатии:
    0
    города.jpg Уважаемый RoS, подскажите где в админке искать "ГОРОДА" в ocStore 2.3 ?
     
  12. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Для версии 2.3.x.x нет модификатора.
     
  13. pokryshkin

    pokryshkin Новичок

    Сообщения:
    8
    Симпатии:
    0
    очень жаль
     
  14. Axiob

    Axiob Новичок

    Сообщения:
    1
    Симпатии:
    1
    чтобы появилась менюшка в админке OC 2.3 надо в модификаторе (install.xml) заменить первую часть, содержащую:

    PHP:
    <file path="admin/controller/common/menu.php">
        <
    operation>
            <
    search><![CDATA[$data['zone'] = $this->url->link('localisation/zone''token=' $this->session->data['token'], true);]]></search>
            <
    add position="after" trim="true"><![CDATA[
            
    $data['city'] = $this->url->link('localisation/city''token=' $this->session->data['token'], true);
            ]]></
    add>
        </
    operation>
        <
    operation>
            <
    search><![CDATA[$data['text_zone'] = $this->language->get('text_zone');]]></search>
            <
    add position="after" trim="true"><![CDATA[
             
    $data['text_city'] = $this->language->get('text_city');
            ]]></
    add>
        </
    operation>
    </
    file>
    на
    PHP:
    <file path="admin/controller/common/column_left.php">
        <
    operation>
            <
    search><![CDATA[if ($this->user->hasPermission('access''localisation/zone')) {]]></search>
            <
    add position="before" trim="true"><![CDATA[
                if (
    $this->user->hasPermission('access''localisation/city')) {
                    
    $localisation[] = array(
                        
    'name'       => $this->language->get('text_city'),
                        
    'href'     => $this->url->link('localisation/city''token=' $this->session->data['token'], true),
                        
    'children' => array()     
                    );
                }
            ]]></
    add>
        </
    operation>
    </
    file>

    и переустановить его
     
    Последнее редактирование: 27 дек 2017
    karpov нравится это.
  15. KEV

    KEV Новичок

    Сообщения:
    9
    Симпатии:
    0
    под 2.3.0.2.3 не пробовали ?
     
  16. Bkmz

    Bkmz Продвинутый пользователь

    Сообщения:
    440
    Симпатии:
    106
    выше пост с решением под oc 2.3
     
  17. KEV

    KEV Новичок

    Сообщения:
    9
    Симпатии:
    0
    не помогло ,нет ни в админке , нет изменений (кроме искривления формы) при регистрации и т.д. ….?
     
  18. Bkmz

    Bkmz Продвинутый пользователь

    Сообщения:
    440
    Симпатии:
    106
    у вас шаблон стандартный?
     
  19. KEV

    KEV Новичок

    Сообщения:
    9
    Симпатии:
    0
  20. Bkmz

    Bkmz Продвинутый пользователь

    Сообщения:
    440
    Симпатии:
    106
    взяли архив для oc 2.2 из первого поста и поправили модификатор согласно инструкции из 14-го поста, потом установили и обновили кэш модификаторов?