Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 2 odgovora
  • 2.793 pregleda

Najnovija ↓

Višerazinske kategorije 08.06.2012. u 17:23 · pre 175 meseci #1
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?
Re: Višerazinske kategorije 10.06.2012. u 11:54 · pre 175 meseci #2
Najbolje rješenje za taj problem je da koristiš takozvani "Nested Tree Model". Imaš prilično pojednostavljeno uputstvo ovdje.
Potpis
If we knew what it was we were doing, it would not be called research, would it?
Re: Višerazinske kategorije 17.06.2012. u 11:14 · pre 175 meseci #3
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;
    }

Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme