Что бы корректно работала предварительная оценка стоимости заказа по введенному индексу я написал себе костыль. Работает только для РФ, может кому пригодится.
В файле /catalog/controller/extension/total/shipping.php найти сроку
$this->session->data['shipping_address'] = array(
и добавить перед ней
// === узнать город по индексу ====
$this->load->model('extension/shipping/dpdregions');
$convert_region = $this->model_extension_shipping_dpdregions->getRegions($this->request->post['zone_id']);
$find_city = array('',0,999999);
$file_city = @fopen(DIR_SYSTEM."storage/download/dpd_cities.txt", "r");
if ($file_city !== false && $convert_region !== false) {
$post_code = $this->request->post['postcode'];
$zone_code_id = $this->request->post['zone_id'];
while (!feof($file_city)) {
$line = explode('|',fgets($file_city));
// отбросить чужие
if ($line[3] != 'г') continue;
if ($line[1] != $convert_region) continue;
if ($line[0] != $iso_code_2) continue;
if ($line[5] > $post_code) continue;
if ($line[6] < $post_code) continue;
// выбрать ближайший город
if ($find_city[1] <= $line[5] && $find_city[2] >= $line[6])
$find_city = array($line[4],$line[5],$line[6]);
}
fclose($file_city);
}
а чуть ниже после нее найти строку
'city' => '',
и заменить на
'city' => $find_city[0],
Далее в папке /catalog/model/extension/shipping/ добавить файл dpdregions.php с содержимым
<?php
class ModelExtensionShippingDpdRegions extends Model {
public function getRegions ($id){
$query = $this->db->query("SELECT `dpd_code` FROM `" . DB_PREFIX . "dpd_regions` where `id_oc` = ".(int)$id." limit 1");
if ($query->row)
return $query->row['dpd_code'];
else
return false;
}
}
?>
Не забудьте файлу /catalog/model/extension/shipping/dpdregions.php дать соответствующие chown и chmod (например, www-data:www-data и 550).
В принципе, автору модуля нет проблем дописать это для всех остальных стран и добавить это в файл dpd_modification.ocmod.xml в своих будущих сборках, чтоб народ не лазил в коде, а то мне лениво и денег не плотють