как создовать движки для сайтов???

Полностью согласен с вами в том, что нужно разделять статические и динамические части. Скажу даже, что с целью экономии ресурсов и уменьшения зависимости от базы в некоторых случаях, предположим когда контент составляется один раз, выполнять его статическим, то есть после записи в базу, создавать html копию статьи. Нет лишних подключений к базе + меньше уязвимостей, да и если база ляжет, сайт останется работоспособным за исключением динамических разделов.
 
В моем понимании это должно выглядеть так:
Ядро отвечает за подключение шаблонизатора, и собственно самих модулей, модули деляться на статичные и динамичные, статисные подключены всегда, динамичные по мере необходимости (экономим ресурсы, нахрена? но это уже в привычке со времен доса :)

примерно так
PHP:
$smarty = new Smarty();
......
[/QUOTE]
Что касается подключения модулей
У меня это выглядит оч сложно )
примерно так

[PHP]
function LoadModule() 
{
	// Для безопасности и все такое
	$this->modulname = Security::Sanitize($_GET['mod']);
	// Проверяет права пользователя на модуль
	// если прав нет грузит главную стр. обращается к БД
	if ($this->СheckModule($this->modul_name, $this->user_name)) {
		// возвращает путь до модуля взависимости от контекста 
		// для админки один для сайта другой
		$path = $this->PathModule($this->modulname);
		// проверяем файл на существование
		if (file_exists($path)) {
			include_once $path;
			// возвращает имя класса модуля	
			$this->ClassName = $this->ClassNameModule($this->modulname);
			// проверяем на существование	
			if (class_exists($this->ClassName)) {
				// создаем экземпляр класс модуля
				$this->loadModul = new $this->ClassName;
				// ищем конфиг файл если находим читаем его
				$this->loadModul->LoadCfgFile();
				// ищем языковой файл в папке с модулем если не находим пытаемся найти альтернативный 
				$this->loadModul->LoadLngFile();
				//
				$this->loadModul->StartModule();
			} else {
				$this->set_error = 1;
				// в зависимости от настроек выводим пишем в лог, отправляем на мыло
				trigger_error ($this->lang['error3'], E_USER_ERROR);
			}
			
		} else {
			Msg::Set("Такого модуля не существует ({$this->modul_name})");
			$this->set_error = 1;
			trigger_error ($this->lang['error4'], E_USER_ERROR);			
		}
	} else {
		Msg::Set("Не хватает прав, модуль ({$this->modul_name})");
		$this->set_error = 1;
				
	}
	// если не удалось подключить модуль грузим главную стр
	if ($this->set_error == 1) {
		$this->MainPage();	
	}	
}


Добавлено через 34 минуты
модули деляться на статичные и динамичные, статисные подключены всегда, динамичные по мере необходимости (экономим ресурсы,

Еще на счет модулей
в понятие модули я вкладываю не сколько другое значение
это то что взаимодействует с ядром

модуль новостей
модуль комментариев
модуль конфигурации
и т д

подключаются динамически

ядро же состоит из компонентов и библиотек
которые подключаются как динамически так и статически

компоненты для
-работы с базой
-шаблонизатор
-обработчик ошибок
-построения интерфейса
и т д
 
Полностью согласен с вами в том, что нужно разделять статические и динамические части. Скажу даже, что с целью экономии ресурсов и уменьшения зависимости от базы в некоторых случаях, предположим когда контент составляется один раз, выполнять его статическим, то есть после записи в базу, создавать html копию статьи. Нет лишних подключений к базе + меньше уязвимостей, да и если база ляжет, сайт останется работоспособным за исключением динамических разделов.

Согласен с Вами, такой подход наиболее предпочтителен.
Так же как вариант - кеширование средствами шаблонизатора. Итог практически тот же.
Хотя сам еще не реализовал ни то ни другое :)
И склоняюсь к варианту с кешированием. менее трудоемкий пожалуй будет.

Добавлено через 11 минут
Еще на счет модулей
в понятие модули я вкладываю не сколько другое значение
это то что взаимодействует с ядром

модуль новостей
модуль комментариев
модуль конфигурации
и т д

подключаются динамически

ядро же состоит из компонентов и библиотек
которые подключаются как динамически так и статически

компоненты для
-работы с базой
-шаблонизатор
-обработчик ошибок
-построения интерфейса
и т д
У меня построенно практически также, но вот отношение к этому по другому - модульность я рассматриваю как совокупность скриптов, и чем менее они связаны тем имхо лучше, в идиале бы - подключение к базе да шаблонизатор. :)
 
Скажу даже, что с целью экономии ресурсов и уменьшения зависимости от базы в некоторых случаях, предположим когда контент составляется один раз, выполнять его статическим, то есть после записи в базу, создавать html копию статьи. Нет лишних подключений к базе + меньше уязвимостей, да и если база ляжет, сайт останется работоспособным за исключением динамических разделов.

ну к этому можно добавить

-блочное кэширование для динамических разделов
-кэширование запросов к базе где это возможно
-ajax для админки, чтобы по 100 раз не перегружать интерфейс
 
Что то все затихли
продолжу флуд :D

на примере админки
после того как залогинились
создаем экземпляр класса Admin
в конструкторе которого собственно все и происходит
строиться интерфейс
подключаются модули

Вообщем поругайте код
я думаю тут есть что поругать )

Код:
class Admin extends Constructor {
	
var $_db;
var $_smarty;
var $lang;
....
	
function Admin()
{
	global $db;
	global $tpl;
	global $lang;				
	
	$this->_db = &$db;
	$this->_tpl = &$tpl;
	$this->lang = &$lang;				

	$xajax = new xajax();
	$xajax->configure('javascript URI', XAJAX_URL.'/');
	$xajax->setCharEncoding("windows-1251");

	$this->AdminHeader();
	if (empty($_GET['mod'])){
		$this->ModulPage();
		$this->LoadModule();	 	
	} else {
		$this->MainPage();
	}
		
	}
	$this->AdminFooter();	
	$this->AdminDisplay();
}

...
}
 
Что то все затихли
продолжу флуд :D

на примере админки
после того как залогинились
создаем экземпляр класса Admin
в конструкторе которого собственно все и происходит
строиться интерфейс
подключаются модули

Вообщем поругайте код
я думаю тут есть что поругать )

Код:
class Admin extends Constructor {
    
var $_db;
var $_smarty;
var $lang;
....
    
function Admin()
{
    global $db;
    global $tpl;
    global $lang;                
    
    $this->_db = &$db;
    $this->_tpl = &$tpl;
    $this->lang = &$lang;                

    $xajax = new xajax();
    $xajax->configure('javascript URI', XAJAX_URL.'/');
    $xajax->setCharEncoding("windows-1251");

    $this->AdminHeader();
    if (empty($_GET['mod'])){
        $this->ModulPage();
        $this->LoadModule();         
    } else {
        $this->MainPage();
    }
        
    }
    $this->AdminFooter();    
    $this->AdminDisplay();
}

...
}
Лучше бы ты инстансы классов дергал, а не использовал заглобаленные переменные.
 
Это как можно пример
Например, имеется у тебя класс ClassInvoke :
PHP:
class ClassInvoke
{
    final public static function InvokeClass($classname)
    {
        if(class_exists($classname))
        {
            return new $classname;
        }
    }
}
Далее, в твоем скрипте :
PHP:
...
$this->db =& ClassInvoke::InvokeClass('Database');
Либо, в каком-нибудь классе :
PHP:
class someclass {
...
static $instance = null;
...
final public function getInstance()
{
   if($this->instance === null)
   {
      $this->instance = new $this;
   }
   return $this->instance;
}
Вот в таком вот примерно акценте.
 
написание CMS очень сильно перекликается с созданием framework.
Вспоминаю как я сам начинал:
1 - покумекал, почитал чужой код... пришел в ужас. нифига ж не понятно... по сто раз повторяются одинаковые строки на SQL и типичные команды работы с ними... все густо засеяно html-кодом... и все это под толстым толстым слоем ООП. Учитывая что это было во времена процветания php4 то ООП вообще был непонятно на кой... только чтобы запутать начинаюшего... в общем никакой обфускатор не нужен :)
2 - принятие решения написать самую ПРОСТУЮ и ЛЕГКОЧИТАЕМУЮ CMS. Первой мыслью было максимально упростить код. Естественно как программист с немалым стажем (php и вообще вебкодинг я видел в первый раз но в детстве ассемлером не гнушался) я решил вынести весь html код нафиг из своего кода... та же участь была уготована sql коду. К счастью я тогда был неопытен и не знал о таких чудовищах как smarty.. поэтому написал свой первый шаблонизатор... :) потом поскольку с SQL я тогда был слаб, то тупо взял класс из какойто CMS и написал над ним процедурный врапер, чтобы мне было удобно работать с mysql...
3 - потом я начал писать собственно код и понял что мне нужна еще одна стандартная часть ядра - система управления сессиями (авторизация, управление правами и тп)... этот модуль ядра я написал, также написал над этим модулем простейшие функции типа login/logoff/редактирование профиля и админская панель управления пользователями (в профиле редактировались только логин/пароль, а у админа была также была возможность выдавать пользователю разный уровень прав и список пользователей плюс функция удаления)
4 - я посмотрел на все то что вышло, и после того как налюбовался на свою работу составил ТЗ на расширение функционала ядра. Я добавил в шаблонизатор вывод массивов и условную конструкнию, а также немного доработал модуль сессий чтобы можно было легко объединить редактирование профиля пользователем и редактирование пользователя админом в один модуль...
также внимательно присмотревшись к тем действиям которые я выполнял над MYSQL я сделал несколько типовых функций которые автоматически генерировали типовые запросы типа select insert и тп.
5 - следующим этапом я прошелся по всему своему коду, и покомментировал каждую строчку, потом почистил код от трудночитаемых конструкций и удалил к чертовой матери чужой класс работы с MYSQL заменив его своим процедурным и гораздо более читабельным (и в разы более быстрым кодом).
6 - имея этот простой и очень читабельный код я перешел уже к тому чтобы копипастить свой собственный код и окрыленный тем как это все круто я написал множество CMS которые уже могли иметь какоето практическое применение (был даже простенький форум, с топиками, категориями. аватарами модераторами и многими другими функциями..)
7 - наигравшись вдоволь со своим движком я снова перечитал весь код, поисправлял баги, поправил коментарии... и ПОЗАТЫКАЛ ЭЛЕМЕНТАРНЫЕ ДЫРЫ, которые у меня неизбежно вылезли...
8 - начиная с этого момента я уже начал писать CMS-ки довольно легко. Сейчас набор заготовок значительно больше, но указанные три модуля, пусть и очень сильно изменившиеся, до сих пор встречаются в большинстве моих движков.
 
начнив таком порядке.
1) Паскаль.
2) С (не С++, потом!).
3) Ассемблер.
(ты поймешь как надо программировать - и тебе это сильно поможет в дальнейше работе в интернет!)

только потом html и css, php, mysql.
 
Назад
Сверху