Hola @sarahub y @alberto_92, veo que estáis en el camino correcto al identificar la fragilidad de los overrides y las limitaciones de las funciones core para exportaciones avanzadas. @alberto_92 ha dado en el clavo con los puntos clave para una exportación robusta.
La verdad es que intentar montar una exportación "Pro" con todos esos requisitos (filtros dinámicos, campos personalizados, manejo de memoria, formatos variados) mediante un simple override o unas pocas líneas de código es una tarea enorme y, como bien dices, muy propensa a romperse. La función Product::getProducts está más orientada a la visualización de datos en el front-end o en listas paginadas, no para extraer todo el catálogo de forma optimizada.
Para una consulta más eficiente dentro de un controlador o módulo personalizado, podrías empezar así (aunque esto es solo la punta del iceberg de una solución completa):
class MyCustomExportModuleController extends ModuleAdminController
{
public function processExportAction()
{
// Ejemplo de consulta más directa para campos específicos
$sql = new DbQuery();
$sql->select('p.id_product, pl.name, p.reference, ps.price')
->from('product', 'p')
->leftJoin('product_lang', 'pl', 'p.id_product = pl.id_product AND pl.id_lang = ' . (int)$this->context->language->id)
->leftJoin('product_shop', 'ps', 'p.id_product = ps.id_product AND ps.id_shop = ' . (int)$this->context->shop->id);
Sin embargo, este código es solo una base para la consulta. Implementar todo el proceso de exportación, la interfaz de configuración en el Back Office, la paginación, los filtros avanzados y la compatibilidad con futuras versiones de PrestaShop es un trabajo complejo.
Para una solución fiable y de bajo mantenimiento en PrestaShop 1.7.7.2 (y compatible con versiones superiores), mi recomendación es utilizar una herramienta de exportar productos dedicada. Estos módulos están diseñados para manejar todas esas complejidades, ofrecen una interfaz amigable en el BO y se actualizan para mantener la compatibilidad.