в курсе "Организация структуры сайта" 5 урок, переключение модулей...
Как twin переключает в данном курсе
switch($GET['page'])
{
case 'main':
include './modules/main/router.php';
break;
case 'second':
include './modules/second/router.php';
break;
default:
include './modules/main/router.php';
break;
}
А если куча модулей, да тоже самое и если if else использовать, решил свою функцию попробовать написать, время выполнение примерно одинаковое, но если модулей будет сотня, то это гораздо удобнее мне кажется
$$moduleSwitch = array(
'main' => array(
'main',
'year'
),
'second' => array(
'second',
'yes'
)
);
moduleSwitch($moduleSwitchAdmin );
function moduleSwitch($array)
{
global $GET;
$router = '';
while (list($key, $val) = each($array))
{
if(is_array($val) && in_array($GET['page'], $val))
{
$router = $key;
break;
}
elseif($GET['page'] == $val)
{
$router = $key;
break;
}
}
if($router != '')
include './modules/'.$router.'/router.php';
else
include './modules/main/router.php';
}
Можно засунуть эту в функцию в файл default.php, а в файле veriables.php создать два массива $moduleSwitch и $moduleSwitchAdmin, тогда можно будет эту же функцию использовать в админке
Кто что скажет, прав ли я?
Спустя 1 час, 9 минут, 17 секунд (16.06.2011 - 18:43) Игорь_Vasinsky написал(а):
эх.. на кашу не станет похоже?
Я у себя деал так:
есть модули, у них по одному главному контроллеру
и в самих модулях switch to case - для подключния подмодулей взависимости от GET
т.е. папка controllers/administrate/
главный контрллер administrate.php
а подконтроллеры:
config.administrate.php
htaccess.administrate.php
и т.д.
Я у себя деал так:
есть модули, у них по одному главному контроллеру
и в самих модулях switch to case - для подключния подмодулей взависимости от GET
т.е. папка controllers/administrate/
главный контрллер administrate.php
а подконтроллеры:
config.administrate.php
htaccess.administrate.php
и т.д.
Спустя 33 минуты, 57 секунд (16.06.2011 - 19:17) nugle написал(а):
Игорь_Vasinsky
не знаю может я не совсем понял суть твоего решения, но мне не очень нравится
не знаю может я не совсем понял суть твоего решения, но мне не очень нравится
Цитата |
эх.. на кашу не станет похоже? |
мне все предельно ясно, файл переменные в одном месте, функции в другом, вызов в индексе, там в этой функции не все верно, но мысль такая... щас буду дорабатывать
Спустя 13 минут, 51 секунда (16.06.2011 - 19:31) nugle написал(а):
Переделал на так, в veriables.php добавил такие строчки
veriables.php
Теперь сама функция выглядит так
libs/default.php
[more]
а подключение так
для модулей сайта
для модулей админки
Вообще верно делаю?
veriables.php
Свернутый текст
/**
* Массив переключения модулей сайта
*/
$moduleSwitch = array(
'main/router.php' => array(
'main',
'year'
),
'second/router.php' => array(
'second',
'yes'
)
);
/**
* Массив переключения модулей администраторской части сайта
*/
$moduleSwitchAdmin = array(
'main/router.php' => 'main',
'second/router.php' => 'second',
'meta/router.php' => 'meta',
'sequrity/exit.php' => 'exit'
);
Теперь сама функция выглядит так
libs/default.php
[more]
function moduleSwitch($array, $path)
{
global $GET;
$router = '';
while (list($key, $val) = each($array))
{
if(is_array($val) && in_array($GET['page'], $val))
{
$router = $key;
break;
}
elseif($GET['page'] == $val)
{
$router = $key;
break;
}
}
if($router != '')
include IRB_ROOT.$path.'/'.$router;
else
include IRB_ROOT.$path.'/main/router.php';
}[/more]
а подключение так
для модулей сайта
/**
* The switch of modules
* Переключатель модулей
*/
moduleSwitch($moduleSwitch, 'modules');
для модулей админки
/**
* The switch of modules
* Переключатель модулей
*/
moduleSwitch($moduleSwitchAdmin, 'admin');
Вообще верно делаю?
Спустя 22 минуты, 41 секунда (16.06.2011 - 19:54) neadekvat написал(а):
Че-то я не догоняю логику. Почему там двухмерный массив? И функция страшная.
Почему не подходит простой вариант:
Почему не подходит простой вариант:
$modules = array (
// Главная страница
'main',
// Поиск
'search',
// Пользователь
'user'
);
// Благодаря массиву доступных модулей, всякие бяки исключены
if (in_array($GET[0], $imodules))
include ma($GET[0]);
else
include ma('pages');
Спустя 1 час, 4 минуты, 39 секунд (16.06.2011 - 20:58) nugle написал(а):
neadekvat
двумерный, потому что в роли ключа идет путь к модулю, а вроде значения массив со страницами
Т.е. например вызывается страница main, мы проверяем есть ли такая страница в массиве, если есть смотрим какой модуль и подключаем, если нет то дефолтную страницу выводим
двумерный, потому что в роли ключа идет путь к модулю, а вроде значения массив со страницами
Т.е. например вызывается страница main, мы проверяем есть ли такая страница в массиве, если есть смотрим какой модуль и подключаем, если нет то дефолтную страницу выводим
Спустя 7 минут, 58 секунд (16.06.2011 - 21:06) neadekvat написал(а):
$modules = array (
// Главная страница
'main' => 'controllers/index_main.php',
// Поиск
'search' => 'name_through_ass.php'
// Пользователь
'user' => 'user.php'
);
if (isset($imodules[$GET[0]]))
include $modules[$GET[0]];
else
include 'pages.php';
Итак, чем этот вариант плох?
Спустя 11 минут, 40 секунд (16.06.2011 - 21:18) nugle написал(а):
neadekvat
чем он заменяет вариант от твина?
опять же десятки страниц к одному модулю и прописывать каждый?
чем он заменяет вариант от твина?
опять же десятки страниц к одному модулю и прописывать каждый?
Спустя 8 минут, 25 секунд (16.06.2011 - 21:26) neadekvat написал(а):
Цитата (nugle @ 16.06.2011 - 22:18) |
чем он заменяет вариант от твина? |
А что, сокращение кода в несколько раз не заметно?
Цитата (nugle @ 16.06.2011 - 22:18) |
опять же десятки страниц к одному модулю и прописывать каждый? |
Да, массив существующих модулей создать надо. Потому что это основа безопасности и работоспособности.
А адреса прописывать - не знаю, зачем вы так делаете. У меня лично адреса схожи, поэтому мне не приходится для каждого модуля прописывать свой адрес, что ты и мог увидеть в первом посте в этой теме.
Спустя 12 минут, 11 секунд (16.06.2011 - 21:38) nugle написал(а):
Цитата |
Да, массив существующих модулей создать надо |
Чем он мне поможет?
Цитата |
А адреса прописывать - не знаю, зачем вы так делаете. |
я имел ввиду, вы как будете делать
$modules = array (
// Главная страница
'main' => 'controllers/index_main.php',
'second' => 'controllers/index_main.php',
'third' => 'controllers/index_main.php',
// и так далее?
// Поиск
'search' => 'name_through_ass.php'
// Пользователь
'user' => 'user.php'
);
Спустя 1 минута, 7 секунд (16.06.2011 - 21:40) neadekvat написал(а):
Цитата (nugle @ 16.06.2011 - 22:38) |
Чем он мне поможет? |
Тем, что несуществующий модуль подключать не будешь. И для этого не придется дергать файловую систему.
Цитата (nugle @ 16.06.2011 - 22:38) |
я имел ввиду, вы как будете делать |
Да вы сегодня все сговорили и дружно выключили мозги?! Идите нафиг. Я сваливаю. Дня на два. Задолбали.
Спустя 15 минут, 39 секунд (16.06.2011 - 21:55) nugle написал(а):
neadekvat
сложно вот без пояснений мне...
сложно вот без пояснений мне...
Цитата |
Да вы сегодня все сговорили и дружно выключили мозги?! Идите нафиг. Я сваливаю. Дня на два. Задолбали. |
Что не так спросил?