Kako napraviti da bude neogranicen broj podkategorija u kate

Kako napraviti da bude neogranicen broj podkategorija u kate

offline
  • susok  Male
  • Novi MyCity građanin
  • Pridružio: 03 Sep 2009
  • Poruke: 23
  • Gde živiš: BH

Napisano: 26 Nov 2010 20:58

Pozdrav!

Pravim jedan sajt, i sad bi da napravim da mogu na sajtu dodavati kategorije, i kako da napravim da u kategoriju mogu dodavati podkategorije i u podkategorije podkategorije (da neograniceno mogu dodavati podkategorija u podkateoriju). npr.

=>Automobili
==>Mercedes
===>djelovi mercedesa
====>karburator mercedesa
=>Životinje
==>krava

Dopuna: 26 Nov 2010 21:03

evo ja sam probo vako

mysql tablica

  1. CREATE TABLE `blog_kategorije` (
  2.   `id_blog_kategorije` int(11) NOT NULL AUTO_INCREMENT,
  3.   `ime_kategorije` varchar(50) NOT NULL,
  4.   `opis_kategorije` varchar(250) NOT NULL,
  5.   `kljucne_rijeci_kategorije` varchar(300) NOT NULL,
  6.   `kategorija_u_kategoriji` int(11) NOT NULL default '0',
  7.   `datum_stvaranja_kategorije` datetime NOT NULL,
  8.   PRIMARY KEY (`id_blog_kategorije`)
  9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=1;



a php ko mi je vako

  1. <?php
  2. //Ovo spaja na mysql server i ispisuje grešku ako se ne spoji uspiješno.
  3. if (!$db=@mySQL_connect($server, $korisnicko_ime, $lozinka))
  4. {
  5.  echo'Nismo se mogli spojiti na MySQL server';
  6. }
  7. if (!mySQL_select_db($naziv_baze, $db))
  8. {
  9.  echo'Greska pri odabiru baze!';
  10. }
  11. function showMenu($data,$current=0,$padding=0){
  12.   $out = '';
  13.   if(isset($data['kategorije'][$current])){
  14.    
  15.      $style = ($data['polja'][$current]['kategorija_u_kategoriji'] == 0) ? '' : 'style="padding-left:'.$padding.'px;"';
  16.        
  17.       $out .= '<option '.$style.'>'.$data['polja'][$current]['ime_kategorije'].'</option>';   
  18.       foreach($data['kategorije'][$current] as $id){
  19.           if(isset($data['kategorije'][$id])){     
  20.               $out .= showMenu($data,$id,$padding+=10);       
  21.           }else{
  22.               $out .= '<option value="'.$data['polja'][$id]['id_blog_kategorije'].'" style="padding-left: '.$padding.'px;">';
  23.               $out .= $data['polja'][$id]['ime_kategorije'].'</option>';
  24.           }           
  25.       } 
  26.   }
  27.   return $out;
  28. }
  29. $rez = mysql_query('select * from blog_kategorije') or die(mysql_error());
  30. while($row = mysql_fetch_array($rez)){
  31.   $kat['polja'][$row['id_blog_kategorije']] = $row;
  32.   $kat['kategorije'][$row['kategorija_u_kategoriji']][] = $row['id_blog_kategorije'];
  33. }
  34. ?>
  35. <select>
  36. <option selected></option>
  37. <?php 
  38. echo showMenu($kat);
  39. ?>
  40. </select>


e ovo dobro radi al sad je problem sto nemogu da napravim da mi kategorije budu poredane npr. vako

=>Automobili
==>Mercedes
===>djelovi mercedesa
====>karburator mercedesa
=>Životinje
==>krava

već su poredane vako

Automobili
Mercedes
djelovi mercedesa
karburator mercedesa
Životinje
krava


Molio bih vas za pomoć

Hvala!

Dopuna: 27 Nov 2010 23:10

dajte nije valjda da niko nezna kako da ovo napravim,

moželi te mi vi reći koji drugi način da ovo napravim

da mogu neograniceno ubacivati kategorije u kategorije



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • lnenad  Male
  • Stručni saradnik
    Web
  • Nenad
  • Arhitetak
  • Pridružio: 16 Jan 2007
  • Poruke: 2860
  • Gde živiš: Bijeljina

Nemam vremena sad da pogledam citav kod. Uglavnom to sto ti hoces zahtijeva logiku i malo komplikovaniji unos podataka, ali ima vise rjesenja za ovaj problem pa mozda ti neko ponudi bolji, ja bih to ovako uradio.

Kad upisujes ime kategorije pored nje upises i broj, e sad taj broj bi predstavljao nivo te kategorije.

0
1
2
3

Razumijes, i ti to samo treba da tako pri obradi podataka prikazes, prostije ja mislim ne moze a dozvoljava ti da ides do n kategorija.

E sad, konkretan primjer za mercedesa, stavis za njega 01, mercedes ovo 02, mercedes ono 03. Itd, pa mozes i 2 broja da stavis 01 01, 01 02. Nadam se da si me shvatio.



offline
  • susok  Male
  • Novi MyCity građanin
  • Pridružio: 03 Sep 2009
  • Poruke: 23
  • Gde živiš: BH

pa ja sam stavio u bati

  1. `kategorija_u_kategoriji` int(11) NOT NULL default '0',


kategorije koje imaju 0 one su glavne

a one koje imaju u `kategorija_u_kategoriji` int(11) NOT NULL id od neke kategorije bice podkategorije te kategorije, nadam se da me svatate, e sad sam ja dobro napravio kod

  1. <?php
  2. require('Postavke.php');
  3. ?>
  4. <html>
  5.    <head>
  6.       <meta http-equiv="content-type" content="text/html; charset=<?php echo $kodiranje ?>" />
  7.    </head>
  8.    <body>   
  9.  
  10. <?php
  11. function showMenu($data,$current=0,$padding=0)
  12. {
  13.  
  14.     $out = '';
  15.    
  16.     if(isset($data['kategorije'][$current]))
  17.    {
  18.      
  19.        $style = ($data['polja'][$current]['kategorija_u_kategoriji'] == 0) ? '' : 'style="padding-left:'.$padding.'px;"';
  20.          
  21.         $out .= '<div '.$style.'>'.$data['polja'][$current]['ime_kategorije'].'</div>';
  22.       
  23.         foreach($data['kategorije'][$current] as $id)
  24.       {
  25.             if(isset($data['kategorije'][$id]))
  26.          {     
  27.                 $out .= showMenu($data,$id,$padding+=10);       
  28.             } else
  29.          {
  30.                 $out .= '<div style="padding-left:'.$padding.'px;">';
  31.                 $out .= $data['polja'][$id]['ime_kategorije'].'</div>';
  32.             }
  33.          
  34.         } 
  35.       
  36.     }
  37.    
  38.     return $out;
  39.    
  40. }
  41.  
  42. $rez = mysql_query('select * from blog_kategorije') or die(mysql_error());
  43.  
  44. while($row = mysql_fetch_array($rez))
  45. {
  46.     $kat['polja'][$row['id_blog_kategorije']] = $row;
  47.     $kat['kategorije'][$row['kategorija_u_kategoriji']][] = $row['id_blog_kategorije'];
  48. }
  49.  
  50. ?>
  51.  
  52.  
  53. <?php 
  54. echo showMenu($kat);
  55. ?>
  56.  
  57.    </body>
  58. </html>


Al nemogu da poredam da mi stoje jedna ispod druge

vako

=>Automobili
==>Mercedes
===>dijelovi mercedesa

u mene stoji sve vako

=>Automobili
=>Mercedes
=>dijelovi mercedesa

neznam kako da napravim da mi za svaku podkategoriju se doda jedan znak =

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3760
  • Gde živiš: 127.0.0.1

Ne moze to tako Smile tebi treba rekurzivna funkcija, odnosno funkcija koja ce da poziva samu sebe Wink

  1. function children($id,$indent) {
  2.    $q = mysql_query("SELECT id_blog_kategorije,ime_kategorije
  3.                     FROM `blog_kategorije`
  4.                     WHERE `kategorija_u_kategoriji` = '" . $id . "'
  5.                     ORDER BY `ime_kategorije` ASC");
  6.    if (mysql_num_rows($q)) {
  7.       while ($d = mysql_fetch_assoc($q)) {
  8.          $indent .= ($id == 0) ? '' : "   ";
  9.          echo $indent . " => " . $d['ime_kategorije']
  10.          children($d['id_blog_kategorije'],$indent);
  11.          $indent = substr($indent,0,18);
  12.       }
  13.    }
  14. }


i onda, tamo gde zelis da se izlistaju kategorije, jednostavno je pozoves:

  1. children('0','');

offline
  • susok  Male
  • Novi MyCity građanin
  • Pridružio: 03 Sep 2009
  • Poruke: 23
  • Gde živiš: BH

Hvala Rastafarii

skripta dobro radi, možeš li mi samo još reći kako da napravim da za svaku podkategoriju doda po jedan =

vako

=>Automobili
==>Mercedes
===>dijelovi od mercedesa
=>Životinje

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3760
  • Gde živiš: 127.0.0.1

Ovako:

  1. function children($id,$indent) {
  2.    $q = mysql_query("SELECT id_blog_kategorije,ime_kategorije
  3.                     FROM `blog_kategorije`
  4.                     WHERE `kategorija_u_kategoriji` = '" . $id . "'
  5.                     ORDER BY `ime_kategorije` ASC");
  6.    if (mysql_num_rows($q)) {
  7.       while ($d = mysql_fetch_assoc($q)) {
  8.          $indent .= ($id == 0) ? '' : "=";
  9.          echo $indent . "=&gt; " . $d['ime_kategorije']
  10.          children($d['id_blog_kategorije'],$indent);
  11.          $indent = substr($indent,0,1);
  12.       }
  13.    }
  14. }


Verujem da mozes da se snadjes da ubacis linkove sam Smile

offline
  • susok  Male
  • Novi MyCity građanin
  • Pridružio: 03 Sep 2009
  • Poruke: 23
  • Gde živiš: BH

Kako sad da ubacim linkove

evo probo sam ovako al neradi

  1. <?php
  2.    
  3. require('sajt/Postavke.php'); //Poziva Postavke.php.   
  4.  
  5. function blog_kategorije($id,$indent,$a)
  6. {
  7.    $pribavlja=mysql_query("SELECT id_blog_kategorije, ime_kategorije FROM blog_kategorije WHERE kategorija_u_kategoriji='$id' ORDER BY datum_stvaranja_kategorije ASC");
  8.    if(mysql_num_rows($pribavlja))
  9.    {
  10.       while($redak=mysql_fetch_array($pribavlja))
  11.       {
  12.          $indent.=($id==0)?'':' _ ';
  13.          
  14.          echo $a;
  15.  
  16.          blog_kategorije($redak['id_blog_kategorije'],$indent,$a);
  17.          $indent=substr($indent,0,1);
  18.       }
  19.    }
  20. }
  21.  
  22.  
  23. $t='<div>'.$indent.''.$redak['ime_kategorije'].'</div>';
  24.  
  25. blog_kategorije(0,'',$t);
  26.  
  27. ?>

offline
  • Pridružio: 21 Apr 2007
  • Poruke: 98

Pogledaj ovo:
[Link mogu videti samo ulogovani korisnici]

offline
  • Blood  Male
  • Ugledni građanin
  • Pridružio: 26 Jul 2003
  • Poruke: 384
  • Gde živiš: Beograd

Evo ovde primera kako je najbolje konstruisati bazu:
[Link mogu videti samo ulogovani korisnici]

Ko je trenutno na forumu
 

Ukupno su 1260 korisnika na forumu :: 74 registrovanih, 11 sakrivenih i 1175 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., ajo baba, alberto, Aleksa-, Automaticar, Banovo Brdo, BOXRR, darionis, darkdruid72, deLacy, dj.ape, ds69, dulleo, dzoni19, Electron, Feller, FOX, g_g, galerija, Georgius, grunff2, GT, ihis, IQ116, jackreacher011011, janbo, Jezekijel, JK, Još malo pa deda, K-1A, komsija1, Kubovac, Lieutenant, Litostroton, ljuba.b, Lošmi, Mercury, Milan A. Nikolic, Milan Miscevic, milenko crazy north, miljannis, Milos1389, Miškić, Mićko, MK10, mocnijogurt, Mzee, N.e.m.a.nj.a., nekdo, niksa517, Nomica, OtacMakarije, Pegggio, PerLK, precan, procesor, raketaš, RAKITNICA, rakivan, royst33, S94, sabros, sekretar, sistem22, skvara, Trpe Grozni, TRZH92, vathra, Vatreni Zmaj, Veless, vuksa72, yufighter, Zoran1959, Zvlade