forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PHP / MySQL (http://forum.boolean.name/forumdisplay.php?f=135)
-   -   Обработчик CMS в одном файле (http://forum.boolean.name/showthread.php?t=19128)

mtaracing 30.04.2014 00:22

Обработчик CMS в одном файле
 
Здравствуйте, вот начал писать свой движок для сайта, а за одно о глобально практиковаться. Назрел вопрос, об быстродействии (разумеется пока проблем с этим нет).

Я планирую весь код написать в одном файле, на пример engine.php - здесь будут и обработки разных форм, регистрации и т.д, и прочие функции которые что-то выводят на сайте. Собственно вопрос? Плохо ли это? Или лучше разбить всё по частям, например для регистрации свой файл обработчик (register.php), для логина свой (login.php) и т.д.

Естественно engine.php будет подключен к каждой странице сайта.
нашел в интернете пару тем, одни пишут что разницы нет, другие пишут что лучше в одном, третье что лучше разбить на части, так к решению и не пришел. Жду ответов, заранее спасибо!

Randomize 30.04.2014 00:35

Ответ: Обработчик CMS в одном файле
 
Для начала
http://www.phptherightway.com/

mtaracing 30.04.2014 00:56

Ответ: Обработчик CMS в одном файле
 
Цитата:

Сообщение от Randomize (Сообщение 279708)
Для начала
http://www.phptherightway.com/

Спасибо конечно, но мне не нужны пока эти заумные горы текста. Я просто хочу получить ответ пот типу да\нет.

Randomize 30.04.2014 01:01

Ответ: Обработчик CMS в одном файле
 
Цитата:

Сообщение от mtaracing (Сообщение 279712)
Спасибо конечно, но мне не нужны пока эти заумные горы текста. Я просто хочу получить ответ пот типу да\нет.

1 точка входа; Всё через index.php.
Ваще всё. htaccess, Mod rewrite

mtaracing 30.04.2014 01:05

Ответ: Обработчик CMS в одном файле
 
не понял вас.

Nikich 30.04.2014 01:14

Ответ: Обработчик CMS в одном файле
 
Он про то, что
Цитата:

каждой страницы сайта
не будет. Все работает только через "index.php", к которому ты и подключишь что тебе там нужно.

den 30.04.2014 01:35

Ответ: Обработчик CMS в одном файле
 
Он про то, что не надо говнокодить, и писать всё в одном файле.

mtaracing 30.04.2014 10:32

Ответ: Обработчик CMS в одном файле
 
Цитата:

Сообщение от Nikich (Сообщение 279717)
Он про то, что

не будет. Все работает только через "index.php", к которому ты и подключишь что тебе там нужно.

Но будут же еще и другие страницы, на которые нужно будет вывести например меню и т.д.

mtaracing 30.04.2014 10:33

Ответ: Обработчик CMS в одном файле
 
Цитата:

Сообщение от Den (Сообщение 279718)
Он про то, что не надо говнокодить, и писать всё в одном файле.

И причем здесь гавно код. Понятно всё...

Nikich 30.04.2014 15:47

Ответ: Обработчик CMS в одном файле
 
Цитата:

Сообщение от mtaracing (Сообщение 279728)
Но будут же еще и другие страницы, на которые нужно будет вывести например меню и т.д.

И что?
Цитата:

htaccess, Mod rewrite
в помощь. Хоть немного бы сам разобрался, благо открытых CMS сейчас море.

mtaracing 30.04.2014 20:25

Ответ: Обработчик CMS в одном файле
 
Цитата:

Сообщение от Nikich (Сообщение 279745)
И что?

в помощь. Хоть немного бы сам разобрался, благо открытых CMS сейчас море.

Я немного разобрался. В смысле и что? Допустим у меня есть 2 страницы, 1.php, 2. php, на обе нужно вывести меню. Выводится оно при помощи функции из файла file.php, значит нужно будет к каждому файлу инклудить file.php.

den 30.04.2014 20:56

Ответ: Обработчик CMS в одном файле
 
Тебе нужен шаблонизатор.
Вот для начала:
http://www.phpinfo.su/articles/pract...ony_v_php.html

pax 01.05.2014 03:49

Ответ: Обработчик CMS в одном файле
 
Цитата:

Сообщение от mtaracing (Сообщение 279753)
Я немного разобрался. В смысле и что? Допустим у меня есть 2 страницы, 1.php, 2. php, на обе нужно вывести меню. Выводится оно при помощи функции из файла file.php, значит нужно будет к каждому файлу инклудить file.php.

htaccess и mod Rewrite помогут все запросы транслировать в один файл index.php передавая в него адрес по которому перешел пользователь и параметры. index.php потом сам решает что вывести.

http://habrahabr.ru/post/140693/

moka 01.05.2014 03:55

Ответ: Обработчик CMS в одном файле
 
Веб сервером перенаправляешь все запросы на один index.php, преобразовывая путь в аргументы, далее тебе router - нормальная библиотека для нахождения путей исходя из числа и типа аргументов.
Далее router'ом направляться будет на отдельный файл/контроллер, "направляться" имеется ввиду он будет include'иться, а в нём уже include'ишь только то что нужно.
Всё писать в одном файле - лажа, это нифига не удобно, тупо и нифига не "управляемо" с точки зрения технического дизайна.

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

Так например народ приходит и сразу MVC или его подобных выродков, везде суёт, и нифига не понимает что как и почему, просто потому что ему "сказали так".

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

Или ваще node.js + express + hogan бери, лол.

Randomize 01.05.2014 14:42

Ответ: Обработчик CMS в одном файле
 
Цитата:

Сообщение от moka (Сообщение 279792)
Так например народ приходит и сразу MVC или его подобных выродков

Что плохого в отделении логики от представления?

mtaracing 01.05.2014 22:16

Ответ: Обработчик CMS в одном файле
 
Буду разбираться... Я вот еще что хотел спросить, вот например взять cms юкоза, там к примеру в каталоге статей на страницы с материалом и описанием ссылки такого типа:

сайт.ру/publ/12-1-0-19
сайт.ру/publ/12-1-0-22
сайт.ру/publ/12-1-0-26
сайт.ру/publ/12-1-0-27
сайт.ру/publ/12-1-0-29
сайт.ру/publ/12-1-0-88

Эти страницы формируется через get запрос в одном файле publ.php? Или у каждого из адресов есть отдельная страница (файл .php или .html), судя потому как индексирует поисковик то наверное да. Или я ошибаюсь?

moka 02.05.2014 02:15

Цитата:

Сообщение от Randomize (Сообщение 279800)
Что плохого в отделении логики от представления?

Тем что современный подход и простота на основе micro-services позволяет создавать боле масштабируемые системы с в разы лучше производительностью.

MVC часто является сильным блоком от простоты, когда тебе тупо нужно обозначить route и там же ответить. Не все запросы требуют загрузку из бд, не все требуют View'а вообще. Я уже не говорю о взять любую MVC модель, и перевезти на single-page основу, будет куча проблем.
Придерживаясь простоты, всё что нужно - это очень простая самодельная ORM для только валидации, и возможность обозначения route'ов и тамже их контроллеров. - Всё что нужно для полного счастья.

Любая система на основе MVC доказала себя как enterprise и те кому не пофиг, стараются с этим не связываться. Взять например Wordpress который не следует MVC, а является гибритом - именно то к чему приходит любой пользователь MVC с долгой жизнью проекта. И значит вот у них из Core Developer команды уходят люди, постоянно, т.к. это убожество с которым невозможно им работать. Один из явных примеров: Ghost, где ребята хотели всего-то сделать другой WYSIWYG редактор, с Markdown'ом, и обосрались, в итоге нафиг ушли из компании и сделали за не продолжительный срок в разы мощнее блог движёк чем Wordpress. Чище и проще.

Всякие MVC, PAC, MVP, MVVM, и чё там ещё, это как "рецепт" для тех кто своей головой по задачи не думает. В команде хороших ребят, есть явные бизнес и тех. задачи, сядьте, обсудите и своими мозгами думая, используя примитив и простоту делайте то что нужно, не заморачиваясь системами паттернов и правилами "как нужно делать приложения".

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

Цитата:

Сообщение от mtaracing (Сообщение 279807)
Буду разбираться... Я вот еще что хотел спросить, вот например взять cms юкоза, там к примеру в каталоге статей на страницы с материалом и описанием ссылки такого типа:

сайт.ру/publ/12-1-0-19
сайт.ру/publ/12-1-0-22
сайт.ру/publ/12-1-0-26
сайт.ру/publ/12-1-0-27
сайт.ру/publ/12-1-0-29
сайт.ру/publ/12-1-0-88

Эти страницы формируется через get запрос в одном файле publ.php? Или у каждого из адресов есть отдельная страница (файл .php или .html), судя потому как индексирует поисковик то наверное да. Или я ошибаюсь?

Всё в одном файле, и не publ.php скорее всего.
Кури "pretty url".

Randomize 02.05.2014 05:20

Ответ: Обработчик CMS в одном файле
 
moka, красиво написал, прям вау. (не сарказм)

Nex 02.05.2014 17:25

Ответ: Обработчик CMS в одном файле
 
Цитата:

Сообщение от mtaracing (Сообщение 279807)
Буду разбираться... Я вот еще что хотел спросить, вот например взять cms юкоза, там к примеру в каталоге статей на страницы с материалом и описанием ссылки такого типа:

сайт.ру/publ/12-1-0-19
сайт.ру/publ/12-1-0-22
сайт.ру/publ/12-1-0-26
сайт.ру/publ/12-1-0-27
сайт.ру/publ/12-1-0-29
сайт.ру/publ/12-1-0-88

Эти страницы формируется через get запрос в одном файле publ.php? Или у каждого из адресов есть отдельная страница (файл .php или .html), судя потому как индексирует поисковик то наверное да. Или я ошибаюсь?

publ это скорее всего какой нибудь раздел для статей.
если бы это был файл через который генерируется, то скорее всего было бы так.
Цитата:

сайт.ру/publ.php?12-1-0-19
сайт.ру/publ.php?12-1-0-22
сайт.ру/publ.php?12-1-0-26
сайт.ру/publ.php?12-1-0-27
сайт.ру/publ.php?12-1-0-29
сайт.ру/publ.php?12-1-0-88
хотя возможно я ошибаюсь. :)

moka 03.05.2014 04:29

Ответ: Обработчик CMS в одном файле
 
Используя rewrite функционал в практически любом нормальном веб сервере (apache, nginx, и т.п.) можно модифицировать любой запрос (url) до того как он перенаправится на обработку скриптом (php в данном случае).
Одна из техни Pretty URL, когда все запросы перенаправляют на один файл index.php, и уже в index.php далее парсят всю строку запроса в аргументы, и исходя из них подбирается подходящий route файл и дальше, по цепи логики.

Короче, не нужно куча файлов, и не нужно никаких директорий, это всего абстрактные записи - то как выглядит url не имеет ничего общего со структурой директорий/папок.
А лишь служит данными по которым фильтруются данные в базе, и всё по одному файлу шаблону выводиться как ответ.

Бля, нихера не "короче" вышло. В общем хз как короче - иди в общем кодить, и меньше вопросы задавай, больше экспериментируй - только так и научишься. В интернетах меньше пользы чем в практике и собственных ошибках/успехах.
Такого рода как у тебя вопросы, не возникают у того кто хоть чуток нормально поигрался с php, apache и т.п. следственно, не трать чужое время - иди и программируй.

mtaracing 05.05.2014 00:07

Ответ: Обработчик CMS в одном файле
 
Начал писать код, через единую точку входа, вот index:

Код:

<?php

require_once("config.php");
require_once("classes/ACore.php");

if ($_GET['option']) {
$class = trim(strip_tags($_GET['option']));
} else {
$class = 'main';
}


if (file_exists("classes/".$class.".php")) {
include("classes/".$class.".php");


if (class_exists($class)) {
$obj = new $class;
$obj->get_body();

} else {
exit ();

}


} else {
exit();
}



?>

вот ACore

Код:

<?php
abstract class ACore {




protected function get_header() {
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<link type="text/css" rel="StyleSheet" href="/style.css">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="">
<title></title>
</head>

<body>
123
</body>
</html>
';


}



public function get_body() {
$this->get_header();

}




}
?>

В config.php только константы отвечающие за соединение с БД, в шаблоне получаю такую траблу, валидность страница не проходит, валидатор пишет Знак "" не допускается в прологе

А вот и код в браузере.



Что это такое, и как его исправить? К тому же всё в перемешку, хотя код указан нормально.

moka 05.05.2014 00:10

Ответ: Обработчик CMS в одном файле
 
Во первых учитывай что после ?> новая строка - будет как новая строка в HTML.

Также не используй echo для вывода HTML тегов, вообще.
Закрываей php тег ?> и далее пиши нормальный html со встравками типа <?=$variable?> и тому подобными.
А лучше найди нормальный templating язык.
Также TAB'ы (indention) для кого придумали? Код читать когда каждая строка слева не реально, это относится к html'у также и к php.

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

mtaracing 05.05.2014 00:14

Ответ: Обработчик CMS в одном файле
 
php теги я закрываю. Пробовал выводить страницу через include, та же фигня. А на счет indention, мне удобней читать код когда всё с лева.

moka 05.05.2014 00:21

Ответ: Обработчик CMS в одном файле
 
Цитата:

Сообщение от mtaracing (Сообщение 279928)
php теги я закрываю.

echo '<!DOCTYPE HT.....

Это ты не закрыл, это ты выводишь html используя php.

Цитата:

Сообщение от mtaracing (Сообщение 279928)
А на счет indention, мне удобней читать код когда всё с лева.

Почему всему миру удобнее с, а тебе вдруг без? Не выпендривайся, другим кому код показываешь - вырвиглаз неудобно. Программисты учатся работать совместно, и с этим идут общепринятые, "органически" выявленные принципы.

mtaracing 05.05.2014 00:36

Ответ: Обработчик CMS в одном файле
 
echo у меня закрыт.

moka 05.05.2014 10:34

Ответ: Обработчик CMS в одном файле
 
Ты видимо не понял.
Цитата:

Также не используй echo для вывода HTML тегов, вообще.
НЕ используй ECHO для ВЫВОДА HTML ТЕГОВ.

mtaracing 05.05.2014 15:10

Ответ: Обработчик CMS в одном файле
 
Я же написал, при использовании include та же фигня.

moka 05.05.2014 17:11

Ответ: Обработчик CMS в одном файле
 
Вот тебе пример, изучай (запусти с сервера):
PHP код:

<?php echo "1"?>
<?php $i 
10?>
<?php $i
++; ?>
<html></html>


mtaracing 05.05.2014 23:19

Ответ: Обработчик CMS в одном файле
 
Вы меня наверное не слышите. Причем здесь этот код...

mtaracing 05.05.2014 23:39

Ответ: Обработчик CMS в одном файле
 
Всё, я уже и сам разобрался, с 25 раза перебирая каждую функцию кода выяснил в чем ошибка - кодировка была UTF8, поставил без BOM и сразу всё нормально заработало.

Nex 06.05.2014 11:47

Ответ: Обработчик CMS в одном файле
 
Раз уж пошел такой тред, то и я по задаю вопросы. :)
Возможно ли через ajax выводить новые новости без перезагрузки страницы в div'ах так же как и на php?
PHP код:

<?php while(..): ?> 
    <div>123</div>
<?php endwhile; ?>


Randomize 06.05.2014 11:56

Ответ: Обработчик CMS в одном файле
 
jQuery - $.post $.get
$().append
$().appendTo

moka 06.05.2014 14:35

Ответ: Обработчик CMS в одном файле
 
Цитата:

Сообщение от mtaracing (Сообщение 279998)
Вы меня наверное не слышите. Причем здесь этот код...

Ну ты видимо его не попробовал, раз задаёшь такой вопрос. Следственно о чём говорить. Давай ты меньше будешь писать тут и попробуешь сперва?


Часовой пояс GMT +4, время: 01:00.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot