Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Połączenie Pagiancji - Nice URL
Forum PHP.pl > Forum > Przedszkole
marcin-1981
Witam, staram się zrobić podstawę pod mały serwis.
Przyjazne Linki i Paginacja
Wszystko działa częściowo
Kiedy klikam 1 2 3 4 5 6 przełącza mi podstrony i tu jest ok ale kiedy klikam na wynik tej paginacji czyli link który wywołuje wyświetlenie konkretnych danych z bazy.
Kiedy klikam w link
  1. echo '<a href="'.$nurl->Url('module=news&action=show&name='.$wiersz['title'].'&id='.$wiersz['id'].'').'">Aktualnosc o id '.$wiersz['id'].'</a><br />';


Nie wywołuje się ale przechodzi z podstrony 5 na 1 co prawda klikając na link z podstrony 1 wywołuje się to co chciałem na piątej.
Dopiero ponowne klikniecie tego samego linku wywoła wypisanie tego co zawiera link z podstrony 1

Czasami są jeszcze dziwniejsze przypadki domyślam się że przez pagiancje

Kiedy klikam na podstony 1 2 3 4 5 link w pasku adresu wygląda tak
  1. <a href="http://127.0.0.1/Main/index.php?pagenum=2" target="_blank">http://127.0.0.1/Main/index.php?pagenum=2</a>

a kiedy jestem na 6 i klikam na link w pasku adresu pojawia się taki link

  1. [
  2. <a href="http://127.0.0.1/Main/index.php?pagenum=6Madafaka-Madafaka-test-0120080,120010.html" target="_blank">http://127.0.0.1/Main/index.php?pagenum=6M...080,120010.html</a>
  3. /php]
  4.  
  5.  
  6. Kod plik index.php
  7. [php]
  8. <?php
  9.  
  10. require_once('NUrl.class.php');
  11. include_once('class/pagination.php');
  12. include "config/db.php";
  13. //bazowy url. Może to być np. <a href="http://mojastrona.pl/" target="_blank">http://mojastrona.pl/</a>
  14. //tutaj dla testów będę brał ścieżkę, którą określacie w linku
  15.  
  16. $baseUrl = $_SERVER['REQUEST_URI'];
  17. if (!empty($_SERVER['PATH_INFO'])) //jeszcze trzeba z tego automatycznego $baseUrl wyciąć path_info. Gdy sami określać będziecie $baseUrl to ta wycinka będzie zbędna
  18. $baseUrl = substr($baseUrl,0, strpos($baseUrl,$_SERVER['PATH_INFO'])).'/';
  19. //i jeszcze wywalę index.php jeśli się nam tu wstawił
  20. if (substr($baseUrl,-9) == 'index.php')
  21. $baseUrl = substr($baseUrl,0,-9);
  22.  
  23. //stworzenie obiektu do generacji linków
  24.  
  25. $nurl = new NUrl($baseUrl);
  26.  
  27. //przetworzenie ścieżki na parametry $_GET
  28. $nurl->Decode();
  29.  
  30. //tutaj damy nasz prosty kontroller, obsługujący nasze moduły
  31. echo '<div><b>Pamietajcie - przyklad zadziala dopiero gdy w apache\'u wlaczycie mod-rewrite!!!</b><br /><br />';
  32. controller();
  33. echo '</div>';
  34.  
  35.  
  36. //a tu przykładowe menu z generowaniem linków
  37.  
  38. echo '<div>';
  39.  
  40. echo '<a href="'.$nurl->Url().'">Strona glowna</a><br />';
  41. echo '<a href="'.$nurl->Url('module=test&action=jakasakcja&par1=war1&par2=war2').'">Modul testowy z jakas akcja</a><br />';
  42. echo '<a href="'.$nurl->Url('module=news&action=list').'">Lista aktualnosci</a><br />';
  43. /*
  44. $zapytanie_podobne = "SELECT * FROM artykuly ORDER BY id DESC limit 5";
  45. if ($r = mysql_query ($zapytanie)) {
  46. while ($wiersz = mysql_fetch_array($r)) {
  47. echo '<a href="'.$nurl->Url('module=news&action=show&name='.$wiersz['title'].'&id='.$wiersz['id'].'').'">Aktualnosc o id '.$wiersz['id'].'</a><br />';
  48. }
  49. }
  50. */
  51. $total_results = mysql_num_rows(mysql_query('Select * from artykuly ORDER BY id DESC'));
  52. $number_of_results_to_show_per_page = 1;
  53. if($total_results >$number_of_results_to_show_per_page)
  54. {
  55. $page = new pagination($total_results,$number_of_results_to_show_per_page,'links'); // it will show links
  56.  
  57. $return_qry = $page->get_pagination_query('Select * from artykuly ORDER BY id DESC');
  58.  
  59. $query = mysql_query($return_qry);
  60. }
  61. else
  62. {
  63. $query = mysql_query( 'select * from artykuly ORDER BY id DESC');
  64. }
  65. while ($wiersz = mysql_fetch_array($query)) {
  66. {
  67.  
  68. echo '<a href="'.$nurl->Url('module=news&action=show&name='.$wiersz['title'].'&id='.$wiersz['id'].'').'">Aktualnosc o id '.$wiersz['id'].'</a><br />';
  69. }
  70. }
  71. if($total_results > $results_per_page)
  72. {
  73. echo "<ul class=paginator>";
  74. echo $page->pagination_string;
  75. echo "</ul>";
  76. }
  77. echo "<br>";
  78. /*
  79. echo '<a href="'.$nurl->Url('module=news&action=show&name=kwiatki-sa-zolte&id=2').'">Aktualnosc o id 2</a><br />';
  80. */
  81. echo '</div>';
  82.  
  83. function controller(){
  84. $module = isset($_GET['module']) ? $_GET['module'] : '';
  85. switch ($module){
  86. case 'test':
  87. echo 'Hej, wszedles wlasnie w modul testowy. Akcja jaka wywolales to <b>'.$_GET['action'].'</b>';
  88. break;
  89. case 'news':
  90. echo 'Hej, wszedles wlasnie w modul aktualnosci.';
  91. if ($_GET['action'] == 'show'){
  92. echo ' Akcja to <b>show</b>. <br />Id aktulanosci to: <b>'.$_GET['id'].'</b><br />Nazwa aktualnosci to: <b>'.$_GET['name'].'</b>';
  93. $wynik = mysql_query('SELECT * FROM artykuly WHERE id='.$_GET['id'].'')
  94. or die('Błąd zapytania');
  95. if(mysql_num_rows($wynik) > 0) {
  96. $r = mysql_fetch_assoc($wynik);
  97. echo '<h1>'.$r['title'].'</h1>';
  98. }
  99. } elseif ($_GET['action'] == 'list'){
  100. echo ' Akcja to <b>list</b>, wiec tu powinno sie wstawic liste aktualnosci :)';
  101. }
  102. break;
  103. case '':
  104. echo 'Jestes teraz na stronie glownej, bez odpalania jakiegokolwiek modulu';
  105. break;
  106. default:
  107. echo 'Wszedles w modul, ktorego nie obsluguje. Spadaj!!';
  108. }
  109. echo '<br /><br />A tak wyglada tablica $_GET:';
  110. echo '<pre>';
  111. print_r($_GET);
  112. echo '</pre>';
  113. }
  114.  
  115.  
  116. ?>
  117.  


nospor
Klasa do stronicowania robi ci sama linki do kolejnych stron. Niestety ta klasa nie wie, że budując linki ma je przepuszczać przez $nurl. Zapewne to powoduje cały problem
marcin-1981
Tak się domyślam a jak to zrobić. Czy jest tu na forum taki post?
Szukałem ale nic nie znalazłem
nospor
Używasz jakiejś klasy pagination, której kodu nie widzę, więc nie wiem w jaki sposób masz jej powiedzieć, by tworzyła właściwe linki.
marcin-1981
klasa paginacja

  1. <script>
  2. function change_page(val,page,qry_st)
  3. {
  4. window.location = page+'?pagenum='+val+qry_st;
  5. }
  6. </script>
  7. <?php
  8.  
  9.  
  10. // for pagination of
  11. // two types ,nomal link and dropdown menu
  12. // for normal links pass 'links' as the third parameter while creating the object and for dropdown pagination pass 'dropdown'.
  13. class pagination
  14. {
  15. var $max_results_per_page=0; // no. of results to be shown per page
  16. var $total_results=0; //no. of all results to be shown over all pages
  17. var $max_pages =0; // max. pages i.e the maximum number of pages for a particular query , calculated in the constructor
  18. var $current_page=0 ; // the page no. that is currently rendered
  19. var $pagination_string=''; // the output string , which contains , the actual pagination links/dropdown
  20. var $page_x_of_y = ''; // the output string , which contains the string like 'page 1 of 2'
  21. var $qry_string = ''; // the query string with the address ,useful when the pagination is done on pages which has search feature as the GET parameters are not lost
  22.  
  23. function __construct($total_res,$res_per_page,$pagination_type)
  24. {
  25. $this->max_results_per_page = $res_per_page;
  26.  
  27. $this->total_results = $total_res;
  28.  
  29. $this->max_pages = ceil($total_res/$res_per_page);
  30.  
  31. $query_string = '';
  32. if(is_array($_GET))
  33. {
  34. foreach($_GET as $key=>$value)
  35. {
  36. if($key!='pagenum')
  37. $query_string .= '&'.$key.'='.$value;
  38. }
  39. }
  40. $this->qry_string = $query_string;
  41.  
  42. if(isset($_REQUEST['pagenum']))
  43. {
  44. if($_REQUEST['pagenum']>$this->max_pages)
  45. {
  46. $this->current_page = $this->max_pages;
  47. }
  48. else if($_REQUEST['pagenum']<1)
  49. {
  50. $this->current_page = 1;
  51. }
  52. else
  53. {
  54. $this->current_page = $_REQUEST['pagenum'];
  55. }
  56. }
  57. else
  58. {
  59. $this->current_page = 1;
  60. }
  61. $this->page_x_of_y = 'page '.$this->current_page.' of '.$this->max_pages;
  62. switch($pagination_type)
  63. {
  64. case 'links':
  65. $this->page_links();
  66. break;
  67. case 'dropdown':
  68. $this->page_dropdown();
  69. break;
  70. default : die('Sorry no such pagination style as "'.$pagination_type.'" exist');
  71. }
  72. }
  73. public function page_links()
  74. {
  75. if ($this->current_page > 1)
  76. {
  77. $page = $this->current_page-1;
  78.  
  79.  
  80. // for image arrows
  81. // use this
  82. // $prev = "<a href='".$_SERVER['PHP_SELF']."?pagenum=$page".$qry_string."'><img src='../images/reverse.gif' width='10px' height='10px'></a> ";
  83.  
  84. //if you dont have images use this
  85. $prev = "<li><a href='".$_SERVER['PHP_SELF']."?pagenum=$page".$this->qry_string."'>Poprzedni</a></li> ";
  86. }
  87. else
  88. {
  89. $prev = '&nbsp;'; // we're on page one, don't print previous link
  90. $first = '&nbsp;'; // nor the first page link
  91. }
  92.  
  93. if ($this->current_page < $this->max_pages )
  94. {
  95. $page = $this->current_page + 1;
  96. // for image arrows
  97. // use this
  98. // $next = "<a href='".$_SERVER['PHP_SELF']."?pagenum=".$page."'><img src='../images/forward.gif' width='10px' height='10px'></a> ";
  99.  
  100. //if you dont have images use this
  101.  
  102. $next = "<li> <b>z ".$this->max_pages."</b><a href='".$_SERVER['PHP_SELF']."?pagenum=".$page.$this->qry_string."'>Następny</a></li> ";
  103. }
  104. else
  105. {
  106. $next = '&nbsp;'; // we're on the last page, don't print next link
  107. $last = '&nbsp;'; // nor the last page link
  108. }
  109.  
  110. for($page = 1; $page <= $this->max_pages; $page++)
  111. {
  112. if ($page == $this->current_page)
  113. {
  114. $nav .= " $page "; // no need to create a link to current page
  115. }
  116. else
  117. {
  118. if($page>=$this->current_page-5 && $page<=$this->current_page+5)
  119. $nav .= "<li class=current><a href='".$_SERVER['PHP_SELF']."?pagenum=$page"."$this->qry_string'>".$page."</a></li>";
  120. }
  121. }
  122. $this->pagination_string = $prev.$nav.$next;
  123.  
  124. }
  125. public function page_dropdown()
  126. { $nav = "<select name='pagenum' onChange=change_page(this.value,'".$_SERVER['PHP_SELF']."','".$this->qry_string."')>";
  127. for($page = 1; $page <= $this->max_pages; $page++)
  128. {
  129.  
  130. if ($page == $this->current_page)
  131. {
  132. $nav .= "<option value='".$page."' selected>".$page."</option> ";
  133. }
  134. else
  135. {
  136. $nav .= "<option value='".$page."' >".$page."</option> ";
  137. }
  138. }
  139. $nav .= "</select>";
  140. $this->pagination_string = $nav;
  141. }
  142. public function get_pagination_query($qry)
  143. {
  144. $offset = ($this->current_page - 1) * $this->max_results_per_page;
  145. $max=" LIMIT $offset, $this->max_results_per_page";
  146. $new_query = $qry."".$max;
  147. return $new_query;
  148. }
  149.  
  150. }?>



ze względu na ograniczenia długości posta nie podałem wcześniej kodu.
Pozdrawiam
nospor
Kod jak ten:
<a href='".$_SERVER['PHP_SELF']."?pagenum=".$page.$this->qry_string."'>Następny</a>
generują ci linki w klasie stronicowania. Musisz więc w te kody wstawić $nurl.
marcin-1981
Niestety nic mi to nie mówi gdzie i co mam zmodyfikować.
Czy klasy czy tylko linki? i co dopisać tzn jak ma wyglądać przykładowy.
Pozdrawiam

Nawet kiedy wpisuję w link na sztywno

  1. if (substr($baseUrl,-19) == 'index.php?pagenum=2')
  2. $baseUrl = substr($baseUrl,0,-19);

(i klikam 2) to i tak nie wycina do żądanej postaci.
lukaszk
Mam ten sam problem potrzebuję wyciąć z adresu uid=1234 i nie wiem jak do tego podejść.
Też korzystam z klasy nice url i mam taki sam błąd.

Proszę o pomoc
nospor
autor tematu ma problem z generowaniem linków w klasie paginacji.
Ty zaś masz jakiś inny problem. Opisz wiec go a nie jakiegos skróta walisz, z ktorego nic nie wynika.
lukaszk
Metodą GET wysyłam ID usera którego klasa nie przerabia i pojawia się taki sam problem jak u kolegi
nospor
ale klasa przerabia ładne urle. A jak wyglada Twój?
lukaszk
Zaczynam od podstawy gdyż chciał bym w moim małym serwisie wdrożyć nice url
Więc mam taki oto problem kiedy linki wyglądają tak


  1. echo '<div style="margin-top:50px;">';
  2. echo '<a href="'.$nurl->Url().'">Strona glowna</a><br />';
  3. echo '<a href="'.$nurl->Url('module=test&action=jakasakcja&par1=war1&par2=war2&par3=war3').'">Modul testowy z jakas akcja</a><br />';
  4. echo '<a href="'.$nurl->Url('module=news&action=list').'">Lista aktualnosci</a><br />';
  5. echo '<a href="'.$nurl->Url('module=news&action=show&name=nospor-strajkuje&id=5').'">Aktualnosc o id 5</a><br />';
  6. echo '<a href="'.$nurl->Url('module=news&action=show&name=kwiatki-sa-zolte&id=2').'">Aktualnosc o id 2</a><br />';
  7. echo '</div>';



Ładują się podstrony np
podstrona=nazwa.php (w swich case)

Zakładając że potrzebuję wysłać w linku dodatkowe wartości takie jak id usera i wygląda to dobrze ale nie mogę wysłać wartości do odpowiedniego GET-a
domyślam się że mogę tylko do funkcji.

Kiedy linki wyglądają tak

  1. echo '<div style="margin-top:50px;">';
  2. echo '<a href="'.$nurl->Url().'">Strona glowna</a><br />';
  3. echo '<a href="'.$nurl->Url('module=test&action=jakasakcja&par1=war1&par2=war2&par3=war3').'">Modul testowy z jakas akcja</a><br />';
  4. echo '<a href="'.$nurl->Url('module=news&action=list').'">Lista aktualnosci</a><br />';
  5. echo '<a href="'.$nurl->Url('module=news&action=show&name=nospor-strajkuje?id=5').'">Aktualnosc o id 5</a><br />';
  6. echo '<a href="'.$nurl->Url('module=news&action=show&name=kwiatki-sa-zolte?id=2').'">Aktualnosc o id 2</a><br />';
  7. echo '</div>';
  8.  


Czyli zmieniłem tylko & na ? przed id wówczas jest ok wysyła ale linki wyglądają tak
  1. <a href="http://127.0.0.1/Podstawa/nospor-strajkuje?id=5,.html" target="_blank">http://127.0.0.1/Podstawa/nospor-strajkuje?id=5,.html</a>


Nie wiem jak to przeskoczyć.

Proszę o pomoc
nospor
Cytat
Czyli zmieniłem tylko & na ?
Ale czemu? Czemu to zmieniłeś? Czy ja w przykładach co sam tu zacytowałeś zamieniam jakieś & na ? questionmark.gif

Pokaż jaki chcesz mieć link końcowy, bo jak do tej pory wszystkie linki masz takie jak moje w przykladach i na dodatek źle przepisałeś zmieniając z jakiegoś powodu & na ?
lukaszk
Potrzebuję wysłać w linku id poza funkcję. Niestety nie wywołuje się kiedy jest znak & tylko jak zmienię na ?
W czym robię błąd.
Chcę aby wywoływały się czynności zawarte w linku a tak nie jest.
Co do samych linków działa idealnie. Pozostało mi tylko to.


if($_GET['id']==5) {
cos
} else {
Cos innego
}
nospor
To
$nurl->Url('module=news&action=show&name=nospor-strajkuje&id=5')
działa ok.

To co ty zmieniles:
$nurl->Url('module=news&action=show&name=nospor-strajkuje?id=5')
Jest złe.
Nie wiem o co ci chodzi innego.

ps: ty ten swoj kod
if($_GET['id']==5) {
cos
} else {
Cos innego
}
wykonujesz przed czy po:
$nurl->Decode();
?
lukaszk
I właśnie dziś w pracy tak myślałem smile.gif

Działa kod
marcin-1981
Cytat(nospor @ 16.11.2011, 19:21:33 ) *
Kod jak ten:
<a href='".$_SERVER['PHP_SELF']."?pagenum=".$page.$this->qry_string."'>Następny</a>
generują ci linki w klasie stronicowania. Musisz więc w te kody wstawić $nurl.



Staram się i zrobiłem tak
standardowy link
  1. $nav .= "<li class=current><a href='".$_SERVER['PHP_SELF']."?pagenum=$page"."$this->qry_string'>".$page."</a></li>";
  2.  

zmieniam na
  1. $nav .= '<li class=current><a href="'.$nurl->Url(''.$_SERVER['PHP_SELF'].'"?pagenum=$page"."$this->qry_string').'">'.$page.'</a><br />';


Pojawia się błąd
Fatal error: Call to a member function Url() on a non-object in H:\Program Files\VertrigoServ\www\Main\class\pagination.php on line 124

Dodam że na początku jest

  1. require_once('./NUrl.class.php');
nospor
  1. global $nurl;
  2. $nav .= '<li class=current><a href="'.$nurl->Url("pagenum=$page"."$this->qry_string").'">'.$page.'</a><br />';
-marcin-1981-
Działa ale wynik nie tak jak myślałem

Po kliknięciu 1 2 czy 3 link wygląda tak

  1. <a href="http://127.0.0.1/pagenum/2/" target="_blank">http://127.0.0.1/pagenum/2/</a>


a chciałbym aby to wycinało
nospor
Co wycinało?
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.