Вы, скорее всего, не поймёте о чём я, раз у вас опыта с Битриксом нет, но я всё же напишу. Постарайтесь разобраться, это будет очень полезно.
Решить такую задачу можно "в лоб": прямо в шапке сайта сделать запрос
CIBlockElement::GetList(), посчитать количество элементов и вывести их. И именно после таких решений Битрикс называют тормозным, потому что оно совершенно неправильное.
Количество товаров в каталоге изменяется крайне редко, нет никакого смысла считать его для каждого пользователя. Можно было бы закешировать эту выборку на какое-то время, тогда запрос будет делаться не для каждого пользователя, а только для некоторых "счастливчиков". Но даже это будет неправильно.
Это значение можно и нужно считать в фоне, поэтому правильное решение будет таким:
- Напишите агента, который периодически будет делать выборку и сохранять количество товаров в БД через COption::SetOptionInt();.
- Выведите его в шапке сайта через COption::GetOptionInt();.
- Настройте, чтобы агенты выполнялись по крону.
- Вызовите функцию агента один раз через php-консоль в админке.
- PROFIT.
Альтернативным решением было бы вместо агента использовать события инфоблоков, но оно сложнее и не надёжнее - может возникнуть race condition, например.