Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Codeigniter][PHP] Pobieranie produktów i duplikaty
Forum PHP.pl > Forum > PHP
pjamalia
Witam,

Mam pewien kurde problemik. Mam widok w którym sobie wyświetlam ładnie produkty pobrane z DB. Chcę je wyświetlić jeden obok drugiego, trzy produkty w wierszu, wierszy ma być maksylalnie, no niech będzie 3. Wszystko już ładnie oprogramowałem, paginację, itd. Sęk w tym, że wyświetlają mi się podwójnie produkty, nie chcę duplikatów. Kod widoku poniżej, chciałem zastąpić foreach zwyklym for ale coś mi nie wyszło.
Czy mógłbym poprosić o drobną pomoc?

  1. <?php
  2. $tmpname = null;
  3. ?>
  4.  
  5. <table class="pagination" align="center">
  6. <tr class="pagination">
  7. <td class="pagination">
  8. </td>
  9. <td class="pagination">
  10. <div id="pagination">
  11. <?php echo $this->pagination->create_links(); ?>
  12. </div>
  13. </td>
  14. <td class="products">
  15. </td>
  16. </tr>
  17. </table>
  18. <br />
  19. <table class="products_main" align="center">
  20. <th class="products_main">Nasze produkty</th>
  21. <tr><td></td></tr>
  22. </table>
  23. <table class="products_main">
  24. <tr>
  25. <?php
  26. $ile = count($products);
  27. $licz = 0;
  28. for($i=1;$i<$ile;$i++)
  29. {
  30.  
  31. ?>
  32.  
  33. <td valign="top" align="center">
  34. <?php
  35. foreach($products as $p):
  36. if($tmpname != $p['name'])
  37. {
  38. ?>
  39. <table class="products" >
  40. <th id="products_text">
  41. <?php echo $p['name']; ?>
  42. </th><th id="products_text">dane o produkcie</th>
  43. <tr class="products" >
  44. <td class="products-img">
  45.  
  46. <?php
  47. $file_extension = substr($p['image'],strlen($p['image'])-4,4);
  48. $tmpfilename = substr($p['image'],0,strlen($p['image'])-4);
  49. $filename = $tmpfilename.'_big'.$file_extension;
  50. ?>
  51.  
  52. <a href="<?php echo base_url(); ?>assets/image/products/<?php echo $p['id'].'/'. $filename; ?>" rel="lightbox">
  53. <img src="<?php echo base_url(); ?>assets/image/products/<?php echo $p['id'].'/'. $p['image']; ?>" width="120" height="90" alt="" />
  54. </a>
  55. </td>
  56. <td class="products-01" id="products_text">
  57. <b>Nazwa produktu: </b><?php echo $p['name']; ?>
  58. <br />
  59. <b>Opis produktu</b>
  60. <br />
  61. <?php
  62.  
  63. echo $p['productDescription'];
  64. //echo $row_count;
  65. ?>
  66. <br />
  67. Cena: <?php echo $p['price']; ?> PLN
  68. <br />
  69. <b>pełny opis</b>
  70. <?php echo anchor('cart/Cart_detail/'.$p['id'],'OPIS',''); ?>
  71. </td>
  72. </tr>
  73. </table>
  74. <br />
  75. <?php
  76. $tmpname = $p['name'];
  77. }
  78. endforeach;
  79. ?>
  80. </td>
  81.  
  82.  
  83. <?php
  84. if(++$licz==3)
  85. {
  86. $licz = 0;
  87. ?>
  88.  
  89. </tr>
  90. <tr>
  91. <?php
  92. }
  93. }
  94. ?>
  95. </tr>
  96. </table>


pozdrawiam serdecznie

OKI skoro nikt tu się nie wypowiedział, rozwiązanie poniżej, może komuś się przyda może nie:

  1. <?php
  2. $tmpname = null;
  3. ?>
  4.  
  5. <table class="pagination" align="center">
  6. <tr class="pagination">
  7. <td class="pagination">
  8. </td>
  9. <td class="pagination">
  10. <div id="pagination">
  11. <?php echo $this->pagination->create_links(); ?>
  12. </div>
  13. </td>
  14. <td class="products">
  15. </td>
  16. </tr>
  17. </table>
  18. <br />
  19. <table class="products_main" align="center">
  20. <th class="products_main" height="5px">Nasze produkty</th>
  21. <tr><td></td></tr>
  22. </table>
  23.  
  24. <div align="center">
  25.  
  26. <table class="products_main">
  27. <tr>
  28. <?php
  29. $ile = count($products);
  30. $licz = 0;
  31. ?>
  32.  
  33. <?php
  34. foreach($products as $p):
  35. if($tmpname != $p['name'])
  36. {
  37. $licz++;
  38. ?>
  39. <td valign="top" align="center">
  40. <table class="products" >
  41. <th id="products_text">
  42. <?php
  43. echo $p['name'];
  44. echo $licz;
  45. ?>
  46. </th><th id="products_text">informacje ogłoszenia</th>
  47. <tr class="products" >
  48. <td class="products-img">
  49.  
  50. <?php
  51. // zabawa z nazwą pliku do wyświetlenia w powiększeniu zdjęcia
  52. $file_extension = substr($p['image'],strlen($p['image'])-4,4);
  53. $tmpfilename = substr($p['image'],0,strlen($p['image'])-4);
  54. $filename = $tmpfilename.'_big'.$file_extension;
  55. ?>
  56.  
  57. <a href="<?php echo base_url(); ?>assets/image/products/<?php echo $p['id'].'/'. $filename; ?>" rel="lightbox">
  58. <img src="<?php echo base_url(); ?>assets/image/products/<?php echo $p['id'].'/'. $p['image']; ?>" width="120" height="90" alt="" />
  59. </a>
  60. </td>
  61. <td class="products-01" id="products_text">
  62. <b>Nazwa produktu: </b><?php echo $p['name']; ?>
  63. <br />
  64. <b>Opis produktu</b>
  65. <br />
  66. <?php
  67.  
  68. echo $p['productDescription'];
  69. //echo $row_count;
  70. ?>
  71. <br />
  72. Cena: <?php echo $p['price']; ?> PLN
  73. <br />
  74. <b>pełny opis</b>
  75. <?php echo anchor('cart/Cart_detail/'.$p['id'],'OPIS',''); ?>
  76. </td>
  77. </tr>
  78. </table>
  79. <br />
  80. <?php
  81. if($licz==2)
  82. {
  83. $licz = 0;
  84. ?>
  85. </td>
  86. </tr>
  87. <tr>
  88. <?php
  89. }
  90. ?>
  91. <?php
  92. $tmpname = $p['name'];
  93. }
  94. endforeach;
  95. ?>
  96.  
  97. </tr>
  98. </table>
  99.  
  100. </div>
szok
  1. $file_extension = substr($p['image'],strlen($p['image'])-4,4);
  2. $tmpfilename = substr($p['image'],0,strlen($p['image'])-4);
  3. $filename = $tmpfilename.'_big'.$file_extension;


A co w chwili gdy rozszerzenie będzie .jpeg ?
W dodawaniu produktu utwórz sobie od razu miniature z katalog powiedzmy thumbs z taka sama nazwą pliku który masz.
Lub zapisz sobie rozszerzenie pliku, w chwili uploadu pliku na serwer w CI dostajesz tablice z informacjami o pliku i tam masz:
  1. [file_ext] => .jpg


Co do wyśweitlania kolumn to lepiej uzyć divów i w stylach dać float:left; wtedy divy układają się jeden obok drugiego, jak skończy im się miejsce ładuje się na samym dole.

Dodatkowo w widokach stosuj:
  1. <?php foreach($list as $item): ?>
  2. cos tam
  3. <?php endforeach; ?>

Tak jak to napisane w dokumentacji frameworka, przynajmniej wiadomo o co biega.
http://codeigniter.com/user_guide/general/views.html

A do usuwania duplikatów z zapytania masz:
  1. $this->db->distinct();
  2. $this->db->get('table');
  3.  
  4. // Produces: SELECT DISTINCT * FROM table


Choć sprawdź sobie zapytanie jakie wykonujesz bo może tam jest coś nie tak. Porównanie po nazwie produktu jest całkowicie bez sensu, bo w sklepie możesz mieć produkt o takiej samej nazwie, a np atrybuty jego się różnią.
pjamalia
Witam,

Jeżeli chodzi o duplikaty i pobieranie danych z bazy danych to dobrą szkołą jest tworzyć takie zapytania żeby unikać radzieckiej funkcji distinct zakochany.gif

Pozdrawiam temat można zamknąc...
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.