Принципы построения CMS

Тема в разделе "Мегафлуд", создана пользователем Asvild, 30 сен 2007.

Статус темы:
Закрыта.
  1. Asvild

    Asvild Прохожие

    Принципы построения CMS.

    Каждый из нас рано или поздно сталкивается с препятствиями при построении своей CMS. Теми или иными способами они преодолеваются. Но хорошо когда выбран правильный подход к конкретному случаю, бывает же и так, что приходится идти по неверному пути. (Возможно, реализация с использование данного «неверного пути» будет функционировать и заслуживает места, но зачем тратить лишнее время и лишние нервы?)

    Для предотвращения скитаний по этим «неправильным путям», на мой взгляд, будет целесообразно все «тонкие» места при построении CMS классифицировать в данной теме. На вскидку предлагаю следующее:

    Классификация принципов:

    • Архитектура сайта. ( = ядро сайта? ) Взаимодействие компонентов. С чего надо начинать.
    • Организация вызова подключаемых модулей системы.
      - Генерация путей к подключаемым файлам.
    • Отделение дизайна от логики. Плюсы и минусы каждого метода.
      - Шаблонизатор.
      - Компонентный подход.
    • Блокировка доступа к скриптам.

    Надеюсь на постоянно пополнение данного раздела.

    -------------------------------------------------
    Приведу структуру организации системы, к которой я пока пришел.

    Код:
    admin/			- административный центр
    	templates/	- шаблоны административной части сайта
    	images/		- картинки административной части сайта
    	modules/	- модули административной части сайта
    
    cache/			- каталог, в который будет записываться кэш и компилированные шаблоны
    
    uploads/		- каталог для загрузки пользовательских файлов
    	files/		- файлы загруженные сайт
    	images/		- картинки загруженные сайт
    
    system/			- ядро системы
    	mysql.class.php	- класс для работы с базой
    
    language/		- каталог языковых файлов
    	russian.lng	- язык
    
    modules/		- модули фронтальной части сайта
    	news/		- каталог с модулем
    
    templates/		- шаблоны фронтальной части сайта
    	tpl/		- шаблон
    
    Генерация путей к подключаемым файлам.

    Пути… вот тут у меня слабое место. Я пока работаю с относительными путями. То есть просто подключаю «lib/config.php» или «../lib/config.php». В некоторых системах определяют абсолютный путь до корневой директории сайта и записывают его в конфиг, а потом уже просто подключают: $home_dir.«lib/config.php».

    Также хотелось увидеть используемые Вами классы при работе с базами данных, файлами, картинками, и т.д..
     
  2. in3t

    in3t Постоялец

    Регистр.:
    1 июл 2006
    Сообщения:
    97
    Симпатии:
    43
    Интересно, но статейка старенькая. Лучше посмотреть любой движок, принцип построения будет более понятен.
     
  3. yantar

    yantar Постоялец

    Регистр.:
    3 фев 2007
    Сообщения:
    110
    Симпатии:
    21
    Если знаете хорошо английский, можете скачать книгу
    Боба Бойко "Библия Управления Содержимым"
    Я качал ее на rucms.ru
     
  4. Asvild

    Asvild Прохожие

    Хотелосьбы увидеть конкретные предложения реализации тех или иных задач при разработке.
    нет не знаю. но и на родном не мало хороших книг.

    Добавлено через 1 минуту
    PHP:
    <?
    /**************************************************
    *
    *   Project:      PHP
    *   @Name:        class.mysql.php
    *   @Author:      Andrejs Naumovs (www.naumovs.de)
    *   @Version:     2.0.002
    *   Description:  simply - execute a query statement  for a MySQL database!
    *
    *   Return:       $value  = $class->query("SELECT < COUNT(*) or MAX(*) or MIN(*) > FROM ...");
    *                 $value  = $class->query("SELECT `one` FROM ... LIMIT 0,1");
    *                 $object = $class->query("SELECT `one`,`two` AS second, ..., `any` FROM ... LIMIT 0,1");
    *                           $one = $object->one;
    *                           $two = $object->second;
    *                           ...
    *                           $any = $object->any
    *                 $array  = $class->query("SELECT `one`,`two` AS second, ..., `any` FROM ... ");
    *                           $array[0] = $object
    *                                              $one = $object->one;
    *                                              $two = $object->second;
    *                                              ...
    *                                              $any = $object->any
    *                           ...
    *                           ...
    *                           $array[n] = $object
    *                                              $one = $object->one;
    *                                              $two = $object->second;
    *                                              ...
    *                                              $any = $object->any
    *
    *    Try it:       $sql = "SELECT COUNT(*) FROM `table`";
    *                 $sql = "SELECT COUNT(*) as count, `any` FROM `table` WHERE 1 GROUP BY `any`";
    *                 $sql = "SELECT `one` FROM `table_1` WHERE `two` IN {SELECT `two` FROM `table_2`}";
    *                 ...
    *                 $sql = "SELECT A from B WHERE C IN {SELECT C FROM D WHERE E IN {SELECT F FROM G WHERE H LIKE IS NULL} ORDER BY D ASC}  AND IN {SELECT I FROM J WHERE K NOT NULL}  ORDER BY A ASC";
    *
    ***************************************************** Enjoy! ;-)   */

    class mysql_db{

          var 
    $debug// debug messages ON or OFF
          
          
    function mysql_db(){
                   
    // constructor is empty
          
    }

          function 
    getConnect($host,$only_db,$user,$password){
                   
    // connect
                   
    return mysql_select_db($only_dbmysql_connect($host,$user,$password));
          }

          function 
    runSQL($sql,$debug FALSE){
                   return 
    $this->query($sql,$debug);
          }

          function 
    query($sql,$debug FALSE){
                   
    $this->debug $debug// set debug
                   
    if($debug$this->print_in_HTML("SQL"$sql); // print sql query as debug message
                   
    switch (1) {
                      case 
    eregi(" IN \{SELECT"$sql):
                           switch (
    1) {
                              case 
    eregi("^SELECT"$sql):
                                   
    preg_match_all("/({[^}]*)/"$sql$matchesPREG_SET_ORDER); //    find matching sql

                                   
    $sql_in str_replace("{"""strrchr($matches[0][0], "{"));
                                   if(
    NULL == ($in $this->set_IN($sql_in)))  return NULL;//~ ;

                                   
    $sql str_replace($sql_in$in$sql);
                                   
    $sql str_replace("{(""("$sql);
                                   
    $sql str_replace(")}"")"$sql);

                                   if(
    NULL == $this->query($sql$debug)) return NULL;//~
                                
    break;
                           }
                      default:
    // normal MySQL syntax
                              // analyse syntax of query
                              
    switch (1) {
                                 case 
    eregi("^SELECT",$sql):
                                      if(
    "" == ($result_identifier mysql_query($sql)))return NULL;//~ no result
                                      
    $mysql_error mysql_error();
                                      if(
    $debug && "" != $mysql_error$this->print_in_HTML("ERROR"$mysql_error);
                                      if(
    "" != $mysql_error)return NULL;//~ error occured
                                      
    switch (1) {
                                         case 
    eregi("COUNT\([^,]{1,}FROM",$sql):
                                         case 
    eregi("MAX\(",  $sql):
                                         case 
    eregi("MIN\(",  $sql):
                                           return 
    mysql_result($result_identifier,0);//~ result for select COUNT, MAX, MIN
                                           
    break;
                                         case 
    eregi("LIMIT 0\,1$",$sql):
                                           switch (
    1) {
                                              case 
    eregi("^.+,.+FROM.+",$sql):
                                                return 
    mysql_fetch_object($result_identifier);//~ result an object
                                                
    break;
                                              default:
                                                if(
    == mysql_num_rows($result_identifier))return NULL;//~
                                                
    return mysql_result($result_identifier,0);//~
                                           
    }
                                           break;
                                         default:
                                           
    // get result values to array of objects
                                           
    $i=0;
                                           while (
    $result mysql_fetch_object($result_identifier))
                                                  {
                                                   
    $result_array[$i] = $result;
                                                   
    $i++;
                                                  }
                                           return 
    $result_array;//~
                                      
    }
                                   break;
                                 default:
                                   return 
    mysql_unbuffered_query($sql);//~
                              
    }
                   }
          }
    //~ query

          
    function set_IN($sql) {
                   if(
    $this->debug$this->print_in_HTML("IN SQL"$sql);
                   
    $in  "(";
                   if (!(
    $res mysql_query($sql))) return NULL;
                   while (
    $val mysql_fetch_array($resMYSQL_NUM))$in .= $val[0].",";
                   
    $in ereg_replace(",$"")"$in);
                   
    mysql_free_result($res);
                   return 
    $in;
          }
    //~ set_IN

          
    function print_in_HTML($titel$string) {
                   
    // simply: format in HTML all debug messages
                   
    echo " <br>---- $titel<br><br> <pre>".htmlentities($string)."</pre> ";
                   return 
    TRUE;
          }
    //~ print_in_HTML

          
    function connectClose() {
                   return 
    mysql_close();
          }
    //~ connectClose
    }//~
    ?>
    Использование

    Хотелбы услышать комментарии по вопросу актуальность данного класса

    и в догонку еще один хороший класс

    DbSimple: лаконичная работа с различными СУБД

    Полный архив
     
Статус темы:
Закрыта.