Почему переменная пропадает из области видимости в другом файле?
По тому что инклуд происходит внутри объекта $web_template, в котором область видимости изолирована текущим вызывающим объектом.
В самом файле такой код:
<?php
$products = $GLOBALS['products'];
Во первых - вы пытаетесь достать из глобал переменную, которую туда не помещали, во вторых - это просто жопа какой плохой подход, вместо этого у вас должно быть что-то типа
$web_template->products = $products;
$web_template->include('catalog', 'cards-simple');
В самом файле такой код:
var_dump($this->products); // $this будет ссылаться на сам объект $web_template
PS:это при условии что я правильно понял структуру вложений вашего приложения.