Как сделано у меня:
1. есть директория templates, в ней лежат папки со скинами
2. есть функция, которая при старте проекта делает некоторые проверки
а.) проверить не появились ли новые папки в директории templates, если появились, то прописать новый скин в БД
б.) когда заходит юзер, система проверяет какой скин указан у него в анкете, если не стандартный, подключает его скин, или оставляет как есть.
в.) если у пользователя выбран какой-то свой скин, то сначала проверяем все ли файлы в нём есть, если чего-то нет, то пишем юзеру что скин повреждён и ставим стандартный.
3. header.tpl - файл который отвечает за подключение всех css и js файлов и
скриптовпатом идёт $page.tpl (он меняется в зависимоти от текущей локации, ну допустим главная страница(index.tpl) может отличаться по структуре от страницы новостей(news.tpl), у форума естественно своя структура, следовательно для него существует свой (forum.tpl)
а дальше подключается footer.tpl который в 90% случаев всегда одинаковый.
Это всё работает при условии что для какой-нибудь из локаций не выбран свой особенный header.tpl и footer.tpl. Если допустим нужно их создать, то создаётся что-то типа header.forum.tpl или footer.news.tpl
Т.е. в результате получаем что количество файлов скина у меня примерно равно
(количество локаций)+2, при особых условиях (количество локаций)*3, но такой необходимости пока не было.
т.е. у меня существуют файлы header.
php и footer.
php, в которых указано в какой ситуации какой tpl нужно подтянуть.
в этих двух файлах кроме всего прочего есть строки типа
работает стабильно и безотказно.
а контролируется все примерно так
$headtpl = $_SERVER['DOCUMENT_ROOT']."/templates/{$userskin}/header.tpl";
$foottpl = $_SERVER['DOCUMENT_ROOT']."/templates/{$userskin}/footer.tpl";
$path = $_SERVER['DOCUMENT_ROOT']."/templates/{$userskin}/{$currentlocname}.tpl";
$deffoottpl = $_SERVER['DOCUMENT_ROOT']."/templates/default/footer.tpl";
$defheadtpl = $_SERVER['DOCUMENT_ROOT']."/templates/default/header.tpl";
$defpath = $_SERVER['DOCUMENT_ROOT']."/templates/default/{$currentlocname}.tpl";
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки