Hola @jorge8975, entiendo tu frustración con esto. Tu enfoque de usar un override en IndexController para obtener los productos especiales es el correcto para PrestaShop 1.7.4.0. El problema principal en tu código es, como han señalado @lorenamadrid y @anadigital, cómo se llama a Product::getPricesDrop y la falta de un filtro explícito para productos activos, además de un límite más dinámico.
Aquí te dejo una versión corregida de tu override que debería cargar correctamente los productos en oferta:
class IndexController extends IndexControllerCore
{
public function initContent()
{
parent::initContent();
$specials = Product::getPricesDrop(
(int)Context::getContext()->language->id,
0, // offset
(int)Configuration::get('PS_PRODUCTS_PER_PAGE') ? (int)Configuration::get('PS_PRODUCTS_PER_PAGE') : 8, // Límite dinámico, si no, 8
true, // IMPORTANTE: solo productos activos
Con este cambio, tendrás los productos en oferta disponibles en la variable Smarty {$specials_products_data} en tu index.tpl.
Para crear la funcionalidad de 'pestaña' en la página de inicio, necesitarás modificar tu plantilla themes/classic/templates/index.tpl para añadir la estructura HTML de las pestañas (normalmente con un ul para las cabeceras y divs para el contenido) y algo de JavaScript para la lógica de alternancia. Hacer esto manualmente implica editar el tema y es propenso a errores y a romperse con las actualizaciones del tema, especialmente si usas minificación o CCC.
Para una solución más limpia y mantenible en entornos de producción, te recomiendo usar un módulo dedicado. Hay soluciones que gestionan esto de forma automática y se integran sin necesidad de overrides de código o modificaciones directas del tema, como la solución para productos especiales dentro que te ofrece esa funcionalidad de pestaña de productos especiales en la página de inicio sin complicaciones y con una interfaz de administración.