Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Višerazinske kategorije

[es] :: PHP :: Višerazinske kategorije

[ Pregleda: 1766 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

weleb

Član broj: 284399
Poruke: 38
*.adsl.net.t-com.hr.



Profil

icon Višerazinske kategorije08.06.2012. u 16:23 - pre 143 meseci
Pozdrav ekipa,

Ovako imam sljedeći problem, radim jednu "aplikaciju" koja ima mogućnost ugnježđenih kategorija iliti djece i roditelja (više razinskih)...vidio sam da WP koristi za to parent element u bazi pa sma ga dodao i razumijem princip funkcioniranja ali ne kako to programski riješiti

npr
Kategorija A
- Kategorija A_1
-- Kategorija A_1_1

Tablice su:
category (id_kat, parent, naziv_kat)
post (id_pos, naziv_pos, kat_pos)

Moje pitanje je kako sada za jedan post (bilo što) ispisat sve razine kategorija?
 
Odgovor na temu

uth0x000092

Član broj: 256726
Poruke: 7
*.paleol.net.

Sajt: 192.168.0.1


Profil

icon Re: Višerazinske kategorije10.06.2012. u 10:54 - pre 143 meseci
Najbolje rješenje za taj problem je da koristiš takozvani "Nested Tree Model". Imaš prilično pojednostavljeno uputstvo ovdje.
If we knew what it was we were doing, it would not be called research, would it?
 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
188.124.193.*



+18 Profil

icon Re: Višerazinske kategorije17.06.2012. u 10:14 - pre 143 meseci
Ja sam to rjesio tako sto sam napunio niz kategorija i dodao ovu funkciju:

Code:

private function build_tree()
    {
        $refs = array();
        $list = array();
        $arr = $this->categories;

        foreach($arr as $data)
        {
            $thisref = & $refs[ $data['id'] ];
             
            $thisref['parent_id'] = $data['parent_id'];
            $thisref['name'] = $data['name'];
             
            if ($data['parent_id'] == 0) {
                $list[ $data['id'] ] = &$thisref;
            } else {
                $refs[ $data['parent_id'] ]['children'][ $data['id'] ] = &$thisref;
            }
        }
        return $list;
    }


Zatim primjer upotrebe ovoga:

Code:

public function get_cat_options($selected_id = null)
    {
        $arrTree = $this->build_tree();
        $html = '<option value="">-----</option>';
        foreach($arrTree as $id => $data)
        {
            $html .= $this->print_option($id, $data, 0 , $selected_id );
        }
        return $html;
    }
    
    private function print_option($id , $data, $lvl , $selected_id = null )
    {
        $html = '<option value="' . $id . '" ' . ($selected_id==$id ? 'selected' : '') . '>' . str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;',$lvl ) . $data['name'] . '</option>';
        if( @count($data['children']))
        {
            foreach($data['children'] as $k => $v)
            {
                $html .= $this->print_option($k,$v,$lvl+1 , $selected_id);
            }
        }
        return $html;
    }

 
Odgovor na temu

[es] :: PHP :: Višerazinske kategorije

[ Pregleda: 1766 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.