За последние 24 часа нас посетили 19224 программиста и 1614 роботов. Сейчас ищут 883 программиста ...

Не читаемость кода. советы по решению

Тема в разделе "Прочие вопросы по PHP", создана пользователем lnker, 17 окт 2013.

  1. lnker

    lnker Новичок

    С нами с:
    17 окт 2013
    Сообщения:
    3
    Симпатии:
    0
    Подскажите способы проектирования связи php файлов
    Для того чтобы вы поняли мою проблему навожу пример.
    У меня есть index.php:
    ------------------------------

    <?php
    include_once "config.php";
    include_once "func.php";

    if (isset($_GET['cat'])){
    $id_struct = $_GET['cat'];
    }

    if (isset($_GET['menu'])){
    $id_menu = $_GET['menu'];
    }

    if ($id_struct){
    $content = get_vacancy($id_struct);
    $subcat = get_subpages($id_struct);
    }

    if (!$id_menu && !$id_struct){
    $id_menu=1;
    }

    if ($id_menu){
    $content = get_menu_element_content_by_id($id_menu);
    }

    include "skin.php"
    ?>



    skin.php - шаблон..
    В этом шаблоне где должен быть контент у меня очень много кода.. и его количество все растет и растет, и он превращается все в менее читабельно-понимаемый код

    например в области контента:

    если (условие 1) то {
    інклуд_уанс 1.php
    горы кода
    ...
    и еще немного кода
    }
    если (условие 2) то {
    інклуд_уанс 2.php
    горы кода
    ...
    и еще немного кода
    }
    ....
    если (условие N) то {
    інклуд_уанс N.php
    горы кода
    ...
    и еще немного кода
    }


    В области где меню, в некоторых областях шапки, подвала у меня творятся похожие вещи...
    В конечном варианте у меня получается что все php файли (register.php, login.php, ...) обрабатывается в ссылке www.mysite.com/index.php
    skin.php становится более похожим на помойку кусков кода и соответсвенно тяжело понимать его логику (а я представляю что будет через неделю если я не остановлюсь и никто не подскажет варианты решения)
    подскажите (модель взаимодействия) КАКИМ ОБРАЗОМ ФАЙЛЫ php должны взаемодействовать между собой чтобы файл шаблона остался файлом шаблона, а код - кодом (мухи - отдельно, котлеты - отдельно)
    Но есть некоторые условия. например регистрация - не всегда доступна.. у меня в config.php
    define('REG', 'EnableReg_777');
    в register.php первые строки говорят
    если REG !== 'EnableReg_777'
    тогда die
    ..потом код этого файла...

    тоесть это запретит пользователю самовольно вызвать register.php и произвести регистрацию
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да, жесть. слыхал про cms?
     
  3. lnker

    lnker Новичок

    С нами с:
    17 окт 2013
    Сообщения:
    3
    Симпатии:
    0
    Слыхал... но не хочу в них разбираться пока с нуля фундаментально "не прохаваю" php.
    CMS - для тех кто в голом php уже профи который просто штампует сайты как конвейер, или для тех кто не хочет учить фундаментально и ему хватает поверхностно нахвататься информации..
    Я предпочитаю изнасиловать свой моСК php извращениями и не стать недопрограмистом в веб индустрии от каких уже много советов услышал что разрывали меня (новичка) в хлам от смеха.

    Вот поэтому CMS не предлагать!
     
  4. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    о кажется мой вариант
    щас спою :D
    часть 1 - вступление создаем файлик - templateController.php - я на него не претендую - я его нашел когда в инете и немного подправил ( только врезку в html)
    Код (PHP):
    1. <?php
    2.  
    3.  
    4. /*
    5.  
    6.   Модуль управления шаблонами
    7.  
    8.   Автор: Немиро Алексей
    9.  
    10.   04 марта 2007 года
    11.  
    12.   mailto:admin@kbyte.ru
    13.  
    14.   Copyright (c) Nemiro AS, 2007
    15.  
    16. */
    17.  
    18.  
    19.  
    20. class templateController {
    21.  
    22.   public $time_start;
    23.  
    24.   public $content;       // для хранения контента
    25.  
    26.   public $templateName;  // имя файла шаблона
    27.  
    28.   public $errorMessage;  // сообщение об ошибке
    29.  
    30.   public $title;         // заголовок <title></tile>
    31.  
    32.  
    33.  
    34.   // инициализация
    35.  
    36.   function templateController() {
    37.  
    38.     $content = array();
    39.  
    40.     $templateName = "";
    41.  
    42.     $errorMessage = "";
    43.  
    44.     $title = "";
    45.  
    46.   }
    47.  
    48.  
    49.  
    50.   // вывод данных
    51.  
    52.   function Fill() {
    53.  
    54.     // загрузка шаблона
    55.     $result = file_get_contents($this->templateName);
    56.  
    57.     if (!$result) {
    58.  
    59.       $errorMessage = "<span style=\"color: Red\">
    60.  
    61.       Ошибка: Файл шаблона
    62.  
    63.       <strong>".$this->templateName."</strong>
    64.  
    65.       не найден.</span><br />";
    66.  
    67.       return $errorMessage;
    68.  
    69.     } else {
    70.  
    71.       // ищем <title></title>
    72.  
    73.  
    74.       $titleTemplate = '`(<title>(.*)</title>)|(<TITLE>(.*)</TITLE>)|(<Title>(.*)</Title>)`';
    75.  
    76.       if (preg_match($titleTemplate, $result)) {
    77.  
    78.         if ($this->title != NULL) {
    79.  
    80.           $newTitle = $this->title;
    81.  
    82.           $result = preg_replace($titleTemplate, "<title>$newTitle</title>", $result);
    83.  
    84.         }
    85.  
    86.       }
    87.  
    88.  
    89.  
    90.       // поиск и замена блоков контента самим контентом
    91.  
    92.       while ($s = current($this->content)) {
    93.  
    94.         $result = str_replace("", $s, $result);
    95.  
    96.         next($this->content);
    97.  
    98.       }
    99.  
    100.  
    101.  
    102.       echo $result;
    103.     //  $time_end = getmicrotime()- $time_start;
    104.      // echo "<BR>Время генерирования странички2: ".$time_end ;
    105.     }
    106.  
    107.   }
    108.  
    109. }
    110.  
    111.  
    112.  
    113. ?>
    2. создаем файл -index.php
    Код (PHP):
    1.  require ($_SERVER['DOCUMENT_ROOT']."/templateController.php");
    2.   include ("header.php");  // тут делаеш переменную $header = куда впихиваеш шапку ( загрузка js..css.. менюха если есть) .. если надо делаеш переменную $footer и туда впихиваеш низ
    3. $master = new templateController();
    4.  
    5. $master->templateName = $_SERVER['DOCUMENT_ROOT']."/html/main.html";
    6. $master->content["HeadContent"]=$header;  // это переменные и данные которые уйдут в html 
    7. $master->content["FooterContent"]=$header;
    8. $master->title = "Какаято страничка";
    9. $master->Fill();  //запуск сего тварения
    10.  
    3. создаем файл /html/main.html - где будет все твориться и вариться
    Код (Text):
    1.  
    2. <!DOCTYPE html>
    3. <html>
    4. <head>
    5.     <!--php:HeadContent-->
    6.     <title></title>
    7.    
    8. </head>
    9. <body>
    10. <h3>чудо сайт</h3>
    11. <!--php:FooterContent-->
    12. </body>
    13. <script>
    14. </script>
    15. </html>

    обращаем внимание на комментарии в html - <!--php:HeadContent--> и <!--php:FooterContent--> именно сюда будет вставлять все что вы придумайте и количество переменных ограничено только вашей фантазией.
    если php обернуть сессией то будет вообше прикольно - а если даже ктото увидит html-ку - флаг им в руки будет полный бред

    Добавлено спустя 6 минут 9 секунд:
    забыл добавить комбинацию которую подкинули уже тут
    viewtopic.php?f=2&t=45877
    это можно использовать для того чтобы весь интерфейс ( разные html) подгружался с файла index.php?data=chto_to
    а все данные - в моем случае обработка базы данных - вываливалась ну скажем с файла data.php
     
  5. lnker

    lnker Новичок

    С нами с:
    17 окт 2013
    Сообщения:
    3
    Симпатии:
    0
    Вроде бы как идея более менее понятная... Учитывае свое самочуствия - разбор полетов будет утром. Пока спасибо за пищу для мозгов!!!
     
  6. Yadfewm

    Yadfewm Активный пользователь

    С нами с:
    20 июл 2009
    Сообщения:
    223
    Симпатии:
    0
    Почти тоже самое:
    Модуль новостей имеет шаблоны:
    Код (Text):
    1.     $this->tpls = explode('-=separator=-',file_get_contents($this->path.'tpls.html'));
    tpls.html:
    Код (Text):
    1. -=separator=-2 новость полностью-=separator=-
    2. <h1>??header??</h1>
    3. <p class="date">??date??</p>
    4. ??text??
    5. -=separator=-4 шаблон списка новостей-=separator=-
    6. <h3><a href="/news/??sid??.html">??header??</a></h3>
    7. <hr>
    8. -=separator=-6-=separator=-
    9. -=separator=-8-=separator=-
    Использование нужного шаблона:
    Код (Text):
    1. $echo .= str_replace(array_keys($replace),$replace,$news->tpls[4]);
     
  7. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    а вот что еще - помойму я как то дописывал - 2 последние строчки если убрать комент то будет писаться время генерации странички на всем что проходит через него.
    Это я тестировал по скорости реагирования разные шаблонизаторы