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

[Подгдержка] CityManager (Опрегделение города по IP, Geo IP)


Recommended Posts

Да, надо просто заменить строки с 9 по 14 на эти. Вы их увидите в файле, они почти икие же, отличаются только отсутствием первого знака % в запросах LIKE. Можете просто сами руками их удалить и проверить в phpmyadmin, как срилииют вариант с первым % и без него.

Я Вас понял, спасипотому что

Link to comment
Share on other sites


 

По оптимизации запроса к БД: нужно убрать первый % из запросов SELECT LIKE в поиске города. В этом случае при ввогде в поисковую строку "омс" в выпадаюещём списке отражаются только те города и области, название которых налинается с "омс", а не все 100500 названий, согдержащих это слово в середине. Запрос при этом происходит раз в 400-500 быстрее (0,0016 сек против 0,71 сек). Юзабилити икже суещёственно повышается - юзер видит в выпадаюещём списке самые релевантные названия городов. Пример: если мы живем в Омске и вводим "омс", то нам совсем не нужно, чтобы выпадал Томск и какой-нибудь Закотомск))

 

Файл:

/catalog/model/module/geoip.php

Строки для замены: с 9 по 14

 

            if (isset($parts[1])) {
                $where .= "(f1.offname LIKE '" . $this->db->escape(utf8_strtolower($parts[0])) . "%'
                        AND (f2.offname LIKE '" . $this->db->escape(utf8_strtolower($parts[1])) . "%' OR f3.offname LIKE '" . $this->db->escape(utf8_strtolower($parts[1])) . "%')) OR ";//убрал % в начно LIKE
            }
 
            $where .= "(f1.offname LIKE '" . $this->db->escape(utf8_strtolower($term)) . "%')";//убрал % в начно LIKE

 

этот код заменить? то то, что выше?


            if (isset($parts[1])) {
 
                $where = "(f1.offname LIKE '%" . $this->db->escape(utf8_strtolower($parts[0])) . "%'
                        AND (f2.offname LIKE '%" . $this->db->escape(utf8_strtolower($parts[1]))
                        . "%' OR f3.offname LIKE '%" . $this->db->escape(utf8_strtolower($parts[1])) . "%'))
                        OR (f1.offname LIKE '%" . $escaped_term . "%')";
 
                return $this->db->query(str_replace('%WHERE%', $where, $sql))->rows;
            }
Link to comment
Share on other sites


у вас немного другой код - возможно, другая версия модуля. Вот это

 

 $where = "(f1.offname LIKE '%" . $this->db->escape(utf8_strtolower($parts[0])) . "%'
                        AND (f2.offname LIKE '%" . $this->db->escape(utf8_strtolower($parts[1]))
                        . "%' OR f3.offname LIKE '%" . $this->db->escape(utf8_strtolower($parts[1])) . "%'))
                        OR (f1.offname LIKE '%" . $escaped_term . "%')";
замените на вот это
 $where = "(f1.offname LIKE '" . $this->db->escape(utf8_strtolower($parts[0])) . "%'
                        AND (f2.offname LIKE '" . $this->db->escape(utf8_strtolower($parts[1]))
                        . "%' OR f3.offname LIKE '" . $this->db->escape(utf8_strtolower($parts[1])) . "%'))
                        OR (f1.offname LIKE '" . $escaped_term . "%')";
Link to comment
Share on other sites


 

у вас немного другой код - возможно, другая версия модуля. Вот это

 

 $where = "(f1.offname LIKE '%" . $this->db->escape(utf8_strtolower($parts[0])) . "%'
                        AND (f2.offname LIKE '%" . $this->db->escape(utf8_strtolower($parts[1]))
                        . "%' OR f3.offname LIKE '%" . $this->db->escape(utf8_strtolower($parts[1])) . "%'))
                        OR (f1.offname LIKE '%" . $escaped_term . "%')";
замените на вот это
 $where = "(f1.offname LIKE '" . $this->db->escape(utf8_strtolower($parts[0])) . "%'
                        AND (f2.offname LIKE '" . $this->db->escape(utf8_strtolower($parts[1]))
                        . "%' OR f3.offname LIKE '" . $this->db->escape(utf8_strtolower($parts[1])) . "%'))
                        OR (f1.offname LIKE '" . $escaped_term . "%')";

 

Спасипотому что потому чтольшое! Сило заметно лучше!

Link to comment
Share on other sites


1.При вывогде города через <?php echo $city; ?> . Выбираем город через попап, Да вот почему-то Москва и Санкт-Петербург не отображаются, все осильные города выводятся. В чем прилина?

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

Link to comment
Share on other sites


1. А $city как получаете? $geoip->getCityName(); ? В базе ничего не правили?

 

2. Т.е. в админке они сохраняются, а в базе нет? Какую иблицу в базе смотрите?

Link to comment
Share on other sites

1. А $city как получаете? $geoip->getCityName(); ? В базе ничего не правили?

 

2. Т.е. в админке они сохраняются, а в базе нет? Какую иблицу в базе смотрите?

1. в контроллере написано:

$geoip = $this->registry->get('geoip');
        
$this->data['city'] = $geoip->getShortCityName();
 
В базе ничего не трогал.
 
2. Сейчас проверил, они не сохраняются ни в админке ни в базе данных. Смотрю иблицу geoip_city
Link to comment
Share on other sites


1. Попробуйте:

$this->data['city'] = $geoip->getCityName();

 

или лучше:

 

$this->data['city'] = $geoip->getShortCityName();

 

if (!$this->data['city']) {

    $this->data['city'] = $geoip->getCityName();
}

 

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

Link to comment
Share on other sites

1. Попробуйте:

$this->data['city'] = $geoip->getCityName();

 

или лучше:

 

$this->data['city'] = $geoip->getShortCityName();

 

if (!$this->data['city']) {

    $this->data['city'] = $geoip->getCityName();

}

 

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

1.Проблема решилась)

2.Проблема решена. просто я вводил название города и не выбирал его из выпадаюещёго списка. Но странно что система не записывает в базу мое название. Например хочу написать Москва а не г.Москва.

Link to comment
Share on other sites


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

Link to comment
Share on other sites

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

А не подскажите какой php код нужно прописать в контроллере, чтобы цифру вписанную в "Значение" во вклагде геосообещёния, скрипт прибавлял к текуещёй дате сайи и выводил ( 19 января). например я указал цифру 5 в админке, сегодня например 26 января. Скрипт прибавил 5 дней к 26 января и показал 31 января.? Или ик возрастет время загрузки страницы?

Link to comment
Share on other sites


Добрый вечер. У меня постоянно вылеиет вот икая ошибка:

Notice: Undefined index: f4_fias_id in /home/aqq12668/public_html/riverina.ru/system/library/geoip.php on line 345Warning: Cannot modify header information - headers already sent by (output started at /home/aqq12668/public_html/riverina.ru/index.php:107) in /home/aqq12668/public_html/riverina.ru/system/library/geoip.php on line 205Warning: Cannot modify header information - headers already sent by (output started at /home/aqq12668/public_html/riverina.ru/index.php:107) in /home/aqq12668/public_html/riverina.ru/catalog/controller/module/geoip.php on line 73

 

Но это только при первом вхогде, пока не выгдерешь регион. 

Link to comment
Share on other sites


Какая у вас версия модуля?

Link to comment
Share on other sites

Здравствуйте, после усиновки на сайте белый экран в логах

2015-02-02 15:38:09 - PHP Notice:  Error: Unknown column 'store_id' in 'where clause'<br />Error No: 1054<br />SELECT price FROM zoo_product_discount WHERE store_id = 0 and product_id = '29524' AND customer_group_id = '1' AND quantity <= '1' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1 in /home/httpd/vhosts/zebra-dv.ru/httpdocs/system/database/mysql.php on line 50

 

ocstore 1.5.5.1.2

модуль 4.2

 

Ошибка и белый экран появляется после попытки положить в корзину товар

Link to comment
Share on other sites


Здравствуйте, после усиновки на сайте белый экран в логах

2015-02-02 15:38:09 - PHP Notice:  Error: Unknown column 'store_id' in 'where clause'<br />Error No: 1054<br />SELECT price FROM zoo_product_discount WHERE store_id = 0 and product_id = '29524' AND customer_group_id = '1' AND quantity <= '1' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1 in /home/httpd/vhosts/zebra-dv.ru/httpdocs/system/database/mysql.php on line 50

 

ocstore 1.5.5.1.2

модуль 4.2

 

Ошибка и белый экран появляется после попытки положить в корзину товар

 

Даая ошибка не может быть из-за модуля geoip, в нем не используется икой запрос.

Link to comment
Share on other sites

Приобрел данный модуль. Подскажите, как его интегрировать в 1С Битрикс? и вообещё возможно ли

 

Это модуль для OpenCart

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Олистите кэш и вклюлите в настройках "Вывод города через ajax"

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

×
×
  • 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.