Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2012, 13:56   #1
kuba1981
Форумчанин
 
Регистрация: 22.08.2012
Сообщений: 155
По умолчанию ЧПУ

Здравствуйте, только изучаю php, нужно сделать ссылки вида ЧПУ, но не могу понять как это сделать. У меня вот есть точка входа index.php ,в .htaccess включен реврайт
PHP код:
RewriteEngine    on 

RewriteCond 
%{REQUEST_URI} !^/favicon.ico

RewriteCond 
%{REQUEST_FILENAME} !-
RewriteCond 
%{REQUEST_FILENAME} !-

RewriteRule 
^(.*)$ index.php?page=$[L,QSA
как я понимаю все скрипты вызываемые через ссылки будут проходить через него?????? у меня сейчас ссылка выглядит так
Код HTML:
<a href="?page=enter">ENTER</a>
, в индексе подключен класс который формирует путь к нужному контроллеру и запускает его,
А КАК ТЕПЕРЬ МНЕ СДЕЛАТЬ ЧПУ это самому нужно писать функцию замены??? В интернете читал делается через регулярки в .htaccess, но там в примерах на каждую страницу свое правило, это надо все старницы в нем изменять или это по другому как то делается?Подскажите пожалуста!!!
kuba1981 вне форума Ответить с цитированием
Старый 02.10.2012, 14:12   #2
buriat
Форумчанин
 
Регистрация: 28.06.2010
Сообщений: 189
По умолчанию

У тебя структура сайта MVC?
buriat вне форума Ответить с цитированием
Старый 02.10.2012, 14:14   #3
kuba1981
Форумчанин
 
Регистрация: 22.08.2012
Сообщений: 155
По умолчанию

Да сруктра MVC, я не могу просто понять сам принцып как делается ЧПУ.
kuba1981 вне форума Ответить с цитированием
Старый 02.10.2012, 14:21   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от kuba1981 Посмотреть сообщение
Да сруктра MVC, я не могу просто понять сам принцып как делается ЧПУ.
Прописываешь в своем коде ссылки такого вида:
PHP код:
<a href="/enter">ENTER</a
А обрабатываются они по-старому, как до изменения, тем же кодом.
Т.е. меняется только внешний вид ссылок – а обработчик остается старый.
Andkorol вне форума Ответить с цитированием
Старый 02.10.2012, 14:28   #5
kuba1981
Форумчанин
 
Регистрация: 22.08.2012
Сообщений: 155
По умолчанию

Я так уже пробовал, не работает я вот хотел спросить сейчас у меня приходит через ссылку page=enter, после обработки получается допустим ./controllers/enter.php это я получаю нужный контроллер ,а вот если я ставлю как вы говорите не работает почему то, думал может это значение не попадает через реврайт в главный индекс может я неправильно обрабатываю??? регулярку не надо менять???
kuba1981 вне форума Ответить с цитированием
Старый 02.10.2012, 14:40   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Не надо думать – надо проверять.
Сделай в index.php (там, где обрабатывается URL) вывод значений массива $_SERVER:
PHP код:
echo '<pre>';
var_dump($_SERVER); 
Посмотри, что содержится в элементах 'QUERY_STRING' и 'REQUEST_URI' этого массива.
Andkorol вне форума Ответить с цитированием
Старый 02.10.2012, 14:53   #7
kuba1981
Форумчанин
 
Регистрация: 22.08.2012
Сообщений: 155
По умолчанию

Я просматривал массив в моем варианте все туда приходит, если поменять ссылку на /enter вылазиет Object not found!

Последний раз редактировалось kuba1981; 02.10.2012 в 14:59.
kuba1981 вне форума Ответить с цитированием
Старый 02.10.2012, 15:07   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от kuba1981 Посмотреть сообщение
Я просматривал массив в моем варианте все туда приходит, если поменять ссылку на /enter вылазиет Object not found!
Откуда это "вылазиет"?
Это полный текст ошибки?
Пора уже код показывать...
Andkorol вне форума Ответить с цитированием
Старый 02.10.2012, 15:15   #9
kuba1981
Форумчанин
 
Регистрация: 22.08.2012
Сообщений: 155
По умолчанию

Ошибка в браузере такая вылазиет Object not found вот код обработчика
PHP код:
<?php
    
/**
    * класс маршрутизатор ,подбирает нужый контроллер для обработки данных
    */
    
       
class Lib_Application
            
{
                    
                
/**
                * внутренний метод getRoute() класса вернет значение переданное через $_GET (через настройки .htaccess) 
                * @return string
                */
                
                
private function getRoute()
                    {
                        if(empty(
$_GET['page']))
                            
$route='index';
                        else
                            
$route=$_GET['page'];
                                                
                        return 
$route;                             
                    }

                
/**
                * внутренний метод getView() класса возращает путь к представлению  
                * @return string
                */                     
                   
                    
public function getView()
                    {
                        
$route=$this->getRoute();
                        
$view='application/view/'.$route.'.php';
                        return 
$view;                        
                    }
                
                
                
/**
                * внутренний метод getController() класса возращает путь к контроллеру 
                * @return string
                */
                                    
                    
private function getController()
                    {
                        
$route=$this->getRoute();
                        
$controller='application/controllers/'.$route.'.php';
                        return 
$controller;
                        
                    }
                    
                
/**
                * доступный метод Run() формирует имя класса контроллера и создает объект этого класса
                * @return array                
                */    
                  
                
public function Run()
                    {
                        
session_start();                        //открываем сессию
                        
$controller=$this->getController();     //получае путь к нужному контроллеру
                        
$cl=explode('.',$controller);            //получаем массив из пути и расширения
                        
$cl=$cl[0];                             //берем только путь отбрасывая расширение
                        
$name_contr=str_replace('/','_',$cl);   //заменим '/' на '_' в строке $cl
                        //echo 'Контроллер-'.$cl;
                        
$contr=new $name_contr;                 //создаем объект класса $name_contr
                        
$contr->index();                        //запускаем контроллер метод index() должен быть в каждом контроллере
                        
$member=$contr->member;                 //получаем свойства контроллера
                        
return $member
                        
                    }                 
            }

Последний раз редактировалось kuba1981; 02.10.2012 в 15:37.
kuba1981 вне форума Ответить с цитированием
Старый 02.10.2012, 15:37   #10
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Сначала просто проверь, происходит ли перенаправление на index.php.
Отключи все эти свои "классы-маршрутизаторы", вообще все в index.php закомментировать можно – нужно убедиться, что есть перенаправление, и проверить значения в массиве $_SERVER.
Можно попробовать также самый простой вариант реализации ЧПУ, для начала.
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ЧПУ в Apache moshkin_ura PHP 4 03.10.2012 13:57
настройка ЧПУ через htaccess ajevgen WordPress и другие CMS 0 09.04.2012 13:07
Программирование станков с ЧПУ DeKot Свободное общение 1 24.12.2010 23:10
ЧПУ и Кирилица joe WordPress и другие CMS 1 25.10.2010 14:36
ЧПУ и изображения Linel PHP 6 24.09.2010 09:07