[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Моя CMS
Shkiper
Всем привет!!! Сделал CMS. Для начала прошу ознакомиться вот с этой статьей!
А скачать CMS можно на том же сайте в меню.



Спустя 6 минут, 4 секунды (24.03.2012 - 15:04) ADiel написал(а):
ucoz + depositfiles и своя CMS. Уже что то не вяжется

Спустя 1 минута, 2 секунды (24.03.2012 - 15:05) ADiel написал(а):
Цитата
Конечно если посмотреть на неё глазами опытного программиста, то можно сказать,что она не очень то и защищена от хакерских атак и т.д


true cms =)))

Не рано думать о платной cms? Почему я должен тратить деньги, если есть куча бесплатного, более защищенного с более богатым функционалом?

Спустя 11 секунд (24.03.2012 - 15:05) Shkiper написал(а):
Чтоб с хостом не заморачиваться сделал на UCOZ

Спустя 2 минуты, 36 секунд (24.03.2012 - 15:08) johniek_comp написал(а):
Deert
так ты выложи её куда-нибудь, давно не ломал ничего smile.gif

Спустя 46 секунд (24.03.2012 - 15:09) Shkiper написал(а):
На локале поламайй!!!

Спустя 1 минута, 50 секунд (24.03.2012 - 15:11) ADiel написал(а):
Посмотрел код. Кое-где аккуратно.
Нет комментариев, разметка уг...
В этой cms хорошо только то, что она работает (у себя не пробовал), но написание своих велосипедов - это хороший способ получить опыт в разработке сайтов. Продолжай. Пусть для себя, но это не пустая трата времени.


Разделяй логику и темплейты. Почитай про MVC. Если нужно, и ООП. На ООП куда удобнее разрабатывать подобные вещи

Спустя 1 минута, 18 секунд (24.03.2012 - 15:12) Shkiper написал(а):
Эта самая грубая Demo версия в следующей по исправляю ошибки и т.д.

Спустя 4 минуты, 24 секунды (24.03.2012 - 15:16) T1grOK написал(а):
То что не используется одна точка входа еще ладно.
Похоже была попытка вынести шаблоны отдельно, но по каким-то причинам(наверное встречный ветер помешал) верстка все равно "просочилась" в скрипты обработки.

Где логика?
 
exit();
break;

Спустя 1 минута, 51 секунда (24.03.2012 - 15:18) Shkiper написал(а):
Приведи мне пример ЛОГИКИ!!!

Спустя 36 секунд (24.03.2012 - 15:19) johniek_comp написал(а):
1. Раздели вид и логику отдельно.
2. Забудь про классы.
3. Перестань копи-пастить.
4. Выложи её в свет.

Спустя 9 минут, 28 секунд (24.03.2012 - 15:28) T1grOK написал(а):
Цитата (Deert @ 24.03.2012 - 12:18)
Приведи мне пример ЛОГИКИ!!!


switch($_GET['do'])
{

case "exit":
include './system/modules/registration/exit.php';
exit();
break;

}

Смысл выходить из скрипта, а потом пытаться выйти из логической конструкции. С ходу в глаза бросилось. Разбросанные exit это ужас. Лучше строить так, чтобы не пихать куда попало выходы.

Спустя 51 секунда (24.03.2012 - 15:29) Shkiper написал(а):
Проанализирую твое мнение. biggrin.gif

Спустя 3 минуты, 11 секунд (24.03.2012 - 15:32) Shkiper написал(а):
Цитата (T1grOK @ 24.03.2012 - 12:28)
Цитата (Deert @ 24.03.2012 - 12:18)
Приведи мне пример ЛОГИКИ!!!


switch($_GET['do'])
{

case "exit":
include './system/modules/registration/exit.php';
exit();
break;

}

Разбросанные exit это ужас.

Если не поставить выполнение сценариев то на странице выведиться сначала подключаемый модуль в конструкции stitch case а потом запланированый текст странци. Изучи структуру CMS и поймешь!!!

Спустя 8 минут, 7 секунд (24.03.2012 - 15:40) johniek_comp написал(а):
только так надо
$do = isset($_GET['go']) ? $_GET['go'] : null;
if(is_null($do) or die();
switch($do)
{

case "exit":
include './system/modules/registration/exit.php';
exit();
break;
}

Спустя 1 минута, 29 секунд (24.03.2012 - 15:42) T1grOK написал(а):
johniek_comp - не успел за тобой. А вообще "рвать" скрипты выходами на мой взгляд неправильно. Запутаться можно.

Спустя 18 секунд (24.03.2012 - 15:42) TMake написал(а):
Цитата (Deert @ 24.03.2012 - 16:32)
Изучи структуру CMS и поймешь!!!

ты наверное сам не понял
зачем после exit ставить break??? для кого это???

Спустя 1 минута, 58 секунд (24.03.2012 - 15:44) TMake написал(а):
Цитата (johniek_comp @ 24.03.2012 - 16:40)
$do = isset($_GET['go']) ? $_GET['go'] : null;
if(is_null($do) or die();

это быдлокод biggrin.gif

Спустя 41 секунда (24.03.2012 - 15:45) Президент! написал(а):
Скажи пожалуйста, а зачем мне надо так долго ждать это твое творение через этот сервис? depositfiles. я его терпеть не могу как только его вижу сразу убежать хочу !!
и почему-бы не показать как он в действии работает ? зачем мне его качать ТАК ДОЛГО потом СТАВИТЬ ДОЛГО потом ТЕСТИТЬ долго и ТД,

Спустя 22 секунды (24.03.2012 - 15:45) johniek_comp написал(а):
stepan
это не for, а switch, так как бы по умолчанию он нужен

Спустя 1 минута (24.03.2012 - 15:46) johniek_comp написал(а):
stepan
ты свой статус почитай biggrin.gif biggrin.gif biggrin.gif

Спустя 56 секунд (24.03.2012 - 15:47) T1grOK написал(а):
Президент! - не ну тут ты немного не прав. Мы же программеры, нас хлебом не корми лишь бы чужой код покритиковать. smile.gif

Спустя 1 минута, 55 секунд (24.03.2012 - 15:49) TMake написал(а):
Цитата (johniek_comp @ 24.03.2012 - 16:45)
это не for, а switch, так как бы по умолчанию он нужен

зачем проверять на isset а затем проверять на null, и еще на количество скобок глянь

Спустя 1 минута, 6 секунд (24.03.2012 - 15:50) TMake написал(а):
Цитата (johniek_comp @ 24.03.2012 - 16:46)
ты свой статус почитай

я свой статус хотя бы могу опровдать, в отличии PHP программиста в 401 бал laugh.gif

Спустя 1 минута, 15 секунд (24.03.2012 - 15:51) T1grOK написал(а):
Цитата (stepan @ 24.03.2012 - 12:49)
Цитата (johniek_comp @ 24.03.2012 - 16:45)
это не for, а switch, так как бы по умолчанию он нужен

зачем проверять на isset а затем проверять на null, и еще на количество скобок глянь

Дополнительный уровень обороны biggrin.gif Думаю автор темы уже понял, что CMS еще пилить и пилить.

Спустя 4 минуты, 1 секунда (24.03.2012 - 15:55) Shkiper написал(а):
T1grOK +1;

Президент! я же не заставляю тебя качаать, это только для тех кто испытывает интерес и желание мне помочь исправить ошибки

Спустя 36 секунд (24.03.2012 - 15:56) TMake написал(а):
Автору - в следующий раз выкладывай на бесплатный хост свое творение что бы можно было посмотреть в работе. (Запускать у себя на локале ради интереса - лень мешает)
А так свой велосипед тебе плюс дает wink.gif

Спустя 3 минуты, 37 секунд (24.03.2012 - 16:00) johniek_comp написал(а):
stepan

а для гибкости!

$do = isset($_GET['go']) ? $_GET['go'] : null;
if(is_null($do)) header('Location: /404.html');


а в твоем статусе я и не сомневался :lol:

а вообще можно даже так
$do = isset($_GET['go']) ? $_GET['go'] : header('Location: /404.html');

Спустя 8 минут, 11 секунд (24.03.2012 - 16:08) Президент! написал(а):
Цитата (johniek_comp @ 24.03.2012 - 15:40)
только так надо
$do = isset($_GET['go']) ? $_GET['go'] : null;
if(is_null($do) or die();
switch($do)
{
   
    case "exit":
    include './system/modules/registration/exit.php';
    exit();
    break;
}

ну если ТАК НАДО!! вот и надо обосновать почему ТАК НАДО!!
открыть мануал и показать что там написано , потом написать коменты для полной ясности что и для чего
ТакСС дык для чего служит ЭТО exit();
неси сюда это определение Вот и будет ТИП-ТОП!!

для ТС это хорошо что ты показываешь , самое место и самое время
но показывать надо так чтоб это было удобней КОМУ ТЫ ЭТО КАЖЕШЬ!!

Спустя 20 минут, 48 секунд (24.03.2012 - 16:29) TMake написал(а):
Цитата (johniek_comp @ 24.03.2012 - 17:00)
а в твоем статусе я и не сомневался

я тебе уже предлагал соревнования устроить, так что поздно прыгать tongue.gif

Цитата (johniek_comp @ 24.03.2012 - 17:00)
а вообще можно даже так
$do = isset($_GET['go']) ? $_GET['go'] : header('Location: /404.html');

и опять слажал, не факт того что до этого уже что то выводилось и чревата появления ошибки wink.gif

Спустя 25 минут, 15 секунд (24.03.2012 - 16:54) Nikitian написал(а):
Прицепились к мелочам, значит больше не к чему smile.gif ТС, молодец, потому что творец. Он сделал что-то и готов принимать критику.
Из всего, что написали против его кода могу лишь сказать, что система шаблонов крайне неудобно реализована. Ковырять весь код в поисках ошмётков разметки для натягивания нового дизайна - это крайне неудобно. Подключите какой-нибудь smarty - уровень входа низкий, распространённость высокая.
Ну и платным он может стать только в случае исполнения заказа на этом движке.

Спустя 24 минуты, 12 секунд (24.03.2012 - 17:18) redreem написал(а):
да-да smile.gif

Цитата
...создатель... ... Божко ...


главное пиар smile.gif остальное купят лохи smile.gif

Спустя 16 минут, 35 секунд (24.03.2012 - 17:35) Shkiper написал(а):
НУ ведь это только НАЧАЛО >>> Для 14 летнего программиста это норм.

Спустя 5 минут, 30 секунд (24.03.2012 - 17:40) Президент! написал(а):
Nikitian как раз об этом и речь,
чтоб показывал и общими усилиями подправляли, а то так с разу с порога купите потом смотрите а то будет поздно !!
Тут не место для разводилова, не тот уровень вести всякого рода пиаршину ЗА и ПРОТИВ
место чтоб разобраться и поправиться , получить отклик ну и принять к сведению, правда не всегда это корректно выглядит , ну чтож БЫВАЮТ перегибы и на местах, я попытался ТС не хаять а просто чтоб это было понятно, вот посмотрият, сделают, кто пожелает пометки и ТС поправит да и нам польза, пока чужой код правиться в своем найдутся подобные не правильные места!!

Deert тебе удачи в начинании !!

Спустя 32 минуты, 26 секунд (24.03.2012 - 18:13) Nikitian написал(а):
Цитата (redreem @ 24.03.2012 - 17:18)
да-да smile.gif

Цитата
...создатель... ... Божко ...


главное пиар smile.gif остальное купят лохи smile.gif

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

Спустя 1 час, 26 минут, 44 секунды (24.03.2012 - 19:39) Игорь_Vasinsky написал(а):
А это что за фокус?

Цитата
$do = isset($_GET['go']) ? $_GET['go'] : header('Location: /404.html');


была жида переменная, проверялась и использовалась в коде, пришёл джонек и всё...


ТС .. ну так не честно... установи на хост...

Спустя 35 секунд (24.03.2012 - 19:40) alex12060 написал(а):
Для 14 лет это очень круто) Я бы не смог такое написать в 14 лет.

Ну а по сути:

Свернутый текст

Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pstrnav\">";
echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$post_nav.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
echo "</div>";


Ужас тихий. Столько лишних переменных, прям беда.

$login = $tem->login();
$search = $tem->search();
$arhiv = $tem->arhive();
$popular_news = $tem->popilar_news();
$poll = $tem->poll();]


А, то есть, если я хочу добавить новую страницу (категорию, не знаю как еще обозвать), я должен залезть в класс и написать самостоятельно? Ну, я то могу, а вот другие?


mysql_fetch_array()


Тысячу раз говорили про эту функцию, ну а все пишут люди и пишут.


$result = mysql_query("SELECT `id`,`title`,`description`,`date`,`author`,`view`,`rating`,`q_vote` FROM `data` WHERE date='$_GET[date]' AND public='1'",$db);


Трололо, я тут вижу SQL Inj.

Цитата

Вы не указали индификатор файла который вы хотите сказать или он пуст!!!


Вот меня бесит, когда ставят тысячу знаков восклицания. И чтобы исправить это, я опять же должен лезть во внутрь? Опять беда.


$login = stripslashes($login);
$login = htmlspecialchars($login);

$password = stripslashes($password);
$password = htmlspecialchars($password);


А если у меня пароль " gwrW22'\\Sccw! " ? Я в жизни не попаду на твой сайт из-за этой проверки и преобразования.


//ВНИМАНИЕ!!! ДЕЛАЙТЕ ЭТО НА ВАШЕ УСМОТРЕНИЕ, ТАК КАК ДАННЫЕ ХРАНЯТСЯ В КУКАХ БЕЗ ШИФРОВКИ


if (isset($_POST['autovhod'])){
//Если пользователь хочет входить на сайт автоматически
setcookie("auto", "yes", time()+9999999);
setcookie("login", $_POST["login"], time()+9999999);
setcookie("password", $_POST["password"], time()+9999999);
setcookie("id", $myrow['id'], time()+9999999);
setcookie("group", $myrow2['name'], time()+9999999);
setcookie("id_group", $myrow2['id'], time()+9999999);
setcookie("color", $myrow2['color'], time()+9999999);

}


Без комментариев. Тут полный хаос. И XSS, XSRF, SQL Inj и многое дргое. Опять беда.


Короче, тут полный треш. Все налеплено в кучу, полная фигня, везде ошибки и дырки. Это даже сырой версией назвать тяжело. Увы, автор, но это правда. Тут работы непочатый край.

Дерзай!

Спустя 1 минута, 22 секунды (24.03.2012 - 19:41) caballero написал(а):
Цитата
     Покупают не лохи, а покупатели и клиенты. К ним следует относиться уважительно - это этика деловых взаимоотношений.

Никто не станет покупать неизвестно кем и неизвестно как написанную CMS которую даже скачать нельзя по человечески .
Надо написать что то совсем выдающееся чтобы при наличии готовых бесплатных решений с open source и комюнити кто то рискнул не столько деньгами сколько своим проектом написаном на неведомом решении с такими же непредсказуемыми последствиями.

Спустя 26 минут, 11 секунд (24.03.2012 - 20:07) Shkiper написал(а):
Цитата
Никто не станет покупать неизвестно кем и неизвестно как написанную CMS которую даже скачать нельзя по человечески .

Я переделал ссылку теперь скачка идет напрямую


Цитата
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pstrnav\">";
echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$post_nav.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
echo "</div>";


Код брал на softtime.ru говорят там профессионально пишут скрипты, я от-туда и взял.



Цитата
$login = $tem->login();
$search = $tem->search();
$arhiv = $tem->arhive();
$popular_news = $tem->popilar_news();
$poll = $tem->poll();]


Это показывает не новые страницы и т.д., а модуль, например если прописать в шаблоне $search то на всех страницах в том месте где прописали этот код, там будет форма для поиска.

Цитата
mysql_fetch_array()


Я знаю что эта функция на сайте не уместна, я начал её писать когда изучал попова, а потом начал писать mysql_fetch_assoc, а те которые с поповым писал не исправил.

Цитата
$result = mysql_query("SELECT `id`,`title`,`description`,`date`,`author`,`view`,`rating`,`q_vote` FROM `data` WHERE date='$_GET[date]' AND public='1'",$db);


SQL inj в этой CMS почти нет, они будут позднее

Цитата
Вы не указали индификатор файла который вы хотите сказать или он пуст!!!

Исправлю

Цитата
$login = stripslashes($login);
$login = htmlspecialchars($login);

$password = stripslashes($password);
$password = htmlspecialchars($password);

Уберу функцию stripslashes


Цитата
if (isset($_POST['autovhod'])){
//Если пользователь хочет входить на сайт автоматически
setcookie("auto", "yes", time()+9999999);
setcookie("login", $_POST["login"], time()+9999999);
setcookie("password", $_POST["password"], time()+9999999);
setcookie("id", $myrow['id'], time()+9999999);
setcookie("group", $myrow2['name'], time()+9999999);
setcookie("id_group", $myrow2['id'], time()+9999999);
setcookie("color", $myrow2['color'], time()+9999999);

}



НУ а этого вообще не будет, я все сделаю на сессиях!!!

Спустя 1 минута, 17 секунд (24.03.2012 - 20:09) alex12060 написал(а):
Цитата
SQL inj в этой CMS почти нет, они будут позднее


biggrin.gif laugh.gif biggrin.gif laugh.gif

Спустя 2 минуты, 30 секунд (24.03.2012 - 20:11) alex12060 написал(а):
Цитата

Уберу функцию stripslashes


Это исправит часть ошибки. Пароль то все равно будет после фильтрации таким:


gwrW22& amp;\\Sccw! (без пробела)

вместо

gwrW22'\\Sccw!


Цитата
НУ а этого вообще не будет, я все сделаю на сессиях!!!


Один фиг у тебя сессии не фильтруются. Попробуй. Хотя это не правильно, все делать на сессиях.

Спустя 2 минуты, 6 секунд (24.03.2012 - 20:13) Shkiper написал(а):
Просьба тем, кому не сложно, опишите все недочеты CMS (и если немного опишите их решение) в гостевой на сайте!!!

Спустя 1 минута, 8 секунд (24.03.2012 - 20:14) Shkiper написал(а):
Цитата (alex12060 @ 24.03.2012 - 17:11)
Цитата

Уберу функцию stripslashes


Это исправит часть ошибки. Пароль то все равно будет после фильтрации таким:


gwrW22& amp;\\Sccw! (без пробела)

вместо

gwrW22'\\Sccw!


Цитата
НУ а этого вообще не будет, я все сделаю на сессиях!!!


Один фиг у тебя сессии не фильтруются. Попробуй. Хотя это не правильно, все делать на сессиях.

А что ты посоветуешь????? Хотяб механизм(структуру) покажи

Спустя 9 минут, 4 секунды (24.03.2012 - 20:24) alex12060 написал(а):
Deert

Пароль никогда не фильтруется, так как он шифруется, а шифр состоит из символов [a-zA-z0-9], так что, это бессмысленно.

CMS делится на 3 части - Вид, Модель, Контроллер (MVC). Почитай об разделении логики от представления, будет тебе счастье.

На сессиях гемор, ибо, если CMS пускать в бой, где больше 20К человек, будут теряться сессии, часто слетать, да и не все хостинги позволяют сменить время жизни (не знаю почему).

А кукам хоть бы хны. Тут уж все просто - шифруешь пароль, а логин оставляешь. Все внешние данные фильтруешь (Даже хеш пароля) и все, будет тебе счастье.

А если будет песня, типа "своруют куки", то у тебя есть 2 выхода:

- Положиться не пользователя (не верный)
- Шифровать куки по хитрому, чтобы, если своруют, кука была не работоспособной. Тут уже тебе думать, как. Да и гугл в помощь )

Спустя 51 минута, 27 секунд (24.03.2012 - 21:15) Игорь_Vasinsky написал(а):
Цитата
CMS делится на 3 части - Вид, Модель, Контроллер (MVC).


это кто заявил?

MVC это всего один из паттернов, а придерживаться его или нет - решает разработчик.

Плюсы у данного паттерна есть (опять же - у здешних обитателей как и у меня своё восприятие данного паттерна) - но это не говорит о том что если сел писать систему управления сайтом - нужно именно его применять.

Спустя 3 минуты, 35 секунд (24.03.2012 - 21:19) Shkiper написал(а):
alex12060 я сделаю так. При входе на каждую страницу будет производиться проверка. Вывести id группы из БД у данного пользователя и сравнить его с id в куках, если подделал то фиг ему бан навсегда пусть гуляет!!
Игорь_Vasinsky MVC не по душе!!!

Спустя 1 минута, 37 секунд (24.03.2012 - 21:20) Игорь_Vasinsky написал(а):
Цитата
Игорь_Vasinsky MVC не по душе!!!


ты просто не понял как его применять.

Спустя 10 минут, 28 секунд (24.03.2012 - 21:31) Президент! написал(а):
Deert ну начнем все по порядку примерно так ))
ты собрался продавать (эт примерно) а показываешь такие штуки как это пока так побудет , это тут пока сойдет, и мне это пока не интересно,,
скажи а почему не интересното? или не знаешь или уже знаешь и отбросил за ненадобностью
напрашивается ответ что пока не знаешь то и отбрасываешь,,,,,

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

второй вопрос забудь про ЮКОЗ как клас-сс забудь ЮКОЗ сделан для домохозяек и прочих кто не собирается этим работать, а так на вскидку пойдет, по случаю находим хостин и начинаем на нем свою бурную деятельность тебе два ГИГА ХВАТИТ ?? возим тут и проехали поехали


Спустя 3 минуты, 36 секунд (24.03.2012 - 21:34) Президент! написал(а):
теперь про злосчатную !MVC! чтоб я так жил,, или ты это усваиваешь или пару лет отказываешься потом пройдет время вернешься к этой штукети все начнешь заново учить
так зачем, чесать затылок задней левой ногой, если есть левая рука ЭТ тож пример wink.gif

Спустя 11 часов, 31 минута, 33 секунды (25.03.2012 - 09:06) johniek_comp написал(а):
вот вам MVC своими так сказать руками :) может подтолкнет кого на мысль
.htaccess
Свернутый текст
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

index.php
Свернутый текст
<?php
// стартуем сессию
session_start();
// обработчик времени ($time_end = microtime(true); echo $time - $time_end;)
$time = microtime(true);
// создаем константу для того что бы файлы ядра нельзя было вызвать напрямую
define(MEX, '');
// максимальный уровень ошибок
error_reporting(E_ALL);
// автозагрузчик классов
function __autoload($class_name) {
$file = $_SERVER['DOCUMENT_ROOT'] . '/classes/'.$class_name.'.php';

if ( file_exists($file) ) include_once($file);
}

// настроики
setting::mysql();
// струткура
framework::run();
// управляем роутингом, и подключаем нужный класс и метод исходя с url
route::delegate();
?>

setting.php (как пример)
Свернутый текст
<?php

class
setting
{
public static function run()
{
// mysql_connect('','','');
// mysql_select_db('');

}

}


engine.php
Свернутый текст
<?php
class
engine {
// 404
public static function away() {
header("HTTP/1.0 404 Not Found");
exit('404 Not Found');
}

}

?>

route.php (самый главный!!!)
Свернутый текст
<?php 
class
route
{
public static function delegate()
{
// загружаем ?index.php?route=

$route = empty($_GET['route']) ? '' : $_GET['route'];

// разбиваем на массив через /

$exp = explode('/', $route);

// если адресс пуст, значить запускаем главную страницу

if($exp[0] == '')
{
$file = $_SERVER['DOCUMENT_ROOT'] .'/controllers/controller_index.php';
}
else
{
// заносим путь к классу (контроллеру)
$file = $_SERVER['DOCUMENT_ROOT'] .'/controllers/controller_'.$exp[0].'.php';
}
if(!file_exists($file))
{
engine :: away(); // не правильный адрес - 404
}
// подключаем файл

include_once $file;

/* если пуст пусть к классу или класс в подключенном файле не найден
* то присваиваем $class = index, если найден то $exp[0]
*/

$class = (empty($exp[0]) or !class_exists($exp[0])) ? 'class_index' : $exp[0];

// создаем экземпляр класса
$controller = new $class;


/* аналогичным способом подключаем выбраный метод
* в случае если метод не найдет url = site.com/class
* то вызываем метод index выбраного класса, или метод index класса index
* url = site.com/class/method
*/

$method = (empty($exp[1]) or !method_exists($controller, $exp[1])) ? 'index' : $exp[1];

// вызываем полученый метод, получаем результат

$controller -> $method();
}

}

?>


а теперь пишем контроллер controller_user.php
это означает что при наборе site.ru/user будет запускаться именно он и его метод index

<?php

class
user {
public function index(){ // site.com/user or site.com/user/index
echo 'юзер';
}
public function login(){ // site.com/user/login
echo 'логин';
}
public function register(){ // site.com/user/register
echo 'регистрация';
}
}



возможно сегодня ещё прикручу класс отвечающий за подключение шаблона по типу как в кохане
View::Factory('user/index');

и класс для быстрой валидации, и безопасных запросов в БД. буду обновлять пост

класс вида classes/view.php
<?php
if( ! defined('MEX')) exit("Нет доступа");
class View
{
public static function Factory($view, $data)
{
$file = $_SERVER['DOCUMENT_ROOT'] .'/views/view_'.$view.'.php';
if(!file_exists($file))
{
engine :: NotFound();
}
else
{
extract($data);
include_once $file;
}
}
}

NotFound();
// переадресация на статичную страницу
public static function NotFound(){
echo '<script>window.location.href = "/404.html"</script>';
}

добавил константу, теперь к классу можно обратится только вызвав его через index.php
теперь во всех контроллерах сделал возможность получить id страницы, при этом чуток передал само ядро, теперь классы можно наследовать друг от друга
<?php
if( ! defined('MEX')) exit("Нет доступа");

class user extends route
{
public function index()
{
$data = array();
if(isset($_POST['data']))
{
$data['result'] = $_POST['data'];
}
View::Factory('user', $data);
}
public function login()
{
if(parent::$id == 123) // site.com/user/login/123
echo 'супер!';
}
public function register()
{
echo 'регистрация';
}
}


и сам вид view_user.php
<form action="" method="POST" />
<
input type="text" name="data"><br>
<
input type="submit">
</
form><br>
<?php echo isset($result) ? $result : null; ?>

Спустя 8 минут, 23 секунды (25.03.2012 - 09:14) Игорь_Vasinsky написал(а):
johniek_comp
ну вот к чему понты? я чёт в твоём посте вообще что то о MVC не унюхал, дал бы линк на irbis-team.com - куда полезней было.

Спустя 1 минута, 23 секунды (25.03.2012 - 09:16) Shkiper написал(а):
johniek_comp постараюсь что-то извлечь из твоего урока. Насколько мне известно из файла .htaccess, то сайт будет на ЧПУ????

Спустя 2 минуты, 36 секунд (25.03.2012 - 09:18) johniek_comp написал(а):
Deert
да, адреса будут такие site.com/news/view/34 например

Спустя 20 секунд (25.03.2012 - 09:19) ADiel написал(а):
Цитата (Deert @ 25.03.2012 - 06:16)
johniek_comp постараюсь что-то извлечь из твоего урока. Насколько мне известно из файла .htaccess, то сайт будет на ЧПУ????

public function index(){ // site.com/user or site.com/user/index
echo 'юзер';
}


Код тоже можно читать.
И комментарии можно.
И пишется код за 2 минуты.
И свой нужно писать.
И читать больше.
И больше практики.
Э как меня понесло...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.