Вы не зашли.
Главная » PHP » MVC подключение модулей
#1. Nu3oN Off (11)
Moderator
2010.11.20 14:02
Короче написал такую ерунду, но что-то мне кажется что это гомнокд

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

.htaccess
Код:
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
Код:
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:05)
Я буду лучше голоден, но между креслом и рулем и на дороге.
#2. Morgan Off (10)
Участник
2010.11.20 14:02
>> and $_GET['act']
это на что проверка? на пустоту?
Тогда уже
if(!empty($_GET['act']))

>> array_key_exists($_GET['mod'], $_modules))
чем isset($_modules[$_GET['mod']]) не угодил?
Тем более, isset быстрее в данном случае на 25-50% (зависит от случая).
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#3. Nu3oN Off (11)
Moderator
2010.11.20 14:02
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. Morgan Off (10)
Участник
2010.11.20 15:03
Nu3oN написал:
if (isset($_GET['act']) то выдает что ничего не передано о_О
т.е как?
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#5. Morgan Off (10)
Участник
2010.11.20 15:03
Насчет реализации, хочу оповестить о том что написание модульной системы вытянет из тебя еще много соков.
Я до сих пор рихтую свою систему, добавляю там, убираю это, и т.д.
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#6. Nu3oN Off (11)
Moderator
2010.11.20 16:04
ну не знаю... Поживем увидем как говорится гг
З.ы мне не нравятся 19 и 20 строки...
Добавлено спустя   2 минуты :
Morgan написал:
Nu3oN написал:
if (isset($_GET['act']) то выдает что ничего не передано о_О
т.е как?
Да вот так... Показывает что переменной не существует
Добавлено спустя   9 минут  12 секунд:
поправил свою гомнятину))))
Я буду лучше голоден, но между креслом и рулем и на дороге.
#7. Gemorroj Off (107)
Administrator
2010.11.20 19:07
isset вернет false если значение === null
Код:
$arr['key'] = null;
var_dump(isset($arr['key']));
var_dump(array_key_exists('key', $arr));
Добавлено спустя   1 минуту  18 секунд:
а по коду... много всяких условий. очень перегруженно выглядит.
#8. Fuelen Off (5)
Участник
2010.11.21 03:03
Я чота нипонял про квадратные скобки, зачем их удалять? Т.е. откуда он берутся? smile
Как по мне, то лучше правило
RewriteRule ^.*$ index.php?path=$0 [L,QSA]
И тогда переменную path парсить.
на хую вас вертів
#9. Nu3oN Off (11)
Moderator
2010.11.21 10:10
Fuelen написал:
Я чота нипонял про квадратные скобки, зачем их удалять? Т.е. откуда он берутся?
адрес получается потому что такой http://site.ru/mod[home][index][id=1,page=2]

З.ы уж лучше резать эти скобки!
Я буду лучше голоден, но между креслом и рулем и на дороге.
#10. Gemorroj Off (107)
Administrator
2010.11.21 13:01
я, кстати, тоже думаю, что намного лучше делать одну точку входа и реализовать роутинг на PHP. очень гибко получается.
#11. Fuelen Off (5)
Участник
2010.11.21 16:04
небыло чем занятся)) измерял скорость: что быстрее
удаление скобок через strtr или через trim. 10 000 итераций.
strtr:
0.0617
0.0619
0.0613
trim:
0.0415
0.041
0.0414

ыы smile как и ожидал))
на хую вас вертів
#12. Morgan Off (10)
Участник
2010.11.21 18:06
Fuelen
str_replace: 0.015634 сек.

strtr: 0.026619 сек.

trim в данном случае сравнивать не логично, т.к. функция обрабатывает только боковые символы.
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#13. Fuelen Off (5)
Участник
2010.11.21 18:06
ну как я понял, здесь и  будут только боковые))
на хую вас вертів
#14. Gemorroj Off (107)
Administrator
2010.11.21 18:06
тут нужно полноценные тесты делать, на результатах в сотые доли секунды слишком высокая погрешность будет.
#15. Fuelen Off (5)
Участник
2010.11.21 18:06
а полноценные это как?
на хую вас вертів
#16. Gemorroj Off (107)
Administrator
2010.11.21 19:07
http://wapinet.ru/forum/viewtopic.php?id=49
Страниц: 1 2 Все
Главная
WEB
PunBB Mod v0.6.2
0.021 s