PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 6
Free_man Отправлено: 01 Июня, 2012 - 18:13:44 • Тема: Про ЧПУ и не только.. • Форум: Обсуждение статей

Ответов: 122
Просмотров: 131394
caballero пишет:
а в чем проблемма собственно?
.htaccess перенаправляет все на index.php а тут берешь URI и разруливаешь обычным switch


Проблема в том что хочу сделать как описал DeepVarvar а не через switch.Но не могу вникнуть в то что он написал.
То есть нужна одна точка входа.Шаблон отделенный от index и главное ЧПУ которые не придется прописывать каждую в htaccess.
Free_man Отправлено: 01 Июня, 2012 - 17:19:39 • Тема: Про ЧПУ и не только.. • Форум: Обсуждение статей

Ответов: 122
Просмотров: 131394
Ни как не могу разобраться в концепции одной точки входа, и как ее реализовать.

Скажем у меня есть index.php.К нему я подключаю шаблон своего сайта.Шапка,футер,меню не меняются.Меняется контент в зависимости от выбранного пункта меню.В одном например будут статьи которые выводятся из базы списком и при выборе статьи открывается полная статья которая например должна иметь адрес http://sitename/articles/122 .В другом пункте меню картинки и т.д. и т.п.

Как это реализовать с помощью концепции описанной в этой теме?

Самое умное до чего доехал это switch(ЧПУ как я понял придется прописывать в ручную для каждой URL). В общем как то так:

Есть функция вывода меню из масива

PHP:
скопировать код в буфер обмена
  1.  
  2. /* Функция вызова меню */
  3.  
  4.     function mainMenu($menu)
  5.     {
  6.         echo '<ul id="menu">';
  7.  
  8.             foreach ($menu as $link=>$href)
  9.             {
  10.                 echo "<li><a href=\"$href\">", $link, '</a></li>';
  11.             }
  12.        
  13.         echo '</ul>';
  14.     }
  15.  


Далее в index.php есть шаблон в котором есть массив меню, его вывод и его роутер(switch)который расположен в части контента и подключает разный контент из файлов в зависимости от GET параметра:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. /* Массив и вызов меню */
  4.  
  5.     $menu = array(
  6.  
  7.                 "Главная"       => "index.php?id=home",
  8.                 "Страница1"     => "index.php?id=page1",
  9.                 "Страница2"     => "index.php?id=page2",
  10.                 "Страница3"     => "index.php?id=page3",
  11.                 "Страница4"     => "index.php?id=page4",
  12.                 "Страница5"     => "index.php?id=page5");
  13.                
  14.     mainMenu($menu);   
  15.  
  16. /* switch расположенный в части контента в шаблоне. N_ROOT - Физический путь до файла */
  17.  
  18. $id = isset($_GET['id']) ? strip_tags($_GET["id"]) : 'home';
  19.  
  20.         switch($id)
  21.         {
  22.             case "page1":
  23.                 include N_ROOT . '/mainlinks/page1.php'; break;
  24.                                        
  25.             case "page2":
  26.                 include N_ROOT . '/mainlinks/page2.php'; break;
  27.                                        
  28.             case "page3":
  29.                 include N_ROOT . '/mainlinks/page3.php'; break;
  30.                                        
  31.             case "page4":
  32.                 nclude N_ROOT . '/mainlinks/page4.php'; break;
  33.                                        
  34.             case "page5":
  35.                 include N_ROOT . '/mainlinks/page5.php'; break;
  36.                                                
  37.             case "home":
  38.             default:
  39.                 include N_ROOT . '/mainlinks/home.php';
  40.         }
  41.  
  42.  


Если у кого то есть нервы объяснить на пальцах.Буду очень признателен.
Free_man Отправлено: 01 Июня, 2012 - 15:19:58 • Тема: Вопрос по роутеру • Форум: Вопросы новичков

Ответов: 5
Просмотров: 325
avtor.fox пишет:
P.S. Дико и странно. Человек который знает что такое роутер, пытается запихнуть варианты страниц в switch:case


Я еще не очень хорошо знаю php.Да я знаю что такое роутер и как примерно выглядит его реализация.Но я как бы так сказать его плохо понимаю.С MVC пока вообще не лажу.В данный момент понемногу разбираюсь с ООП.

Поэтому что бы не было больших проблем в дальнейшем решил делать навигацию через switch.

Дальше когда наберусь опыта планирую перевести сайт на MVC.Вот тогда и буду разбираться с полноценным роутером.

Спасибо в любом случае.

(Добавление)
avtor.fox пишет:
А Ваш код я бы изменил вот так -


Все равно получаю "Undefined index: id" при обычном запросе http://sitename, в строке

Все.Решил исправлением на
(Добавление)
avtor.fox пишет:
Данный код очень сырой, дырявый, ненадёжный и приведён только в целях ознакомления. "Готовый" код для реализации единой точки входа можно найти на форуме с помощью поиска. Я бы посоветовал код от Eugen или DeepVarvar. От первого мне понравилась реализация, а от второго - простота


Вроде DeepVarvar хорошо написал про ЧПУ и одну точку входа.Но я что то не как не могу осмыслить концепцию. Если не затруднит можно объяснить на пальцах?
Free_man Отправлено: 01 Июня, 2012 - 14:29:28 • Тема: Вопрос по роутеру • Форум: Вопросы новичков

Ответов: 5
Просмотров: 325
Не знаю насколько это хорошо но решил проблему так:

Критика и помощь в исправлении приветствуются.


PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. if(isset($_GET["id"]))
  4. {
  5.       $id = strip_tags($_GET["id"]);
  6. }
  7. else
  8. {
  9.       $id = 'home';
  10. }
  11.         switch($id)
  12.         {
  13.                 case "page1":
  14.                         include N_ROOT . '/mainlinks/page1.php';break;
  15.                 case "page2":
  16.                         include N_ROOT . '/mainlinks/page2.php';break; 
  17.                 case "page3":
  18.                         include N_ROOT . '/mainlinks/page3.php';break;
  19.                 case "page4":
  20.                         include N_ROOT . '/mainlinks/page4.php';break;
  21.                 case "page5":
  22.                         include N_ROOT . '/mainlinks/page5.php';break;         
  23.                 case "home":
  24.                 default:
  25.                         include N_ROOT . '/mainlinks/home.php';
  26.                         }
  27. }
  28. ?>
Free_man Отправлено: 01 Июня, 2012 - 11:27:56 • Тема: Вопрос по роутеру • Форум: Вопросы новичков

Ответов: 5
Просмотров: 325
vlom пишет:
в .htaccess пропиши
CODE (htmlphp):
скопировать код в буфер обмена
Redirect 301 / /index.php?id=home?

(Добавление)
а лучше почитай вот этот урок от евгена http://forum.php.su/topic.php?fo...=62&topic=98


Нужно писать прямо так?Не чего не добавлять?Потому что выдает - Internal Server Error. Насчет урока. Я еще не дорос до MVC да и ООП пока только начал учить не давно.

*Стоит denwer.
Free_man Отправлено: 01 Июня, 2012 - 11:18:53 • Тема: Вопрос по роутеру • Форум: Вопросы новичков

Ответов: 5
Просмотров: 325
Есть примерно такой код:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.  
  4. /* Физический путь до скрипта */
  5.  
  6.         define('NVC_ROOT', str_replace('\\', '/', dirname(__FILE__)));
  7.  
  8. /* Функция вызова меню */
  9.  
  10.         function mainMenu($menu)
  11.       {
  12.                
  13.                 echo '<ul id="menu">';
  14.                
  15.                         foreach ($menu as $link=>$href)
  16.                        {
  17.                                 echo "<li><a href=\"$href\">", $link, '</a></li>';
  18.                         }
  19.                
  20.                 echo '</ul>';
  21.         }
  22.  
  23. /* Массив меню */
  24.  
  25. $menu = array(
  26.  
  27.                 "Главная"       => "index.php?id=home",
  28.                 "Page1"          => "index.php?id=page1",
  29.                 "Page2"          => "index.php?id=page2",
  30.                 "Page3"          => "index.php?id=page3",
  31.                 "Page4"          => "index.php?id=page4",
  32.                 "Page5"          => "index.php?id=page5");
  33.                
  34. mainMenu($menu); // Вызываем меню
  35.  
  36.  
  37. /* Роутер */
  38.                                                    
  39.                    
  40.    $id = strip_tags($_GET["id"]);
  41.        switch($id)
  42.        {
  43.             case "home":
  44.                 include N_ROOT . '/mainlinks/home.php'; break;
  45.                                
  46.             default:
  47.                 include N_ROOT . '/mainlinks/home.php';
  48.         }
  49.  
  50.  
  51. ?>
  52.  


Вопрос в том что главная страница будет - http://sitename/index.php?id=home . Но когда будут набирать адрес сайта то будут попадать просто на http://sitename/, которая и выдает ошибку "Undefined index: id".

Как сделать так что бы когда вводили адрес сайта сразу перенаправляло на http://sitename/index.php?id=home?

Спасибо.

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB