Hola, tengo un cliente que ha necesitado crear algunas provincias nuevas para separar el ámbito provincial de la capital. Al hacerlo las nuevas provincias se han colocado por id al final de la lista de provincias en la tabla state.
Cuando los usuarios van a crear una dirección de entrega, todas estas provincias nuevas aparecen en el desplegable al final y esto no es muy operativo porque puede que no se vean y por lo tanto no se seleccionen correctamente. Es decir, Madrid Provincia estará con las M y Madrid capital al final de la select.
Lo ideal es que salgan juntas y para eso la select debe estar ordenada por nombre y no por id.
El problema es que el desplegable lo saca la clase State.php que hace la select sin orden. Para solucionarlo lo mejor es crear un override con el order por name.
Para hacerlo creáis un fichero State.php en override/classes y ponéis dentro este código. Después tendréis que borrar la caché para que os funcione.
<?php class State extends StateCore {
/**
* Get states by Country ID.
*
* @param int $idCountry Country ID
* @param bool $active true if the state must be active
*
* @return array|false|mysqli_result|PDOStatement|resource|null
*/
public static function getStatesByIdCountry($idCountry, $active = false)
{
if (empty($idCountry)) {
die(Tools::displayError());
}
return Db::getInstance()->executeS(
'SELECT *
FROM `' . _DB_PREFIX_ . 'state` s
WHERE s.`id_country` = ' . (int) $idCountry . ($active ? ' AND s.active = 1' : '') . '
ORDER BY `name` ASC'
);
}
}