Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > index.php?act=smth


Автор: anonymous_userus 9.8.2004, 13:02
Здравствуйте.. Нужна ваша помосчь. Я начинающий в PHP

Вот, например, взять форум типа Ib или phpbb, там кроме одной страницы index.php ничего нету. Я хочу сделать такое же. Т.е. вот допустим у меня на сайте ссылки на разделы, я хочу сделать так чтобы у каждого раздела было свое имя и к разделу можно было перейти введя в браузере что-то типа такого: /index.php?act=guestbook или /index.php?act=faq

а в самом index.php сделать проверку, на act, т.е. если act=faq то и include("faq") (хотя это наверное гемор, мне кажется делается это по-другому)

воот. надеюсь поняли. надеюсь поможете. с уважением.

Автор: Secandr 9.8.2004, 13:14
А что не получается?

Автор: S.A.P. 9.8.2004, 13:59
Кажется, проще будет вызывать отдельные части при помощи запроса, типа index.php?guestbook.
Строка "guestbook" будет храниться в $QUERY_STRING, а там уже анализируй и подключай файлы, какие надо.

Автор: anonymous_userus 9.8.2004, 14:07
Код
А что не получается?

нет, не получается, к сожалению

вообщем я сделал так на главной
Код
<?
switch($act){
  case 'guestbook':
      include("scripts/gb/index.php");
      break;
  case 'faq':
      include("faq.php");
      break;
  default:
      include("news.php");
      break;
};
  ?>

но есть одна маленькая проблемка.

если я пишу /index.php?act= , то тогда всё нормально, делается дефолтный выбор в switch($act), т.е делается include("default.php")

Но, если я пишу просто адрес сайта (в моём случае- localhost/foo) или просто /index.php то появляется ошибка Notice: Undefined variable: act in x:\home\localhost\www\foo\index.php on line 72.

никак не допераю до того, что надо сделать

Автор: Secandr 9.8.2004, 14:11
а что в x:\home\localhost\www\foo\index.php в 72 строке?

Автор: Ignat 9.8.2004, 14:56
Код
<?
if(!empty($_GET['act'])){$act=&$_GET['act'];}else{$act=""};
switch($act){
 case 'guestbook':
     include("scripts/gb/index.php");
     break;
 case 'faq':
     include("faq.php");
     break;
 default:
     include("news.php");
     break;
};
 ?>

Автор: S.A.P. 9.8.2004, 15:44
Мужики, не понял, я вроде написал как сделать: для этой цели нет необходимость вводить новую переменную $act, достаточно использовать запрос типа index.php?string, а string будет находиться в переменой $QUERY_STRING hmmm.gif

Автор: anonymous_userus 9.8.2004, 15:47
Цитата
а что в x:\home\localhost\www\foo\index.php в 72 строке?

да там собственно и было "switch($act){"

Ignat, спасибо помогло.

спасибо всем.

Автор: anonymous_userus 9.8.2004, 15:50
Цитата(Perchilla @ 9.8.2004, 15:44)
Мужики, не понял, я вроде написал как сделать: для этой цели нет необходимость вводить новую переменную $act, достаточно использовать запрос типа index.php?string, а string будет находиться в переменой $QUERY_STRING hmmm.gif

Цитата
Мужики, не понял, я вроде написал как сделать: для этой цели нет необходимость вводить новую переменную $act, достаточно использовать запрос типа index.php?string, а string будет находиться в переменой $QUERY_STRING

переменная $QUERY_STRING это что?

Автор: Ignat 9.8.2004, 16:21
Цитата(anonymous_userus @ 9.8.2004, 16:50)
переменная $QUERY_STRING это что?


Код
<?php
phpinfo();
?>


Увидишь. wink.gif

Автор: IZ@TOP 9.8.2004, 16:57
Цитата(Perchilla @ 9.8.2004, 16:44)
Мужики, не понял, я вроде написал как сделать: для этой цели нет необходимость вводить новую переменную $act, достаточно использовать запрос типа index.php?string, а string будет находиться в переменой $QUERY_STRING

Вот они, ошибки программирования. А ты теперь подумай что заинклуденный скрипт передает какие ни будь параметры через урл. И что даст нам QUERY_STRING при таком запросе: index.php?guestbook&act=add_post ?
Будем инкляйдеть по умолчанию default.php а запись в гостевуху не запишется!

Автор: skalex 9.8.2004, 17:27
Вообще я считаю, что такой подход не совсем удобен!
Гораздо удобнее делать так:

Код index.php (на этот файл надо заворачивать любой запрос к сайту (с помощью .htaccess))

Код
<?php

// символ-разделитель параметров запроса к странице
$parms_delimeter = '_';
// Имя каталога со скрипатми, генерирующими контент
$pages_catalog = 'content';
$pages_extension = 'htm';

// уникальный ID страницы
$page_id = preg_replace('%^/|\.'.$pages_extension.'.*%', '', $_SERVER['REQUEST_URI']);

if (!$page_id) $page_id = 'index';

// формируем массив параметров запроса к странице
$page_parms = array();
list($page_id, $page_parms) = explode($parms_delimeter, $page_id, 2);

//
if (file_exists($pages_catalog.'/'.$page_id.'.'.$pages_extension)) {
  include($pages_catalog.'/'.$page_id.'.'.$pages_extension);
} else {
  include($pages_catalog.'/error-404.'.$pages_extension);
}

?>

Автор: Sufius 9.8.2004, 19:33
Небольшой оффтоп...
А что будет быстрее работать? Сайт "одной страницы", как описано выше... или обычный набор страниц с инклюдами шапки и боттома и с инфой между ними?

Автор: IZ@TOP 10.8.2004, 01:53
Думаю что второй вариант. Но имхо неудобный.

Автор: skalex 10.8.2004, 07:55
Sufius
Я думаю что ты вряд ли почуствуешь разницу в скорости работы.

Автор: Secandr 10.8.2004, 08:23
Если сайт маленький ~10 страниц, то удобнее хранить всё в одном файле, если сайт большой и сложный, то необходимо разбивать на файлы, поскольку запутаешься.

Причём лучше разделять код php и html шаблоны. Существует два варианта: использовать шаблоны или писать функции в которых содержится html "псевдо шаблоны

Автор: d1mac 10.8.2004, 11:49
вообщем написал так:
Код
if(!empty($_GET['act']) && isset($_GET['act'])) { $act=&$_GET['act'];}else{$act="";};


я так понял это - если 'act' не пуст или если 'act' определен {дальше не понятно}

ааа :wacko: обьясните, что значит эта строка, плиз. :help:

Автор: Sufius 10.8.2004, 13:45
2 Изатоп
Почему неудобно?
<?
require ("functions.php"); // подключение функций
include ('top.php'); // макуушка
?>
пошел обычный хтмл
<?
include('bottom.php');
?>
И всё...
Ну при использовании сессий немножко код будет более громоздкий...
Я просто тут думаю... у меня сайт на 50 страниц с информацией... на одну страницу я грюкнусь код писать =)))
2 остальные
Спасибо за ответы =)

Автор: Ignat 10.8.2004, 14:07
Код
if(!empty($_GET['act']) && isset($_GET['act'])) { $act=&$_GET['act'];}else{$act="";};

Эта строка означает, что условие выполнится, когда $_GET['act'] существует И не пуст.
Имхо, в дополнении isset($_GET['act']) нет смысла - функция empty вернет true и в случае пустоты, и в случае неопределенности

Автор: S.A.P. 10.8.2004, 14:46
IZ@TOP
В случае, где необходимо использовать такие сложные запросы, с помощью которых, к примеру, можно сразу добавлять запись в готевую книгу, должен признать, что я был не прав sad.gif . Но не надо же так сразу толкать в грязь hehe.gif , я не читал исходников форума Ib или phpbb и вобще в PHP полный ламер, просто пытался поделиться своим способом вызывать отдельные страницы с помощью $QUERY_STRING.

Цитата(anonymous_userus @ 9.8.2004, 13:02)
у каждого раздела было свое имя и к разделу можно было перейти введя в браузере что-то типа такого: /index.php?act=guestbook или /index.php?act=faq


Автор: IZ@TOP 10.8.2004, 16:05
Perchilla
Лучше сразу "в грязь", зато теперь будешь знать как хорошо, а как плохо biggrin.gif Ну я шучу на счет "в грязь", я этого не имел ввиду wink.gif

А по сабжу скажу: самое лучшее использование движка на MYSQL + HTML Templates + PHP Template Modules.
Mysql думаю понятно что такое.
HTML Templates это шаблоны HTML страниц. Достаточно всего нескольких для разных данных в которых и генерится вся инфа. Еще их можно ккешировать. Определять были ли изменения данных в базе, если да - обновить кэш, нет - не обращаться за данными к MYSQL а просто выдать страницу из кэша.
PHP Templates Modules это что то вроде подключаемых php скриптов внутрь страницы, только они подключаются динамически в зависимости от того, какой модуль требуется для данного раздела/документа, а дальше все управление контентом передается в модуль, или инфа полученная из модуля передается в движок и парсится в шаблонах.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)