Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Kohana]Problem z kilkupoziomowym menu
henio
post 15.06.2009, 19:24:53
Post #1





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Witam, od niedawna używam Kohany i mam taki problem. Stworzylem 3 tabele w bazie danych (menu-adm-1, menu-adm-2 i menu-adm-3) chce pobrać dane z pierwszej tabeli i wyświetlić potrafię. Chciałbym jednak osiągnąć taki cel: po pobraniu danych z tabeli menu-adm-1 i ich wyświetleniu zostały pobrane dane z tabeli menu-adm-2 ale tylko dla konkretnego pobranego wcześniej rekordu z tabeli menu-adm-1.

Model Admin_Menu
  1. <?php defined('SYSPATH') or die('No direct script access.');
  2.  class Admin_Menu_Model extends Model {
  3.    public function __construct()
  4.    {
  5.    parent::__construct();
  6.    }
  7.    
  8.    public function menu_adm1()
  9.    {
  10.    return $this->db->select('id', 'tekst', 'url', 'kolejny_poziom')
  11.            ->from('menu-adm-1')
  12.            ->orderby(array('kolejnosc' => 'ASC'))
  13.            ->get();
  14.    }
  15.  }
  16. ?>


Widok (fragment)
  1. <ul id="nav">
  2.        <?php foreach($menu as $m): ?>
  3.            <li><a href="<?php echo url::base().$m->url;?>"><?php echo $m->tekst;?></a></li>
  4.        <?php endforeach; ?>
  5.        </ul>


Kontroler
  1. <?php defined('SYSPATH') OR die('No direct access allowed.');
  2. class Glowna_Controller extends Controller {
  3.  
  4.        public function index()
  5.        {
  6.        $view = new View('layout/adm');
  7.        $menu = new Admin_Menu_Model;
  8.        $view->menu = $menu->menu_adm1();
  9.        $view->content = new View('adm/glowna');
  10.        $view->render(true);
  11.        }
  12. }
  13. ?>
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
Cypherq
post 15.06.2009, 22:49:36
Post #2





Grupa: Zarejestrowani
Postów: 181
Pomógł: 9
Dołączył: 28.08.2006
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Przejedź foreach po rekordach z menu1 wyjmując rekordy z menu 2?

  1. <?php
  2. $menu_db = $menu->menu_adm1();
  3. foreach($menu_db as $m)
  4. {
  5. $this->db->from('menu-adm-2');
  6. $this->db->where('id', $m->id);
  7. $wynik =  $this->db->get();
  8. echo $wynik;
  9. }
  10. ?>


Oczywiście warunek dałem jakikolwiek bo nie znam struktury tabeli.


--------------------
"Zero 'errorów' nic nie oznacza. Walidator sprawdza tylko składnię. Kod strony jest jak psu z d**y wyjęty i to, że walidator świeci się na zielono nie oznacza, że ta kupa jest ładna" - mike
Go to the top of the page
+Quote Post
henio
post 16.06.2009, 09:30:06
Post #3





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Ale to mam umieścić w kontrolerze?
Go to the top of the page
+Quote Post
skowron-line
post 16.06.2009, 09:34:02
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


W modelu zrób sobie zapytanie o główne menu i w pętli pobieraj podkategorie menu i stwórz sobie tablice wielowymiarową.
@Cypherq Słowo klucz MVC


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
henio
post 16.06.2009, 10:01:23
Post #5





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(skowron-line @ 16.06.2009, 10:34:02 ) *
W modelu zrób sobie zapytanie o główne menu i w pętli pobieraj podkategorie menu i stwórz sobie tablice wielowymiarową.
@Cypherq Słowo klucz MVC


Mógłbyś mi tak mniej więcej napisać jak należy to zrobić, gdyż szczerzę mówiąc to nie wiem. I nie chodzi mi tu bynajmniej o samo tworzenie tablic wielowymiarowych.
Go to the top of the page
+Quote Post
skowron-line
post 16.06.2009, 10:06:19
Post #6





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


W modelu tworzysz metodę powiedzmy getMenu
i w niej sobie wyciągniesz dane do menu.
W kontrolerze
  1. <?php
  2. $menu = $model->getMenu();
  3. $view->render( TRUE );
  4. ?>

A w widoku
  1. <?php
  2. foreach( $menu as $M )
  3. {
  4. // i tu latasz sobie warunkami i innymi żeby odczytać to co sobie stworzyłeś w modelu.
  5. }
  6. ?>



http://artykuly.zyxist.com/czytaj.php/drzewa_w_php_i_mysql + do zapoznania się.

Ten post edytował skowron-line 16.06.2009, 10:07:32


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Cypherq
post 16.06.2009, 14:45:06
Post #7





Grupa: Zarejestrowani
Postów: 181
Pomógł: 9
Dołączył: 28.08.2006
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(skowron-line @ 15.06.2009, 23:34:02 ) *
W modelu zrób sobie zapytanie o główne menu i w pętli pobieraj podkategorie menu i stwórz sobie tablice wielowymiarową.
@Cypherq Słowo klucz MVC


Tak, słowo klucz zwłaszcza gdy sam korzystam z Kohany. Napisałem mu jak to ma działać, a jeśli korzysta z Kohany to zaimplementować w MVC sam będzie potrafił. Z takiego wychodzę założenia.


--------------------
"Zero 'errorów' nic nie oznacza. Walidator sprawdza tylko składnię. Kod strony jest jak psu z d**y wyjęty i to, że walidator świeci się na zielono nie oznacza, że ta kupa jest ładna" - mike
Go to the top of the page
+Quote Post
henio
post 17.06.2009, 15:15:14
Post #8





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Z Kohany korzystam dopiero od kilku dni i nie potrafię jeszcze stworzyć tego o czym pisałem na podstawie waszych podpowiedzi, może ma ktoś jakiś gotowy przykład to sobie zerknąłbym i coś napisał
Go to the top of the page
+Quote Post
Cypherq
post 17.06.2009, 17:06:45
Post #9





Grupa: Zarejestrowani
Postów: 181
Pomógł: 9
Dołączył: 28.08.2006
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Nie obraź się, ale Skowron podał Ci wszystko na tacy, jeśli nadal nie umiesz tego ogarnąć to wróć do podstaw i zajmij się Kohaną jak będziesz coś wiedział o niej.


--------------------
"Zero 'errorów' nic nie oznacza. Walidator sprawdza tylko składnię. Kod strony jest jak psu z d**y wyjęty i to, że walidator świeci się na zielono nie oznacza, że ta kupa jest ładna" - mike
Go to the top of the page
+Quote Post
skowron-line
post 17.06.2009, 18:04:35
Post #10





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat(henio @ 17.06.2009, 14:15:14 ) *
Z Kohany korzystam dopiero od kilku dni i nie potrafię jeszcze stworzyć tego o czym pisałem na podstawie waszych podpowiedzi, może ma ktoś jakiś gotowy przykład to sobie zerknąłbym i coś napisał

Nie pękaj i na to jest lekarstwo
http://blog.bexlab.pl/moja-pierwsza-strona-w-kohana/218/

( ja zacząłem naukę kohany ale jakoś nie mogę skończyć )

Ten post edytował skowron-line 17.06.2009, 18:21:05


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
henio
post 30.06.2009, 11:38:50
Post #11





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Wróciłem niedawno z wakacyjnego wyjazdu i wypoczęty powróciłem do tego problemu. Przeczytałem link, który został tu podrzucony, ale jakoś nie znalazłem w nim tego czego szukam.
Rozszerzyłem model o dwie dodatkowe funkcje i chciałbym coś z nimi zrobić w kontrolerze, żeby pobierane były odpowiednie rekordy.
model
  1. <?php defined('SYSPATH') or die('No direct script access.');
  2.  class Admin_Menu_Model extends Model {
  3.    public function __construct()
  4.    {
  5.    parent::__construct();
  6.    }
  7.    
  8.    public function menu_adm1()
  9.    {
  10.    return $this->db->select('id', 'tekst', 'url', 'kolejny_poziom')
  11.            ->from('menu-adm-1')
  12.            ->orderby(array('kolejnosc' => 'ASC'))
  13.            ->get();
  14.    }
  15.  
  16.    public function menu_adm2($id_menu_1)
  17.    {
  18.    return $this->db->select('id', 'tekst', 'url', 'kolejny_poziom')
  19.            ->from('menu-adm-2')
  20.            ->where(array('id_menu_1' => $id_menu_1))
  21.            ->orderby(array('kolejnosc' => 'ASC'))
  22.            ->get();
  23.    }
  24.  
  25.    public function menu_adm3($id_menu_2)
  26.    {
  27.    return $this->db->select('id', 'tekst', 'url')
  28.            ->from('menu-adm-3')
  29.            ->where(array('id_menu_2' => $id_menu_2))
  30.            ->orderby(array('kolejnosc' => 'ASC'))
  31.            ->get();
  32.    }
  33.  }
  34. ?>

widok - fragment
  1. <ul id="nav">
  2.        <?php foreach($menu1 as $m1): ?>
  3.            <li>
  4.                <a href="<?php echo url::base().$m1->url;?>"><?php echo $m1->tekst;?></a>
  5.                <?php if($m1->kolejny_poziom == "TAK") : ?>
  6.                <ul>
  7.                <?php foreach($menu2 as $m2): ?>
  8.                    <li>
  9.                        <a href="<?php echo url::base().$m2->url;?>"><?php echo $m2->tekst;?></a>
  10.                        <?php if($m2->kolejny_poziom == "TAK") : ?>
  11.                        <ul>
  12.                        <?php foreach($menu3 as $m3): ?>
  13.                            <li>
  14.                                <a href="<?php echo url::base().$m3->url;?>"><?php echo $m3->tekst;?></a>
  15.                            </li>
  16.                        <?php endforeach; ?>
  17.                        </ul>
  18.                        <?php endif; ?>
  19.                    </li>
  20.                <?php endforeach; ?>
  21.                </ul>
  22.                <?php endif; ?>
  23.            </li>
  24.        <?php endforeach; ?>
  25.        </ul>

kontroler
  1. <?php defined('SYSPATH') OR die('No direct access allowed.');
  2. class Glowna_Controller extends Controller {
  3.  
  4.    public function index()
  5.    {
  6.    $view = new View('layout/adm');
  7.    
  8.    $view->author = Kohana::config('settings.author');
  9.    $view->charset = Kohana::config('settings.charset');
  10.    $view->copyright = Kohana::config('settings.copyright');
  11.    
  12.     $menu = new Admin_Menu_Model;
  13.    $view->menu1 = $menu->menu_adm1();
  14.    $view->menu2 = $menu->menu_adm2('2');
  15.    $view->menu3 = $menu->menu_adm3('2');
  16.    
  17.    $view->content = new View('adm/glowna');
  18.    $view->render(true);
  19.    }
  20. }
  21. ?>

Mógłby ktoś mi pomóc rozwiązać ten dla wielu z was banalny problem
Go to the top of the page
+Quote Post
skowron-line
post 30.06.2009, 11:44:47
Post #12





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Według mnie tablica 2 wymiarowa była by najlepszym rozwiązaniem. W modelu byś sobie ją sklładał do kupy. A w widoku po niej jezdził foreachem.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
henio
post 30.06.2009, 11:54:51
Post #13





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(skowron-line @ 30.06.2009, 12:44:47 ) *
Według mnie tablica 2 wymiarowa była by najlepszym rozwiązaniem. W modelu byś sobie ją sklładał do kupy. A w widoku po niej jezdził foreachem.


Masz jakiś przykładzik pod ręką, bo jak ponad 10 dni temu pisałem Kohana i MVC to dopiero wczesny etap nauki.

Chodzi mi o przykład tworzenia tablicy dwuwymiarowej w modelu we frameworku Kohana po wyjęciu danych z bazy

Ten post edytował henio 30.06.2009, 11:58:05
Go to the top of the page
+Quote Post
skowron-line
post 30.06.2009, 11:57:45
Post #14





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Nie wiesz jak wygląda tablica wielowymiarowa questionmark.gif

http://blog.bexlab.pl/moja-pierwsza-strona-w-kohana/218/ tu koleżanka pokazuje jak zbudować prostą stronę przy użyciu KOHANY i jest opcja menu smile.gif


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
henio
post 30.06.2009, 11:58:58
Post #15





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(skowron-line @ 30.06.2009, 12:57:45 ) *
Nie wiesz jak wygląda tablica wielowymiarowa questionmark.gif

http://blog.bexlab.pl/moja-pierwsza-strona-w-kohana/218/ tu koleżanka pokazuje jak zbudować prostą stronę przy użyciu KOHANY i jest opcja menu smile.gif


Czytałem to, ale tu jest zrobione bez udziału bazy danych
Go to the top of the page
+Quote Post
skowron-line
post 30.06.2009, 12:11:44
Post #16





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


No ale powiedz w czym ty masz problem questionmark.gif ze zrobieniem tablicy 2 wymiarowej questionmark.gif
1 robisz zapytanie obracasz je w petli
2 odczytujesz podkategorię dla danej kategori wyciagnieteje wyżej
3 wszystko wrzucasz do tablicy
4 return tablica z menu.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
henio
post 30.06.2009, 12:39:31
Post #17





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(skowron-line @ 30.06.2009, 13:11:44 ) *
No ale powiedz w czym ty masz problem questionmark.gif ze zrobieniem tablicy 2 wymiarowej questionmark.gif
1 robisz zapytanie obracasz je w petli
2 odczytujesz podkategorię dla danej kategori wyciagnieteje wyżej
3 wszystko wrzucasz do tablicy
4 return tablica z menu.


Pokaż jakiś przykład, bo nie moge jakoś tego zrobić
Go to the top of the page
+Quote Post
phpion
post 30.06.2009, 12:56:04
Post #18





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Pokaż jak próbowałeś, a my Cię naprowadzimy pokazując gdzie masz błędy.
Go to the top of the page
+Quote Post
henio
post 30.06.2009, 13:40:32
Post #19





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(phpion @ 30.06.2009, 13:56:04 ) *
Pokaż jak próbowałeś, a my Cię naprowadzimy pokazując gdzie masz błędy.


  1. <?php defined('SYSPATH') or die('No direct script access.');
  2.  class Admin_Menu_Model extends Model {
  3.    public function __construct()
  4.    {
  5.    parent::__construct();
  6.    }
  7.  
  8.    private $menu = array();
  9.    
  10.    public function menu_adm()
  11.    {
  12.    $menu = $this->db->select('id', 'tekst', 'url', 'kolejny_poziom')
  13.                     ->from('menu-adm-1')
  14.                     ->orderby(array('kolejnosc' => 'ASC'))
  15.                     ->get();
  16.  
  17.        for($i=1; $i<$menu->count(); $i++)
  18.        {                    
  19.            if($menu[$i]->kolejny_poziom == 'TAK')
  20.            {
  21.            $menu1 = $this->db->select('id', 'tekst', 'url', 'kolejny_poziom')
  22.                              ->from('menu-adm-2')
  23.                              ->where(array('id_menu_1' => $menu[$i]->id))
  24.                              ->orderby(array('kolejnosc' => 'ASC'))
  25.                              ->get();
  26.  
  27.                for($j=1; $j<$menu1->count(); $j++)
  28.                {                    
  29.                    if($menu1[$j]->kolejny_poziom == 'TAK')
  30.                    {
  31.                    $menu2 = $this->db->select('id', 'tekst', 'url')
  32.                                      ->from('menu-adm-3')
  33.                                      ->where(array('id_menu_2' => $menu1[$j]->id))
  34.                                      ->orderby(array('kolejnosc' => 'ASC'))
  35.                                      ->get();
  36.                    }
  37.                }
  38.            }
  39.        }
  40.    }
  41. }
  42. ?>


Ten post edytował henio 30.06.2009, 13:50:17
Go to the top of the page
+Quote Post
skowron-line
post 30.06.2009, 14:31:43
Post #20





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


a gdzie wrzucasz to do tablicy questionmark.gif


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.06.2025 - 18:19