#1 2010.11.20 14:38

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

MVC подключение модулей

Короче написал такую ерунду, но что-то мне кажется что это гомнокд

З.ы приведу пример в процедурном виде, т.к еще в класс это не пихал...

.htaccess

Код:

1
2
RewriteEngine on
RewriteRule ^mod\[([a-z]{3,10})\]($|\[[a-z]{3,10}\])($|\[.{0,150}\])$ index.php?mod=$1&act=$2&var=$3 [L,QSA]

index.php

Код:

1
span style="color: #0000BB"><?php// ищем корневую категориюdefine('SITE_PATH_ROOT', realpath(dirname(__FILE__)));// Указываем префикс для модулей.$arrSet['pref']['modul'] = '.modul.php'; /** * Обрабатываем url, и указываем какой модуль выводить. */$_modules = array( // Список доступных модулей 'home' => array('index'), 'member' => array('entry', 'inlet'));/** * Удаляем квадратные скобки. */$_GET['mod'] = isset($_GET['mod']) ? $_GET['mod'] : 'home';$_GET['act'] = isset($_GET['act']) ? strtr($_GET['act'], array("["=>"","]"=>"")) : 'index';$_GET['var'] = isset($_GET['var']) ? strtr($_GET['var'], array("["=>"","]"=>"")) : null;// Если категория существует, и существует // в массиве ключ с именем переданным $_GET['mod']if (is_dir(SITE_MODUL_DIR.$_GET['mod'].'/') and isset($_modules[$_GET['mod']])) { $_modul['dir'] = $_GET['mod'].'/'; // Если в массиве существует ключ с именем переданным $_GET['act'] if ($_GET['act'] != 'index') { // Если модуль существует и он указан в массиве с модуляьми. if (is_file(SITE_MODUL_DIR.$_modul['dir'].$_GET['act'].$arrSet['pref']['modul']) and in_array($_GET['act'], $_modules[$_GET['mod']])) { $_modul['act'] = $_GET['act']; } else { $_SESSION['issetErr'] = '404'; header ('Location: '.$arrSet['site']['link']); die; } } else { $_modul['act'] = 'index'; }} else { $_SESSION['issetErr'] = '404'; header ('Location: '.$arrSet['site']['link']); die;}if (isset($_GET['var']) and $_GET['var']) { // режем строку на подстроки. $expVar = explode(',', $_GET['var']); $intVar = count($expVar); if ($intVar) { // Выводим в цикле все переменные foreach($expVar as $key) { // режем переменную на лдюч и значение. $_expVar = explode('=', $key); // записываем полученные значения в глобальный массив $_GET[trim($_expVar[0])] = isset($_expVar[1]) ? trim($_expVar[1]) : false; } }}/** * Создаем константу */define('SITE_SET_MODUL', $_modul['dir'].$_modul['act'].$arrSet['pref']['modul']);/** * Подключаем модуль. */include_once (SITE_MODUL_DIR.SITE_SET_MODUL);?>

Отредактировано Nu3oN (2010.11.20 17:00)


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#2 2010.11.20 14:55

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: MVC подключение модулей

>> and $_GET['act']
это на что проверка? на пустоту?
Тогда уже
if(!empty($_GET['act']))

>> array_key_exists($_GET['mod'], $_modules))
чем isset($_modules[$_GET['mod']]) не угодил?
Тем более, isset быстрее в данном случае на 25-50% (зависит от случая).


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#3 2010.11.20 14:58

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

Re: MVC подключение модулей

Morgan написал:

>> and $_GET['act']
это на что проверка? на пустоту?
Тогда уже
if(!empty($_GET['act']))

Я не знаю что за фигня, но у меня на денвере если просто написать
if (isset($_GET['act']) то выдает что ничего не передано о_О
----

Morgan написал:

>> array_key_exists($_GET['mod'], $_modules))
чем isset($_modules[$_GET['mod']]) не угодил?
Тем более, isset быстрее в данном случае на 25-50% (зависит от случая).

Не додумался... спасибо!


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#4 2010.11.20 15:16

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: MVC подключение модулей

Nu3oN написал:

if (isset($_GET['act']) то выдает что ничего не передано о_О

т.е как?


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#5 2010.11.20 15:17

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: MVC подключение модулей

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


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#6 2010.11.20 16:51

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

Re: MVC подключение модулей

ну не знаю... Поживем увидем как говорится гг
З.ы мне не нравятся 19 и 20 строки...
Добавлено спустя   2 минуты :

Morgan написал:

Nu3oN написал:

if (isset($_GET['act']) то выдает что ничего не передано о_О

т.е как?

Да вот так... Показывает что переменной не существует
Добавлено спустя   9 минут  12 секунд:
поправил свою гомнятину))))


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#7 2010.11.20 19:58

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: MVC подключение модулей

isset вернет false если значение === null

Код:

1
2
3
$arr['key'] = null;
var_dump(isset($arr['key']));
var_dump(array_key_exists('key', $arr));

Добавлено спустя   1 минуту  18 секунд:
а по коду... много всяких условий. очень перегруженно выглядит.

Активен

#8 2010.11.21 03:27

Fuelen
Участник
Зарегистрирован: 2009.06.22
Сообщений: 229
Карма: 5
Профиль

Re: MVC подключение модулей

Я чота нипонял про квадратные скобки, зачем их удалять? Т.е. откуда он берутся? smile
Как по мне, то лучше правило
RewriteRule ^.*$ index.php?path=$0 [L,QSA]
И тогда переменную path парсить.


на хую вас вертів

Неактивен

#9 2010.11.21 10:42

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

Re: MVC подключение модулей

Fuelen написал:

Я чота нипонял про квадратные скобки, зачем их удалять? Т.е. откуда он берутся?

адрес получается потому что такой http://site.ru/mod[home][index][id=1,page=2]

З.ы уж лучше резать эти скобки!


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#10 2010.11.21 13:28

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: MVC подключение модулей

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

Активен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.011 s