[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Шаблонизатор от twin
nugle
Прошел ядро наконец то и вот на меня напал такой вопрос
в курсе "Организация структуры сайта" 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

и т.д.

Спустя 33 минуты, 57 секунд (16.06.2011 - 19:17) nugle написал(а):
Игорь_Vasinsky
не знаю может я не совсем понял суть твоего решения, но мне не очень нравится
Цитата
эх.. на кашу не станет похоже?

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

Спустя 13 минут, 51 секунда (16.06.2011 - 19:31) nugle написал(а):
Переделал на так, в veriables.php добавил такие строчки
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, мы проверяем есть ли такая страница в массиве, если есть смотрим какой модуль и подключаем, если нет то дефолтную страницу выводим

Спустя 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
сложно вот без пояснений мне...
Цитата
Да вы сегодня все сговорили и дружно выключили мозги?! Идите нафиг. Я сваливаю. Дня на два. Задолбали.

Что не так спросил?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.