Hi.
You need to create your carrier correctly, then everything will work.
Example of how the carrier should be created:
$carrier = new Carrier(); $carrier->name = $this->l('my new carrier'); $carrier->active = 1; $carrier->deleted = 0; $carrier->shipping_handling = 0; $carrier->range_behavior = 0; $languages = \Language::getLanguages(false); $delays = []; $descriptions = []; foreach ($languages as $language) { $delays[$language['id_lang']] = 'my new carrier'; $descriptions[$language['id_lang']] = 'here is my new carrier'; } $carrier->delay = $delays; $carrier->description = $descriptions; $carrier->shipping_external = 1; $carrier->is_module = 1; $carrier->external_module_name = $this->name; $carrier->need_range = 1; // carrier logo if (file_exists(dirname(__FILE__) . 'logo.jpg')) { copy(dirname(__FILE__) . 'logo.jpg', _PS_SHIP_IMG_DIR_ . '/' . (int) $carrier->id . '.jpg'); } $db = Db::getInstance(); $groups = Group::getGroups(true); $zones = Zone::getZones(true); $shops = Shop::getShops(true); if ($carrier->add()) { foreach ($groups as $group) { $db->insert( 'carrier_group', array( 'id_carrier' => (int) $carrier->id, 'id_group' => (int) $group['id_group'] ), ); } foreach ($zones as $zone) { $db->insert( 'carrier_zone', array( 'id_carrier' => (int) $carrier->id, 'id_zone' => (int) $zone['id_zone'] ), ); } foreach ($shops as $shop) { $db->insert( 'carrier_shop', array( 'id_carrier' => (int) $carrier->id, 'id_shop' => (int) $shop['id_shop'] ), ); } }
and call hook:
public function hookDisplayCarrierExtraContent($params) { $myCarrierId = $this->id; if ($params['moduleId'] == $myCarrierId) { return $this->display(__FILE__, 'views/templates/admin/carrier/carrier_extra_content.html.tpl'); } }