Проблема появилась в определении есть ли в категории подкатегория, как можно узнать есть там подкатегории или нет?
Проверить, есть ли в массиве (списке) категорий хотя бы одна категория у которой parent равен categoryID определяемой категории.
Категории в блоках берутся из массивов $out и $cats. Зачем-то два разных, но практически одинаковых по содержанию массива для разных блоков категорий. Свой блок категорий можно писать на базе любого из этих массивов. Загляните в файл category_tree.php, увидите там присвоение этих массивов смарти-переменным. Выведите куда-нибудь тестово эти два массива чтобы понять, как они устроены и как определять наличие подкатегорий.
PS. Я как-то неочевидно ответил на вопрос "как узнать". Дополняю. Перебором. По другому никак. Массив категорий преставляет собой совершенно линейный список со ссылками на родительскую категорию и построить из него дерево можно только последовательным перебором.
PPS. Мне думается, что Вы совсем не с той стороны подходите к созданию горизонтального меню. Надо:
1. сохранить структуру тэгов <ul><li> и имена классов, которые, скрорее всего, обрабатываются какой-то JS-библиотечкой для показа списков <ul><li> в виде горизонтального меню.
2. Автоматически понапихать в эту структуру массив категорий.
3. решить проблему, когда:
3.1 список категорий первого уровня не влезает в горизонталь.
3.2 список категорий второго уровня не влезает в вертикаль.
3.3 еще какие-нибудь из категорий третьего и последующих уровней не влезают в экран.
Только не надо думать, что (3) это редкая проблема и Вас не касается. Это ГЛАВНАЯ проблема, т.к. не касается она только пока Ваш сайт смотрят на мониторах 1280х1024 и выше, а не на мобильных устройствах, где с разрешением и свободным местом на экране все куда хуже.
Для меня в последнюю неделю решение этой проблемы состоит в поиске какого-либо JS-меню, где УЖЕ ЗА МЕНЯ все это решено - оптимальное расположение на экране и скроллеры, если не влезает.