Евгений, потому что populateTree() загружает дерево из БД в связи `children`, и возвращает сам узел. Таким образом, можно обойти всё дерево обращением, например, $root->children[0]->children[0]->title, при этом обращений к БД более не будет.
Arik: сама рекурсия не так страшна, если речь, конечно, не о >10k элементов. Nested Set, как показали выше (по ссылке на расширение yii1), можно в принципе обойти без рекурсии, однако читабельность такого кода несколько ниже.
Павел Гоголинский: Максим Тимофеев всё правильно подсказывает, если вам нужна сортировка рутовых узлов, вводите доп. поле sort, и сортируйте с помощью него. На детей не повлияет, если вы не будете отменять их сортировку по полю lft (у корневых узлов lft всегда равен 1).
Но вообще, лучше и проще, если вам требуется несколько корневых узлов для какой-то сущности - создать один корневой узел который не будет показываться для пользователя, а в него уже добавлять узлы, которые будут видны как рутовые с возможностью сортировки стандартными методами.
Ну, наверху тоже возможно трансформация. Самый простой способ проверить, есть ли трансформация текста - создать пустой слой в Photoshop и написать в нём текст таким же размером, как целевой текст. Если разница в размере есть, значит трансформация есть.
Спасибо! Имею в виду следующее. Есть слева меню каталога сайта, например:
Телевизоры (/catalog/tv)
Ноутбуки (/catalog/notebook)
Аксессуары (/catalog/accessories)
А в аксессуарах подразделы:
Кабели (/catalog/accessories/cable)
Пульты (/catalog/accessories/remote)
При этом в меню указана ссылка именно /catalog/accessories, при нажатии на которую HTTP 302 редиректом пользователь перекидывается на первый подраздел /catalog/accessories/cable.
Кстати, ещё одно из таких же требований было переделать стандартный 302 редирект, на 301.