Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Menu w php
Forum PHP.pl > Forum > Przedszkole
Poczatkujacy_Web
Witam mam menu zrobione w php, includuje je na każdje podstronie, plik menu wygląda mniej więcej tak:


  1. <?php
  2. if (isset($_GET['page_id'])) {
  3. $page_id = $_GET['page_id'];
  4. }
  5.  
  6. ?>
  7.  
  8.  
  9.  
  10. <li class="<?php echo ($page_id == 1) ? 'active' : 'no-active' ?>">
  11. <a href="index.php?page_id=1" >HOME</a>
  12.  
  13. </li>
  14.  
  15. <li class="<?php echo ($page_id == 2) ? 'active' : 'no-active' ?>">
  16. <a href="o-mnie.php?page_id=2" >O Mnie</a>
  17.  
  18. </li>
  19.  


Wyżej jak odczytuje a element li w zależności na której stronie jesteśmy dostaje klace active albo no-active.

Moim problemem jest jak zrobić aby po wejściu na stronę w momencie w którym nie mamy kliknięte w żadną podstronę, czyli żaden element id nie jest przekazywany domyślnie strona index.php dostała klasę active?
Turson
  1. <?php echo (!isset($_GET['page_id'])) ? 'active' : 'no-active' ?>
Poczatkujacy_Web
Cytat(Turson @ 13.03.2014, 00:09:03 ) *
  1. <?php echo (!isset($_GET['page_id'])) ? 'active' : 'no-active' ?>



Ten kod dodaje napis active do każdej podstrony... ja chciałbym żeby dodawał klasę activ do elementu li strony index.php po wczytaniu strony przez przeglądarkę, próbuje przerobić to jakoś ale nie potrafię ;/

nie chce mi to działać w żaden sposób ;/
IProSoft
  1. $page_id = isset($_GET['page_id']) ? $_GET['page_id'] : 1;

YourFrog
Dodam tylko dbaj o swój kod. Czytelność zaprocentuje w przyszłości.

  1. <?php
  2.  
  3. $page_id = (isset($_GET['page_id']) ? $_GET['page_id'] : 1);
  4.  
  5. $menu = array(
  6. array('page_id' => 1, 'name' => 'HOME', 'href' => 'index.php?page_id=1'),
  7. array('page_id' => 2, 'name' => 'O mnie', 'href' => 'index.php?page_id=2')
  8. );
  9.  
  10. $html = '';
  11. foreach($menu as $val)
  12. {
  13. $html .= '<li class="' . ($page_id == $val['page_id'] ? 'active' : 'no-active') . '">
  14. <a href="' . $val['href'] . '" >' . $val['name'] . '</a>
  15. </li>';
  16. }
  17.  
  18. echo $html;



@Edit
Notepad++ nie lubi tego forum jeśli chodzi o formatowanie tongue.gif
Poczatkujacy_Web
Cytat(YourFrog @ 13.03.2014, 08:30:57 ) *
Dodam tylko dbaj o swój kod. Czytelność zaprocentuje w przyszłości.

  1. <?php
  2.  
  3. $page_id = (isset($_GET['page_id']) ? $_GET['page_id'] : 1);
  4.  
  5. $menu = array(
  6. array('page_id' => 1, 'name' => 'HOME', 'href' => 'index.php?page_id=1'),
  7. array('page_id' => 2, 'name' => 'O mnie', 'href' => 'index.php?page_id=2')
  8. );
  9.  
  10. $html = '';
  11. foreach($menu as $val)
  12. {
  13. $html .= '<li class="' . ($page_id == $val['page_id'] ? 'active' : 'no-active') . '">
  14. <a href="' . $val['href'] . '" >' . $val['name'] . '</a>
  15. </li>';
  16. }
  17.  
  18. echo $html;



@Edit
Notepad++ nie lubi tego forum jeśli chodzi o formatowanie tongue.gif


Dziękuje, bardzo mi pomogłeś smile.gif

a jak z tego zrobić ładne linki? w .htaccess jakoś?
YourFrog
Mod tego forum na swoim blogu opisał jak odczytywać ładne linki. Wydaje mi się że na początek ci to wystarczy. Oczywiście można przez .htaccess'a go robić ale moim skromnym zdaniem mija się to z celem.

Ewentualnie popatrz na system routingu w innych projektach jak symfony2 (maja dobry aczkolwiek ciężki system routingu).

Jeżeli natomiast chodzi o tworzenie ładnych url w kodzie to sposobów jest wiele i różnie ludzie to robią. Ja na początku projektu zawsze ustalam ładne linki i je bezpośrednio w kodzie sobie wpisuje. Jednak jeżeli chcesz mieć dynamiczne to niestety nie obędzie się bez jakieś klasy która to zrobi.

Prosty przykład oparty o klasy. Poniżej przedstawiam tylko sposób generowania linków abyś mógł to użyć w swojej aplikacji to już musisz dostosować
  1. <?php
  2.  
  3. namespace YourFrog\NiceUrl\Interfaces;
  4.  
  5. /**
  6.  * Interfejs opisujacy API linków
  7.  * @author Paweł Stelmasiak <YourFrog>
  8.  */
  9. interface Link
  10. {
  11. /**
  12. * Obowiazkowa metoda obsługujaca generowanie linków
  13. * @return string
  14. */
  15. public function create(array $arr);
  16. }
  17.  
  18. namespace YourFrog\NiceUrl;
  19.  
  20. use \YourFrog\NiceUrl\Interfaces\Link as I_Link;
  21.  
  22. /**
  23.  * Klasa obsługujaca linki w aplikacji
  24.  * @author Paweł Stelmasiak <YourFrog>
  25.  */
  26. class Link implements I_Link
  27. {
  28. /**
  29. * Tworzenie linków
  30. * @return string
  31. */
  32. public function create(array $arr)
  33. {
  34. $url = array();
  35.  
  36. foreach($arr as $key => $value)
  37. $url[] = $key . '-' . $value;
  38.  
  39. return implode('/', $url);
  40. }
  41. }
  42.  
  43. namespace YourFrog\NiceUrl;
  44.  
  45. /**
  46.  * Klasa odpowiedzialna za zwrócenie odpowiedniej klasy do obsługi linków
  47.  * @author Paweł Stelamsiak <YourFrog>
  48.  */
  49. class Factory
  50. {
  51. /**
  52. * Instancja klasy obsługujacej linki
  53. * @var ILink
  54. */
  55. static protected $_instance;
  56.  
  57. /**
  58. * Zwraca klasę obsługujaca linki
  59. * @return ILink
  60. */
  61. static public function factory()
  62. {
  63. if( self::$_instance === null )
  64. self::$_instance = new Link();
  65.  
  66. return self::$_instance;
  67. }
  68. }
  69.  
  70. namespace YourFrog\Menu;
  71.  
  72. /**
  73.  * Klasa reprezentujaca menu
  74.  * @author Paweł Stelmasiak <YourFrog>
  75.  */
  76. class Element
  77. {
  78. /**
  79. * Identyfikator strony
  80. * @var integer
  81. */
  82. protected $pageID;
  83.  
  84. /**
  85. * Nazwa elementu
  86. * @var string
  87. */
  88. protected $name;
  89.  
  90. /**
  91. * Konstruktor
  92. */
  93. public function __construct($pageID, $name)
  94. {
  95. $this->pageID = $pageID;
  96. $this->name = $name;
  97. }
  98.  
  99. /**
  100. * Zwraca nazwę podstrony
  101. * @return string
  102. */
  103. public function getName()
  104. {
  105. return $this->name;
  106. }
  107.  
  108. /**
  109. * Sprawdza czy podany identyfikator zgadza sie z tym w menu
  110. * @return boolean
  111. */
  112. public function isPage($pageID)
  113. {
  114. return ($this->pageID === $pageID);
  115. }
  116.  
  117. /**
  118. * Zwraca link do menu
  119. * @return string
  120. */
  121. public function getLink()
  122. {
  123. return \YourFrog\NiceUrl\Factory::factory()->create(array('page' => $this->pageID, 'title' => $this->getTitle()));
  124. }
  125.  
  126. /**
  127. * Zwraca tytul strony potrzebny do url'a
  128. */
  129. protected function getTitle()
  130. {
  131. $str = strtolower($this->name);
  132.  
  133. return str_replace(
  134. array(' ', 'ę', 'ś', 'ć'), //Reszte liter sam sobie dopisz
  135. array('_', 'e', 's', 'c'),
  136. $str
  137. );
  138. }
  139. }
  140.  
  141.  
  142. //Gdzieś w pliku menu.php
  143.  
  144. $pageID = (isset($_GET['page_id']) ? $_GET['page_id'] : 1);
  145.  
  146. $menu = array(
  147. new \YourFrog\Menu\Element(1, 'HOME'),
  148. new \YourFrog\Menu\Element(2, 'O mnie')
  149. );
  150.  
  151.  
  152. $html = '';
  153. foreach($menu as $val)
  154. {
  155. $html .= '<li class="' . ($val->isPage($pageID) ? 'active' : 'no-active') . '">
  156. <a href="' . $val->getLink() . '" >' . $val->getName() . '</a>
  157. </li>';
  158. }
  159.  
  160. echo $html;

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.