Для OpenCart 2.3.x нужно сделать следующее:
Записать в /admin/view/javascript/jquery/jqvmap/maps/ файл с картой страны, например Украины - ukraine.js(можно взять из этого модуля или сделать самому).
Привести в соответствие коды регионов, а именно: открыть таблицу БД под названием "(ваш префикс_)zone" или просто "zone", если без префикса(префикс по умолчанию OC_) и выполнить запрос SELECT * FROM `oc_zone` WHERE `country_id`=220 (220 это код Украины), далее нужно посмотреть какому региону(из колонки Name) какой код соответствует (из колонки Code), точно такие же соответствия должны быть и в файле ukraine.js. Откройте его для редактирования и в коде найдите все участки типа
"pathes" : {
"05" : {
"path" : "M517.4,446.91c-0.273-0.71-0.666-1.749-0.883-2.313-0.292-0.784-1.021-2.306-1.158-3.125-0.127-0.756,0.082-2.287,0.082-3...куча векторных координат.....и т.д.",
"name" : "Вінницька область"
}, Это значит что "Вінницька область" под кодом "05". Исправте так чтобы коды регионов были как в БД.
Открыть для редактирования файл admin/view/template/extension/dashboard/map_info.tpl и исправить <script type="text/javascript" src="view/javascript/jquery/jqvmap/maps/jquery.vmap.world.js"></script> на <script type="text/javascript" src="view/javascript/jquery/jqvmap/maps/ukraine.js"></script> и ниже по коду "$('#vmap').vectorMap({map: 'world_en', " на "$('#vmap').vectorMap({map: 'ukraine'," (вместо 'ukraine' может быть другое имя, посмотреть его нужно в файле векторной карты ukraine.js в коде
jQuery.fn.vectorMap(
'addMap',
'ukraine',)
Далее в файле admin/model/report/sale.php нужно добавить функцию :
public function getTotalOrdersByZone() {
$query = $this->db->query("SELECT COUNT(*) AS total, SUM(o.total) AS amount, c.code FROM `" . DB_PREFIX . "order` o LEFT JOIN `" . DB_PREFIX . "zone` c ON (o.payment_zone_id = c.zone_id) WHERE o.order_status_id > '0' GROUP BY o.payment_zone_id");
return $query->rows;
}
Далее в файле admin/controller/extension/dashboard/map.php меняем код в функции map() -
public function map() {
$json = array();
$this->load->model('report/sale');
$results = $this->model_report_sale->getTotalOrdersByCountry();
foreach ($results as $result) {
$json[strtolower($result['iso_code_2'])] = array(
'total' => $result['total'],
'amount' => $this->currency->format($result['amount'], $this->config->get('config_currency'))
);
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
на
public function map() {
$json = array();
$this->load->model('report/sale');
$results = $this->model_report_sale->getTotalOrdersByZone();
foreach ($results as $result) {
$json[strtolower($result['code'])] = array(
'total' => $result['total'],
'amount' => $this->currency->format($result['amount'], $this->config->get('config_currency'))
);
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
На этом все.