Помогите мне пожалуйста я хочу сделать сайт на php и mysql, это будет мая первая серьёзная программа.. прошу помочь заранее спасибо! Я хочу сделать супер простой но функциональный сайт - визитку.. в итоги CMS В него должен входить шаблон.. Ну шаблон на html в нем например {MENU}, будет хранится в отдельном файле.. На главной странице новость, а причём на других страницах будет что то другое.. хочу посмотреть на процесс создания сайт, я смыслю в программировании, читал книги, а сделать целый проект ни как не получается.. Help!
Ну я так понимаю нужно начать с шаблона? вот что я сделал.. HTML: <html> <head> <title>{TITLE}</title> </head> <body bgcolor = #{BGCOLOR}> <table width = "1024" align = "center"> <tr> <th colspan = "2"> {HEAD} </th> </tr> <th colspan = "2"> <table width = "100%" height = "100%"> <th> <td width = "250"> {MENU} </td> <td width = "774"> {BODY} </td> </th> </table> </th> <tr> <th colspan = "2"> {FOOTER} </th> </tr> </table> </body> </html>
Я уже это сделал! я зная что мне надо но не знаю как это сделать... ну вот я задал конкретный вопрос.. есть шаблон, нужно вынести {MENU} в отдельный файл........ а вот {BODY} будет зависит от того на какой страници пользователь находиться.. типа index.php?page=3 к стати как это работает?
Я бы дал свою на ковыряние, но она сделана по паттерну MVC с вендорными классами (Twig, DoctrineORM). Возми Лёхину Strawberry
у меня так примерно, если упростить погугли на тему mvc PHP: <?php class PageController { protected $registry; protected function buildPage($content){ $this->registry['tpl']->setVars(array( 'menu' => $this->getMenu(), 'content' => $content //еще куча всего ),'tpl/index'); } protected function getMenu(){ return 'menu'; } public function __construct($registry) { $this->registry = $registry; $this->checkAccess(); } protected function checkAccess(){ //блабла } } class UserController extends PageController{ protected $access = 10; public function index(){ $this->buildPage('Добро пожаловать'); //ну либо с шаблонов или другими методами } }
ExDragon достаточно взглянуть на прикреплённые темы, которые идут первыми http://www.php.ru/forum/viewtopic.php?t=1372
ExDragon Я могу только посоветовать, если с какой то поставленной задачей справится не удаётся, попробуй её разбить на много много(как можно больше), мелких задач и записать их. Я так всегда делаю если что то не получается. Кстати меню у меня тоже в отдельных файлах как провела и прикрепляю я их так: <?php readfile("menu"); ?> А тело страничек разных я бы так сделал: <?php switch($_GET[body]){ case 1:readfile("body1");break; case 2:readfile("body2");break; case 3:readfile("body3");break; default:readfile("body")break; } ?> и в ссылках бы писал: index.php?body=1 index.php?body=2 index.php?body=3
Ну вот я сделал шаблонизатор... а вот если я хочу что бы страницы хранились в базе данных, RX200 это то что нужно! нужно сделать базу, и запрос... а как их делать?
Я сделал так но ни чего не работает... bufer.php PHP: <? class Buffer { var $buffer; # инициализация function Buffer($filename='') { $this->buffer = ""; if(!empty($filename)) $this->SendFile($filename); } # очистка буфера function Clear() { $this->buffer = ""; } # заполнение буфера function Send($str) { $this->buffer .= $str; } # Чтение буфера function Read() { $tmp = $this->buffer; $this->Clear(); return $tmp; } # выдача буфера function Show() { print($this->Read()); } # шаблонизация или парсинг # замена и подстановка переменных function Parse() { # внимание! использование такого подхода НЕ безопасно # модифицируйте сами этот метод, для работы с массивами. reset($GLOBALS); while(list($name,$val) = each($GLOBALS)) { # выбираем только строки и числа if(is_string($val) OR is_int($val)) { $this->buffer = str_replace('{'.$name.'}',$val,$this->buffer); } } } # заполнение буфера из файла function SendFile($filename) { if(file_exists($filename)) { $this->buffer .= join('',file($filename)); } } } ?> index.php PHP: <? error_reporting(E_ALL); include_once('./buffer.php'); $TITLE = 'Моя первая страница'; switch($_GET[BODY]){ case ProTPL:readfile("./ProTPL.html");break; case ProDT:readfile("./ProDT.html");break; case ProSSE:readfile("./ProSSE.html");break; case About:readfile("./About.html");break; default:readfile("./News.html")break; // загружаем menu $MENU = new Buffer('./menu.html'); $MENU->Parse(); $MENU = $MENU->Read(); // загружаем body и устанавливаем now $BODY->Parse(); $BODY = $BODY->Read(); // загружаем основной шаблон и выводим его $HTML = new Buffer('./main.html'); $HTML->Parse(); $HTML->Show(); ?> как исправить?
мне нужно - завися от того на какой странице юзер, отображался заместо {BODY} определённый файл.. а страница вида index.php?body=ProTPL
Базу и запрос. самое простое это, Установи, phpMyAdmin, с начало там в ручную делаешь такой запрос который тебе нужно, и он там отобразится в текстовом виде, копируешь его в: mysql_query(сюда); И он будет работать. Хотя файлы лучше по моему не хранить в базе. все case ProTPL:readfile("./ProTPL.html");break; исправь на case "ProTPL":readfile("./ProTPL.html");break; так как это строка. её нужно заключить в кавычки. переменная $BODY не объявлена как класс. и если хочешь с шаблоном, то в switch'e не в страничку вписывай а присваивай переменной имя нужного файла и потом его загружай в буфер. пример: PHP: switch($_GET[BODY]){ case "ProTPL":$filname="./ProTPL.html";break; ........ $BODY = new Buffer(); $BODY->SendFile($filname); $BODY->Parse(); $BODY->Show(); Вроде так должно заработать.
index.php PHP: <?php header('Content-type: text/html; charset=utf-8'); function tpl($vars,$path){ extract($vars); ob_start(); include($path.'.html'); return ob_get_clean(); } $auth = true; $menu = tpl(array( 'auth' => $auth ),'menu'); $friends = array( array( 'id' => 5, 'name' => 'Вася', 'mail' => 'вася@mail.ru' ), array( 'id' => 3, 'name' => 'Даша', 'mail' => 'даша@mail.ru' ), array( 'id' => 91, 'name' => 'Саша', 'mail' => 'саша@mail.ru' ) ); $content = tpl(array( 'friends' => $friends ),'friends'); echo tpl(array( 'menu' => $menu, 'content' => $content ),'index'); ?> menu.html PHP: <a href="#">на главную</a> <?php if($auth): ?> <a href="#">в кабинет</a> <?php endif; ?> friends.html PHP: <table> <?php foreach($friends as $friend):?> <tr> <td> <a href="profile.php?id=<?php echo $friend['id'];?>" ><?php echo $friend['name'];?></a> </td> <td> <a href="mailto:<?php echo $friend['mail'];?>" >написать</a> </td> </tr> <?php endforeach;?> </table> index.html PHP: <?php echo $menu; ?> <hr/> <?php echo $content; ?> результат HTML: <a href="#">на главную</a> <a href="#">в кабинет</a> <hr/> <table> <tr> <td> <a href="profile.php?id=5" >Вася</a> </td> <td> <a href="mailto:вася@mail.ru" >написать</a> </td> </tr> <tr> <td> <a href="profile.php?id=3" >Даша</a> </td> <td> <a href="mailto:даша@mail.ru" >написать</a> </td> </tr> <tr> <td> <a href="profile.php?id=91" >Саша</a> </td> <td> <a href="mailto:саша@mail.ru" >написать</a> </td> </tr> </table>