Подскажите способы проектирования связи 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 и произвести регистрацию
Слыхал... но не хочу в них разбираться пока с нуля фундаментально "не прохаваю" php. CMS - для тех кто в голом php уже профи который просто штампует сайты как конвейер, или для тех кто не хочет учить фундаментально и ему хватает поверхностно нахвататься информации.. Я предпочитаю изнасиловать свой моСК php извращениями и не стать недопрограмистом в веб индустрии от каких уже много советов услышал что разрывали меня (новичка) в хлам от смеха. Вот поэтому CMS не предлагать!
о кажется мой вариант щас спою часть 1 - вступление создаем файлик - templateController.php - я на него не претендую - я его нашел когда в инете и немного подправил ( только врезку в html) Код (PHP): <?php /* Модуль управления шаблонами Автор: Немиро Алексей 04 марта 2007 года mailto:admin@kbyte.ru Copyright (c) Nemiro AS, 2007 */ class templateController { public $time_start; public $content; // для хранения контента public $templateName; // имя файла шаблона public $errorMessage; // сообщение об ошибке public $title; // заголовок <title></tile> // инициализация function templateController() { $content = array(); $templateName = ""; $errorMessage = ""; $title = ""; } // вывод данных function Fill() { // загрузка шаблона $result = file_get_contents($this->templateName); if (!$result) { $errorMessage = "<span style=\"color: Red\"> Ошибка: Файл шаблона <strong>".$this->templateName."</strong> не найден.</span><br />"; return $errorMessage; } else { // ищем <title></title> $titleTemplate = '`(<title>(.*)</title>)|(<TITLE>(.*)</TITLE>)|(<Title>(.*)</Title>)`'; if (preg_match($titleTemplate, $result)) { if ($this->title != NULL) { $newTitle = $this->title; $result = preg_replace($titleTemplate, "<title>$newTitle</title>", $result); } } // поиск и замена блоков контента самим контентом while ($s = current($this->content)) { $result = str_replace("", $s, $result); next($this->content); } echo $result; // $time_end = getmicrotime()- $time_start; // echo "<BR>Время генерирования странички2: ".$time_end ; } } } ?> 2. создаем файл -index.php Код (PHP): require ($_SERVER['DOCUMENT_ROOT']."/templateController.php"); include ("header.php"); // тут делаеш переменную $header = куда впихиваеш шапку ( загрузка js..css.. менюха если есть) .. если надо делаеш переменную $footer и туда впихиваеш низ $master = new templateController(); $master->templateName = $_SERVER['DOCUMENT_ROOT']."/html/main.html"; $master->content["HeadContent"]=$header; // это переменные и данные которые уйдут в html $master->content["FooterContent"]=$header; $master->title = "Какаято страничка"; $master->Fill(); //запуск сего тварения 3. создаем файл /html/main.html - где будет все твориться и вариться Код (Text): <!DOCTYPE html> <html> <head> <!--php:HeadContent--> <title></title> </head> <body> <h3>чудо сайт</h3> <!--php:FooterContent--> </body> <script> </script> </html> обращаем внимание на комментарии в html - <!--php:HeadContent--> и <!--php:FooterContent--> именно сюда будет вставлять все что вы придумайте и количество переменных ограничено только вашей фантазией. если php обернуть сессией то будет вообше прикольно - а если даже ктото увидит html-ку - флаг им в руки будет полный бред Добавлено спустя 6 минут 9 секунд: забыл добавить комбинацию которую подкинули уже тут viewtopic.php?f=2&t=45877 это можно использовать для того чтобы весь интерфейс ( разные html) подгружался с файла index.php?data=chto_to а все данные - в моем случае обработка базы данных - вываливалась ну скажем с файла data.php
Вроде бы как идея более менее понятная... Учитывае свое самочуствия - разбор полетов будет утром. Пока спасибо за пищу для мозгов!!!
Почти тоже самое: Модуль новостей имеет шаблоны: Код (Text): $this->tpls = explode('-=separator=-',file_get_contents($this->path.'tpls.html')); tpls.html: Код (Text): -=separator=-2 новость полностью-=separator=- <h1>??header??</h1> <p class="date">??date??</p> ??text?? -=separator=-4 шаблон списка новостей-=separator=- <h3><a href="/news/??sid??.html">??header??</a></h3> <hr> -=separator=-6-=separator=- -=separator=-8-=separator=- Использование нужного шаблона: Код (Text): $echo .= str_replace(array_keys($replace),$replace,$news->tpls[4]);
а вот что еще - помойму я как то дописывал - 2 последние строчки если убрать комент то будет писаться время генерации странички на всем что проходит через него. Это я тестировал по скорости реагирования разные шаблонизаторы