Ограничения и область использования такого решения Если вы внимательно посмотрите на последний блок кода (метод page), то заметите один существенный недостаток (строки 6 и 7). Дело в том, что в одной теме может использоваться сайдбар, а в другой – нет. Но в контроллере мы в любом случае должны подготовить данные для него. Иначе часть тем просто не будет работать. Конечно, в данном примере, это всего лишь короткие строки текста, но в реальном приложении эти данные нужно будет получать из базы. А это означает, что для каких-то тем будут выполняться лишние запросы. Отсюда следует простой вывод: «Такой способ создания тем можно применять только для сайтов с постоянной структурой страниц». Если вам нужно более гибкое решение – используйте подход, который применяется в большинстве CMS (например, в движке WordPress).
Принцип следующий. Получение данных переносится в представление. Т. е. разработчик темы получает доступ к какому-то набору функций (API). И с его помощью получает нужные ему данные. Например, в том же WordPress функция get_posts возвращает выбранные записи. Но, несмотря на гибкость такого подхода у него есть свои недостатки: 1) Система усложняется (оправданно для CMS, но для обычного сайта может быть излишним). 2) Усложняется код представлений, т. к. нужно вызывать функции (опять же, это оправданно, если нужно обеспечить разную структуру для страниц одного типа). 3) Разработчик темы может написать далеко не оптимальный код. Например, вызвать несколько раз одну и туже функцию. 4) Практически всегда универсальное решение работает медленнее и потребляет больше ресурсов, чем узкоспециализированное. В результате может получиться тяжеловесный движок. 5) Нарушается архитектура MVC (получение данных выполняется внутри представления). В принципе, это не проблема, т. к. CodeIgniter не накладывает здесь жестких ограничений. Скачать архивы с примерами 1) Простейший вариант (без хелпера). 2) Тоже самое + хелпер. 3) Вариант с поддержкой индивидуального оформления разных типов страниц. Во всех архивах находится папка application, которую нужно скопировать в папку system дистрибутива CodeIgniter. Заключение. Как видите, выбор способа создания поддержки тем зависит от конкретной ситуации. Но меня интересует ваше мнение. Насколько оправданно вообще использование тем в небольшом проекте вроде сайта-визитки? Может проще его переделывать каждый раз и не морочить себе голову с темами? Интересно почитать: Забавный трюк по получению трафика с социалок