yujin
Новичок
ЧПУ - передача переменных и отслеживание статуса действия
Здравствуйте, помогите, пожалуйста, советом.
Есть простейшая cms, которая при просмотре страницы сайта вызывает по умолчанию привязанный к ней модуль:
Имеется древовидный сайт с url вида
site.com/part/subsection/ACTION
И при вызове, например, страницы site.com/users/ мы получаем название для страницы users модуль,
подключаем файл его содержащий, и вызываем в нем функцию users_ACTION
И казалось бы все хорошо.
Но возникает два вопроса:
1) Например, есть два модуля:
один показывает новости по датам
другой показывает личную страницу пользователя по его имени.
То есть для первого нужен адрес:
site.com/news/2010/1/2 или site.com/$q=news&y=2010&m=1&d=2
а для второго:
site.com/users/vasya или site.com/$q=users&user=vasya
Как выдергивать из адресной строки эти переменные,
как передавать их в модули учитывая их разное, заранее неизвестное, количество
и, пожалуй самое главное и непонятное,
как работать с ними в модулях - ведь в случае с ЧПУ у нас нет названия переменных... ?
2) Как правильно работать с формами?
Для исключения повторного нажатия и выдачи ответного сообщения использую метод
указанный в faq'е этого сайта:
То есть три на каждое действие есть статус и три функции
f() -> f_run() -> f_ok();
Насколько будет правильным такой подход или как можно сделать проще?
Здравствуйте, помогите, пожалуйста, советом.
Есть простейшая cms, которая при просмотре страницы сайта вызывает по умолчанию привязанный к ней модуль:
Имеется древовидный сайт с url вида
site.com/part/subsection/ACTION
И при вызове, например, страницы site.com/users/ мы получаем название для страницы users модуль,
подключаем файл его содержащий, и вызываем в нем функцию users_ACTION
PHP:
...
var $module_name // уже получили из бд название модуля
var $action // действие
if (!$action) // если ничего не указано, то вызываем функцию по-умолчанию
$action = 'show';
include ('modules/'.$module_name.'.php'); // подключили его название
$f = $module_name . '_' . $action ;
if (function_exists($f)){
$result = $f(); // вызываем действие.
}
echo $result;
Но возникает два вопроса:
1) Например, есть два модуля:
один показывает новости по датам
другой показывает личную страницу пользователя по его имени.
То есть для первого нужен адрес:
site.com/news/2010/1/2 или site.com/$q=news&y=2010&m=1&d=2
а для второго:
site.com/users/vasya или site.com/$q=users&user=vasya
Как выдергивать из адресной строки эти переменные,
как передавать их в модули учитывая их разное, заранее неизвестное, количество
и, пожалуй самое главное и непонятное,
как работать с ними в модулях - ведь в случае с ЧПУ у нас нет названия переменных... ?
2) Как правильно работать с формами?
Для исключения повторного нажатия и выдачи ответного сообщения использую метод
указанный в faq'е этого сайта:
То есть три на каждое действие есть статус и три функции
f() -> f_run() -> f_ok();
PHP:
$f = $module_name . '_' . $action ;
$status = $_POST['status']
if (status == 'run' ) then{
$f .= '_run' // совершаем действие после отправки формы
}elseif (status == 'ok' ) {
$f .= '_ok' // и потом выводим ответ пользователю
}
if (function_exists($f)){
$result = $f(); // вызываем действие.
}