Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как написать ядро CMS?
 
 автор: hammet   (17.04.2007 в 13:43)   письмо автору
 
 

Добрый день! Мне нужен совет разработчиков с опытом.
Я сделал уже около 20 сайтов, но никогда не прибегал к проектированию собственной CMS. Т.е. под каждый сайт делал админ-панель, под которую у меня имелись готовые модули (напр. новости, гостевая, галерея, загрузка файлов и пр) которые я при необходимости "прикручивал".
И всегда я делил разделы сайта на статику и динамику, что оговаривалось в ТЗ.
Теперь стал вопрос о создании сайта под ключ. Т.е. редактироваться должно все:
количество и название разделов, возможность добавлять текст разделов, статьи, ссылки, картинки и прочее. Т.е. нужна автоматическая генерация HTML.
Я решил что пришло время сделать собственную CMS и постепенно ее совершенствовать.

Подскажи каков принцип построения архитектуры ядра? Каков принцип генерации несуществующих разделов, и, тем более, файлов html?

Заранее спасибо!

   
 
 автор: Loki   (17.04.2007 в 15:47)   письмо автору
 
   для: hammet   (17.04.2007 в 13:43)
 

если верить Фредерику Бруксу (а в чем-то верить ему есть основания), сначала следует просто на бумажке расписать всю архитектуру приложения. То есть какой блок какие действия выполняет, что имеет на выходе, что на входе и откуда это "на входе берется". Можно, конечно, выяснить все это в процессе написания, но времени на переписывание уйдет прилично. Это если мы говорим о проектировании системы. Если надо чтобы просто о том, что "редактироваться должно все", тогда можно просто написать скрипты "для редактирования всего".
Собственно, к концу данного этапа у вас уже отпадет 90% вопросов по реализации. Так как данный этап, по словам того же Брукса, занимает 2/3 времени разработки.
А пока что ваш вопрос звучит как "расскажите мне о погоде".

   
 
 автор: hammet   (17.04.2007 в 15:51)   письмо автору
 
   для: Loki   (17.04.2007 в 15:47)
 

Ну, скажем, есть централизованная система. Все приложение работает через какой нибудь диспетчер, котрый распределяет запросы модулям. Модули независимы друг от друга. Таким образом я могу расширять номенклатуру фреймворков в дальнейшем.

Один из модулей - генератор хтмл.

Он позволяет пользователю добавлять и удалять разделы сайта, редактировать контент любой страницы и стили его отображения.

Подскажите как мне его реализовать?
я даже не знаю от чего оттолкнуться...

   
 
 автор: Loki   (17.04.2007 в 15:59)   письмо автору
 
   для: hammet   (17.04.2007 в 15:51)
 

Все равно вопрос очень общий. Ответьте для себя на вопросы:
1. какую работы будет на себя брать движок
2. где будет храниться информация о том, какие модули надо подключить
3. как модули будет подключаться и получать данные
4. где будет храниться дизайн
5. будут ли модули взаимодействовать между собой. если да, то как
...
101. конец первой страницы

Как видите, кроме вас самих тут никто не поможет. Можете скачать готовые системы и постараться разобраться, но это тот еще подарок... Как "надо" делать - вам никто не скажет, так как всем надо по своему. Могут рассказать как сделано, но на такой расплывчатый вопрос ответ будет размером с энциклопедический том.

   
 
 автор: hammet   (17.04.2007 в 16:16)   письмо автору
 
   для: Loki   (17.04.2007 в 15:59)
 

Спасибо. Помог поиск по ключевому слову "ЧПУ"

   
 
 автор: Loki   (17.04.2007 в 16:28)   письмо автору
 
   для: hammet   (17.04.2007 в 16:16)
 

Странно что не CMS...

   
 
 автор: hammet   (20.04.2007 в 14:24)   письмо автору
 
   для: Loki   (17.04.2007 в 16:28)
 

Кое что сделал....
Вот собственно сама идея:
Есть что-то вроде диспетчера, который парсит урл, подгружает нужный модуль и передает управление нужному методу. При этом методу должны передаваться параметры. Каждому свои.
Например:
code]
$url = 'http://example.com/index.php?module=news&method=edit&id=15';
[/code]
Подгружаем модуль News
Передаем управление методу Edit
параметр метода $id = 15


<?php
  
require_once('URL.php');

  class 
Kernel extends Net_URL {
  
    private 
$start_time;
    private 
$end_time;
    private 
$lib_path;
    private 
$default_module;
    private 
$params;
    
    
/**
    * PHP5 Constructor
    *
    * Parses the given url, load module, 
    * and call to a given method
    *
    */
    
public function __construct() {
      
      
parent::__construct($_SERVER['REQUEST_URI']);
      
      
$this->start_time array_sum(explode(' ',microtime()));
      
$this->lib_path $_SERVER['DOCUMENT_ROOT'] . '/src/';
      
$this->default_module $this->lib_path 'CMS.class.php';
      
      
$module_obj $this->Load_module();
      
$this->Load_method($module_obj$this->Load_params());
    }
    
    
/**
    * Get module name from parsed uri and 
    * create an object 
    * 
    * @return obj module object
    * @access private
    */
    
    
private function Load_module() {
      if (isset(
$this->querystring['module'])) {
          
$module $this->lib_path $this->querystring['module'] . '/' $this->querystring['module'] . '.class.php';
          if(
file_exists($module)) {
              require_once(
$module);
              
$module_obj = new $this->querystring['module'];
              return 
$module_obj;
          } else {
              require_once(
$this->default_module);
              
$class basename($this->default_module'.class.php');
              
$module_obj = new $class;
              return 
$module_obj;
          }
      }
      else {
          require_once(
$this->default_module);
          
$class basename($this->default_module'.class.php');
          
$module_obj = new $class;
          return 
$module_obj;
      }
    }
    
    
/**
    * Get method name from parsed uri
    * and call to this method
    * @param  obj $module_obj
    * @param  array $params
    * @return bool $success
    * @access private
    */
    
private function Load_method($module_obj$params = array()) {
      if (isset(
$this->querystring['method'])) {
          if(
method_exists($module_obj$this->querystring['method'])) {
              
$method $this->querystring['method'];
              
$module_obj->$method($params);
          }
          else {
              echo 
'method not found!';
          }
      }
      else {
          echo 
'default';
      }
    }
    
    
/**
    * Get params from parsed uri
    * 
    * @return array $params
    * @access private
    */
    
private function Load_params() {
      if(
count($this->querystring 2)) {
          
$params array_slice($this->querystring2);
          return 
$params;
      }
    }
    
    public function 
__destruct() {
      
$this->end_time array_sum(explode(' ',microtime()));
      
$runtime $this->end_time $this->start_time;
      return 
substr($runtime,0,6);
    }
  }
  
?>



Возникает следующая проблема. Разным методам нужно передавать разное число параметров, а
некоторым и вовсе не нужно....
Я чувствую что проблема решается легко, но пока не додумался как )

Может кто-то предложит способ? Или есть советы/мнения/мысли по поводу самой идеи?

Спасибо...

   
 
 автор: hammet   (21.04.2007 в 17:02)   письмо автору
 
   для: hammet   (20.04.2007 в 14:24)
 

Ну может все же кто-то может что-то сказать?

   
 
 автор: podpole   (21.04.2007 в 21:35)   письмо автору
 
   для: hammet   (21.04.2007 в 17:02)
 

Ну для примера можешь взять мою CMS (PODPOLE Work Station)
http://real-warez.net/podpole_1.4.rar
Прочитать о ней сможешь тут: http://real-warez.net/2007/01/29/pws__podpole_work_station.html
Но если честно в вышеприведёном коде я ничего не понял... Может у меня тоже практики маловато... Но всёравно посмотри, может чтонибудь для себя возмёш...

   
 
 автор: acdcee   (21.04.2007 в 22:43)   письмо автору
 
   для: podpole   (21.04.2007 в 21:35)
 

SLAED CMS LITE 2.1
SystemDK v 1.0


Не очень простые CMS но все же коды их понятны....

   
 
 автор: Jura   (22.04.2007 в 00:38)   письмо автору
 
   для: hammet   (20.04.2007 в 14:24)
 

Про параметры...

Самый простой способ - массив. Т.е. если параметры есть, то они будут в массиве, если же нет, то массив будет пуст. Этим и достигается единообразие модулей.

А вообще по поводу идеи поста, то самое правильное решение найти единообразие в проектировании, обработке параметров и системах хранения данных. Выделить особенности, которыми можно управлять и выработать систему хранения и обработки данных.

Из моего опыта по данному вопросу могу сказать, что материала по данной тематике в сети предостаточно, но вот толковых дельных советов - увы.

Каждый человек, рано или поздно приходящий к решению "написать свою CMS" приходит к этому решению не от сладкой жизни, а от количества грабель, на которые наступил или еще наступит в разбирательстве с готовыми системами управления контентом. Первое что к этому подталкивает - недовольство или неудобство чего-то готового. Второе - нереализуемость устанавливаемых целей и задач. ну а третьим могут служить многие факторы, но главный в том, что если система будет своя, то и управлять ею будет проще, так как архитектура системы будет целиком и полностью известна, все подводные камешки, которые в готовых системах обычно сохраняются под грифом "не документировано разработчиками".

   
 
 автор: Jura   (22.04.2007 в 00:55)   письмо автору
 
   для: hammet   (17.04.2007 в 13:43)
 

Парочка советов:
1. Выяви все требования к системе таким образом, чтобы четкое было представление о функционале модулей и их количестве.
2. Подбери оптимальный метод проектирования и реализации, технологии и уровень сложности.
3. Определи насколько важна скорость работы системы и уровень логирования.
4. Определись с тем, что ты от нее ожидаешь, от этой системы. Здесь имеется ввиду универсальность, функциональность, быстродействие, отказоустойчивость и остальные критерии, от которых надо отталкиваться при проектировании.

p/s/ Скоро выйдет моя CMS, насколько она будет удобной судить клиентам, но главным для меня критерием является надежность и по первым плодам этот критерий себя оправдывает.

   
 
 автор: podpole   (22.04.2007 в 21:53)   письмо автору
 
   для: Jura   (22.04.2007 в 00:55)
 

Надёжность в плане хака или что везде работать будет? Откуда ты знаешь что она надёжная? Дай ссылку на неё есле не жалко. Оценим... Я тоже CMS разрабатываю помаленьку, так что можем обмениваться опытом...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования