Hola @monicaauto56,
@beatrizseller tiene razón, el constructor de la clase Product no es el lugar adecuado para este tipo de cálculo. Es un punto de entrada muy temprano y los cálculos pueden ser costosos. Además, como bien señalas, el manejo de getPriceStatic para cada combinación es propenso a errores si no se pasan todos los parámetros de contexto correctamente, y es muy ineficiente.
La mejor aproximación, si insistes en un override (aunque no la más mantenible), sería en el controlador de producto, donde ya tienes el contexto completo y los datos del producto cargados. PrestaShop 8.x ya incluye un método útil: Product::getMinMaxPrice(). Este método está diseñado para obtener los precios más bajo y más alto de un producto, considerando sus combinaciones y si se deben incluir impuestos, etc. Lo ideal sería usarlo en ProductController y asignar esas variables a Smarty.
Aquí tienes un ejemplo de cómo podrías modificar el ProductController para asignar estas variables al Smarty. Esto es una mejora sobre tu intento, pero sigue siendo un override que puede dar problemas en futuras actualizaciones del core:
// controllers/front/ProductController.php (Override mejorado)
class ProductController extends ProductControllerCore
{
public function assignGeneralInformations()
{
parent::assignGeneralInformations();
$product = $this->context->smarty->getTemplateVars('product');
if (isset($product['product']) && Validate::isLoadedObject($product['product'])) {
$minMaxPrices = Product::getMinMaxPrice($product['product']->id, true); // Segundo parámetro para incluir impuestos
if ($minMaxPrices && $minMaxPrices['min_price'] < $minMaxPrices['max_price']) {
Después de aplicar este override, tendrías las variables {$product_price_range_min} y {$product_price_range_max} disponibles en tus archivos .tpl (como product.tpl o product-miniature.tpl) para mostrarlas condicionalmente. Por ejemplo:
{if isset($product_price_range_min) && isset($product_price_range_max)}
{l s='Desde' d='Shop.Theme.Catalog'} {$product_price_range_min|floatval|Tools::displayPrice:$currency.id} {l s='Hasta' d='Shop.Theme.Catalog'} {$product_price_range_max|floatval|Tools::displayPrice:$currency.id}
{/if}
Esta solución es más limpia que tu intento original, pero como cualquier override del core, te vincula a una versión específica de PrestaShop y puede requerir mantenimiento cada vez que actualices. Para una solución más robusta y sin preocupaciones de compatibilidad con futuras versiones o temas, te recomiendo buscar un módulo dedicado. Para la automatización de rango de precios del producto, hay opciones que se encargan de esto de forma profesional y mantenible.