[ nepoverljiv @ 24.10.2015. 15:46 ] @
Imam dve tabele, menu i submenu

Tabela menu: id_menu, menu_name

1, Menu 1
2, Menu 2
3, Menu 3

Tabela submenu; id_sub, id_menu, sub_name

1,1, Sub 1.1
2,1, Sub 1.2
3,1, Sub 1.3
4,2, Sub 2.1
5,3, Sub 3.1
6,3, Sub 3.2

Kako da napisem model, contoler i view da bih dobio listu na sledeci nacin:

Menu 1
Sub 1.1
Sub 1.2
Sub 1.3
Menu 2
Sub 2.1
Menu 3
Sub 3.1
Sub 3.2

Hvala unapred
[ Tpojka @ 24.10.2015. 16:56 ] @
Iz dokumentacije:

Code (php):

$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$this->db->order_by('title DESC, name ASC');
$query = $this->db->get();
 


Pretpostavljam ovako nekako:

Code (php):

$this->db->select('menu_name, sub_name');
$this->db->from('menu');
$this->db->join('submenu', 'submenu.id_menu = menu.id_menu');
$this->db->order_by('id_menu ASC, id_sub ASC');
$query = $this->db->get();
 
[ nepoverljiv @ 24.10.2015. 17:04 ] @
Izbacuje mi gresku kod ORDER BY, izbrisao sam taj red. Kako da napisem controler i view?
[ Tpojka @ 24.10.2015. 17:11 ] @
Jesi li prelistao dokumentaciju?

Controller.
View.
Model.

Stvar je u tome da ti niko nece pisati kod za dz, vec moras da postavis kod koji ne radi da bi mogao ocekivati pomoc u tom dijelu.

edit:
Pa podijeli s nama koja greska je u pitanju - sta pise.
[ nepoverljiv @ 24.10.2015. 17:16 ] @
Model:

Code:

     public function Kategorije()
    {

        $query=$this->db->select('*')      
                        ->from('menu')
                        ->order_by('top','ASC')
                        ->get();
                        
        return $query->result();  
    }


Controller:

Code:

    public function Index()
    {        
        $data['kategorije']=$this->users_mod->Kategorije();
        
        $this->load->view('template/main',$data);
    }



View:
Code:

if(count($kategorije) > 0)   
                    {
                        foreach($kategorije as $row)
                        { 
                          echo "<div class='panel-group panel-meni' id='accordion'>
                            <div class='panel panel-default panel-menija'>
                              <a data-toggle='collapse' data-parent='#accordion' href='#collapse{$row->top}'><div class='panel-heading meni-kategorija'>
                                <h4 class='panel-title lista-kategorija-font'>
                                  {$row->menu_name}
                                </h4>
                              </div></a> 
                                  <div id='collapse{$row->top}' class='panel-collapse collapse collapse podkategorija'>
                                    <div class='panel-body podkategorija'>
                                     
                                        <ul class='lista-kategorija lista-kategorija-font'>
                                            <li>Pod 1</li>
                                            <li>Pod 2</li>
                                            <li>Pod 3</li>
                                        </ul>
                                    
                                    </div>
                                  </div>
                             </div>
                            </div>";        
                                    
                        }
                    } 


E ovaj kod radi i iscitava samo kategorije, a podkategorije ne znam da ubacim, u delu:
Code:

                                        <ul class='lista-kategorija lista-kategorija-font'>
                                            <li>Pod 1</li>
                                            <li>Pod 2</li>
                                            <li>Pod 3</li>
                                        </ul>



[ Panajotov @ 24.10.2015. 17:49 ] @
Ovako nesto?
Code:

foreach($meni as $m):
     echo $m->ime_menija;
foreach($submeni as $s):
     if($m->submeni_id == $s->id):
          echo $s->ime_sub;
     endif
endforeach;
endforeach;
[ nepoverljiv @ 24.10.2015. 18:27 ] @
Sorry, ali ne znam kako da ga primenim posto varijable $meni i $submeni ne znam kako si dobio
[ Panajotov @ 24.10.2015. 18:59 ] @
Pa u drugoj poruci imaš odgovor. Ne možeš iz baze selektovati samo meni i očekivati da se submeni sam zalepi za meni :)
Primer, ako imaš $data['meni'], tako uzmi i $data['podmeni'], u jednom selektuj meni, a u drugom podmeni i onda primeni ovo što sam ti gore napisao.
[ Tpojka @ 24.10.2015. 21:00 ] @
Postavljeno u metod da se testira, pa treba odgovarajuce dijelove prebaciti u model (DB related) i view (foreach loop mostly).

Code (php):

public function t()
{
     $sql = "SELECT * FROM `menu`";
     $menu = $this->db->query($sql)->result_array();
         
     foreach ($menu as $k => $v)
     {
          if ($k === 0)
               $ids = $v['id_menu'];
          else
               $ids .= ',' . $v['id_menu'];
     }
         
     $sql = "SELECT * FROM `submenu` WHERE `submenu`.`id_menu` IN (" . $ids . ")";
     $submenu = $this->db->query($sql)->result_array();
         
     $result['ids'] = explode(',',$ids);
     $result['menu'] = $menu;
     $result['submenu'] = $submenu;
         
     foreach ($result['ids'] as $k => $menu_id)
     {
          echo $result['menu'][$k]['menu_name'], "<br>";
               
          foreach ($result['submenu'] as $l => $sub)
          {
               if (isset($result['submenu'][$l]['id_menu']) && $result['submenu'][$l]['id_menu'] === $menu_id)
               {
                    echo $result['submenu'][$l]['sub_name'], "<br>";
               }
          }
     }
}
 
[ Panajotov @ 24.10.2015. 22:24 ] @
@Trojka, ako nije razumeo ono što si napisao u drugoj poruci, teško da će to. Ne želim da omalovažavam nikog, ali smatram da su to neke stvari koje nisu teške, a takođe su veoma logične.

Pozdrav
[ nepoverljiv @ 25.10.2015. 17:07 ] @
Citat:
Tpojka:
Postavljeno u metod da se testira, pa treba odgovarajuce dijelove prebaciti u model (DB related) i view (foreach loop mostly).

Code (php):

public function t()
{
     $sql = "SELECT * FROM `menu`";
     $menu = $this->db->query($sql)->result_array();
         
     foreach ($menu as $k => $v)
     {
          if ($k === 0)
               $ids = $v['id_menu'];
          else
               $ids .= ',' . $v['id_menu'];
     }
         
     $sql = "SELECT * FROM `submenu` WHERE `submenu`.`id_menu` IN (" . $ids . ")";
     $submenu = $this->db->query($sql)->result_array();
         
     $result['ids'] = explode(',',$ids);
     $result['menu'] = $menu;
     $result['submenu'] = $submenu;
         
     foreach ($result['ids'] as $k => $menu_id)
     {
          echo $result['menu'][$k]['menu_name'], "<br>";
               
          foreach ($result['submenu'] as $l => $sub)
          {
               if (isset($result['submenu'][$l]['id_menu']) && $result['submenu'][$l]['id_menu'] === $menu_id)
               {
                    echo $result['submenu'][$l]['sub_name'], "<br>";
               }
          }
     }
}
 


To je to, ovo sam ubacio u controller i video sam da ga izlistao na strani onako kako sam ja zamislio. Probao sam da u view prebacim sledeci deo:

Code (php):

     foreach ($result['ids'] as $k => $menu_id)
     {
          echo $result['menu'][$k]['menu_name'], "<br>";
               
          foreach ($result['submenu'] as $l => $sub)
          {
               if (isset($result['submenu'][$l]['id_menu']) && $result['submenu'][$l]['id_menu'] === $menu_id)
               {
                    echo $result['submenu'][$l]['sub_name'], "<br>";
               }
          }
     }
 


Ali naravno mi izbacuje gresku da su nepoznate varijable. Sad pokusavam to da dokucim kako da odradim.

P.S. @Panajotov mozda za tebe ove stvari nisu teske jer ih znas pa ti to deluje smesno, kao sto sigurno i za mene deluju neke stvari smesne koje ti mozda ne znas, ali ne treba se smejati drugome. Treba coveka nauciti da peca umesto mu dati ribu, ali mu prvo dati par riba pre nego sto pocne kapirati pecanje.

[ Tpojka @ 25.10.2015. 18:40 ] @
Nema besplatnog rucka. :D
Iako je vec sve rijeseno, evo jos malo pojednostavljeno.
U model ide sav dio koda do foreach petlje.
S tim da treba dodati
Code (php):
return (count($result['ids'] >= 1)) ? $result : FALSE;

, a u controller-u treba da se postavlja u varijablu kako vec i stoji.
Je li tako uradjeno?
PHP nije bas copy/paste. Moras da pratis ulazne i izlazne varijable. Tj moras znati sta su ti ulazne varijable i sta se ocekuje kao izlaz.
Greska bi vjerovatno bila to sto se u mom kodu vrse operacije nad $result nizom, a tvoj view fajl vjerovatno ocekuje $kategorije varijablu.
Ajd' sad zabaci i pecaj. Ako ne bude islo, jos malo krpi mrezu.
[ Panajotov @ 25.10.2015. 19:58 ] @
@nepoverljiv nisam imao nameru da te vređam, izvini ako si se našao uvređenim nije mi to bila namera. Hteo da ti nagovestim da neke stvari ne možeš da radiš kopi-pejst ili da očekuješ gotovo rešenje. Ono što ti upravo radiš, radio sam i ja, radi verovatno svako ko je nov u tome, a to je da ne razumeš šta se tu zapravo dešava. Kao što je @Trojka rekao, PHP nije baš kopi-pejst. Moraš da naučiš neke osnovne stvari, kao na primer nizove.
Pozdrav
[ nepoverljiv @ 31.10.2015. 19:24 ] @
Juhuuu to je to :D

Model:

Code:

    public function Proba()
    {
         $sql = "SELECT * FROM `menu`";
         $menu = $this->db->query($sql)->result_array();
             
         foreach ($menu as $k => $v)
         {
              if ($k === 0)
                   $ids = $v['id_menu'];
              else
                   $ids .= ',' . $v['id_menu'];
         }
             
         $sql = "SELECT * FROM `submenu` WHERE `submenu`.`id_menu` IN (" . $ids . ")";
         $submenu = $this->db->query($sql)->result_array();
             
         $result['ids'] = explode(',',$ids);
         $result['menu'] = $menu;
         $result['submenu'] = $submenu;
         
         return (count($result['ids'] >= 1)) ? $result : FALSE;  
    }


Controller:

Code:

    public function Index()
    {        
        $data['proba']=$this->users_mod->Proba();

        $this->load->view('template/main',$data);
    }


View:

Code:


     foreach ($result['ids'] as $k => $menu_id)
     {
          echo $result['menu'][$k]['menu_name'], "<br>";
               
          foreach ($result['submenu'] as $l => $sub)
          {
               if (isset($result['submenu'][$l]['id_menu']) && $result['submenu'][$l]['id_menu'] === $menu_id)
               {
                    echo $result['submenu'][$l]['sub_name'], "<br>";
               }
          }
     }