CMS + Smarty - правильная организация а галвное - удобная. как?

Сенсей

Новичок
CMS + Smarty - правильная организация а галвное - удобная. как?

Есть большой проэкт. 20K юзеров. 200K Хитов в день. 6K Хостов в день.

Так вот, проэктировка самого проэкта простая до невозможности. Но как выяснилось не очень удобная.

Есть файлы

functions.php - здесь собрание функций

header.php - шапка
modules.php - подгружает модуль
footer.php - низ
modules/mod_name/index.php - файл модуля


Модули загружаются по (пример) - modules.php?name=Users

Файл modules.php подгружает файл (проверка на безопасность и тупо инклюд) - modules/Users/index.php

Файл modules/Users/index.php в свою очередь делает следующее

PHP:
	include_once 'header.php';
# тут мы кодим причем 
# данные выводим через echo
include_once 'footer.php';
А файлы header.php и footer.php делают:

# header.php
PHP:
require_once 'functions.php';
global $prefix, $dbi;
$smarty->assign('HTTP_HOST', $_SERVER['HTTP_HOST']);
$smarty->assign('PAGE_LAST_MODIFIED', gmdate("D, d M Y").' 23:32:46 +0300');

$smarty->display('header.tpl'); - подгружаем шаблон шапки
# footer.php
PHP:
$smarty->display('footer.tpl'); - подкгружаем шаблон низа
Ну вобще это грубое представление структуры движка.

Теперь например мне нужно полстью изменить дизайн одногомодуля. Скажем Users

Для этого мне придется либо создавать вместо header.php и footer.php файлы Users_header.php и Users_footer.php которые в свою очередь будут грузить другую шапку и низ. И которые я будут подключать в modules/Users/index.php вместо обычных header.php и footer.php

Либо создавать доп переменную и вставлять ее в каждом модуле пере подключением header.php - например имя папки откуда грузить шапку и низ

Ну вобщем подскажите как цивильно сделать...
 

alexhemp

Новичок
сделай глобальный массив параметров, например $config

при старте инициализируй его дефолтными значениями. Если модулю нужно - пусть переопределяет их


например $config['header'] меняет на свой.
 

Сенсей

Новичок
alexhemp
Понял

А само вот это таскание хеадера и футера по модулям это нормально?
 

HraKK

Мудак
Команда форума
Сенсей

У меня в цмс есть такое понятие как Шаблон страницы. Я каждой странице могу назначить свой собственный выгляд. По моему это удобно. Ведь во многих сайах главная страица отличается кардинально от внутрених и тд.
 

Сенсей

Новичок
У меня если ты прочитал то есть такое поняти... ключевое слово - Smarty

Но и шаблоны можно использовать по разному... и структура движка у каждого разная...
 

HraKK

Мудак
Команда форума
У меня тоже Smarty и что? Ты спросил
CMS + Smarty - правильная организация а галвное - удобная. как?
Вот тебе говорю, как я считаю это правильно надо сделать. Прогоняеся через смарти темплейт вставляется в готовый, контент страницы тоже прогнанный через смарти.

ИМХО
 

magic

lancer
PHP:
include_once 'header.php';
# тут мы кодим причем 
# [b]данные выводим через echo[/b]
include_once 'footer.php';
У меня если ты прочитал то есть такое поняти... ключевое слово - Smarty
Я вот одного понять не могу. Зачем вам Smarty при такой логике приложения?
 

WP

^_^
Хероватая какая-то структура, header & footer это низачот. Imho, должен быть один шаблон main.tpl который всем рулит и инклюдит шаблоны по switch $mod. Либо может грузить функцию подключающую модули, т.е. {module_load name="coolmod"}. А то что у тебя - это неправильное использование шаблонизатора, и полное отсутствие отделения логики представления.
> проверка на безопасность и тупо инклюд
Я плакал... проверка на безопасность... [m]basename[/m]
> $smarty->assign('HTTP_HOST', $_SERVER['HTTP_HOST']);
Тоже порадовало.. $smarty.server.HTTP_HOST

-~{}~ 28.12.06 07:29:

header & footer подходит для тупых движков таких как PHP-Nuke, в которых в хидере пишешь свои стили и заголовок, а в футере пишешь копирайт. А когда хочешь поменять что-то по дизайну внутри лезешь в PHP-код.
 

Сенсей

Новичок
magic
Эм... стормозил я.. неправильно объяснил...

данные выводим не через echo а через

то есть

PHP:
include_once 'header.php'; 
# тут кодим php
# потом assign и выводим шаблон
$smarty->display($module_name.'/user_profile.tpl');
include_once 'footer.php';

Я хотел выделить что я вывожу частями шаблон... ведь некоторые делают что то вроде этого:


PHP:
include_once 'header.php'; 
# тут кодим php
# потом assign и выводим шаблон
$smarty->assign('USER_LOGIN', $user_login);
$smarty->assign('USER_AVATOR', $user_avator);
$template_content = $smarty->fetch($module_name.'/user_profile.tpl');
$smarty->assign('TEMPLATE_CONTENT', $template_content);
include_once 'footer.php';
В этом случае они могут не разделать шаблон на хеадер и футер - а использовать один index.tpl с переменной внутри $TEMPLATE_CONTENT

-~{}~ 28.12.06 15:44:

WP
$smarty.server.HTTP_HOST - рулит =))

WP
Ну так вот меня и интересуют подробности как цивильно связать смарти и структуру движка в одно целое...

З.З
Моя структура модуля схожа на эту:
PHP:
$smarty->display('header.tpl');
# тут кодим php
# потом assign и выводим шаблон
$smarty->display($module_name.'/user_profile.tpl');
$smarty->display('footer.tpl');
Только что в моем случае хеадер и футер выводятся в php файлах которые я подключаю... вместо прямого подключения шапки и низа в tpl
 

дедушка АУ

Новичок
может попробовать отказаться от процедурного подхода и полностью перейти на объекты (почитать про ООП, Шаблоны проектирования (MVC и т.д)) ? все равно рано или поздно прийдется :)

-~{}~ 28.12.06 17:30:

будет все гораздо проще, честно :)
 
Сверху