Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] tree menu without JS
Forum PHP.pl > Forum > PHP
sekwenser
Witam, proszę o uważne zapoznanie się z problemem i konstruktywną pomoc..

konstruktywna pomoc - schemat kodu, zarys kodu, pseudokod itp
niekonstruktywna pomoc - posty w stylu "spróbuj może tego, może tamtego, sprawdź ten link" - nie wiesz jak lub nie chce Ci się pomóc to nie pisz..

Problem:

jeden plik zawierający drzewiaste menu, includowany na podstrony, menu na podstronach z rozwiniętymi tylko tymi gałęziami które prowadzą do aktualnej podstrony..
Wchodzisz na stronę, masz menu z trzema pozycjami np: bramy garażowe, bramy segmentowe, bramy przemysłowe, klikasz na garażowe, przechodzisz na podstronę na której masz to samo menu z tym że pomiędzy pozycją pierwszą i drugą pojawia się submenu, to submenu może mieć kolejne podmena, ale są one zwinięte dopóki użytkownik nie rozwinie go.. jeżeli użytkownik będąc w jakimś submenu, kliknie na link należący do wyższego menu to aktualne menu jest zwijane a rozwijane to wybrane.. przykład: www.normstahl.pl, menu pionowe z lewej strony.. moje menu ma być bardziej rozbudowane.. będzie więcej zagnieżdżeń.. samo menu napisałem już w xhtml z wykorzystaniem listy dl, teraz muszę dorobić mechanizm generujący na jego podstawie odpowiednia mena na podstrony.. pewnie nie jest to dobry koncept, próbuję wymyślić coś z tablicami ale ciężko mi to idzie.. przerasta trochę mnie ten temat.. może ktoś z was spotkał się z czymś takim albo zechce trochę mi pomóc.. na forum często jest wiele niedomówień, jeśli ktoś chciałby dowiedzieć się dokładniej o co chodzi to zapraszam na gg: 1660552, podam szczegóły i się dogadamy, nie mówię że pomoc musi być bezinteresowna ;)

Efekty mojej walki:

wygooglowałem między innymi bibliotekę phplayersmenu-3.2.0, wszystko działa, problem w tym że to obszerna jak dla mnie biblioteka, której nie potrafię zmodyfikować pod moje potrzeby.. próbuję też z tablicami zawierający elementy menów dane poziomu ale idzie to jak krew z nosa.. a jucha ma buchać ;)

Pomoc niekoniecznie bezinteresowna ale nie chcę też pisać tego jako zlecenie ponieważ pewnie nie stać mnie na taką usługę, niemniej możemy się jakoś dogadać, moje gg: 1660552, email: sekwenser@o2.pl, oczywiście filantropijna pomoc na forum bardzo mile widziana :)

Pozdrawiam
pablo89pl
SPróbuj może tak:
Podczas wejścia w konkretną pozycję w menu zapisuj sobie gdzies w co kliknales, czyli np dodaj cos ala ...&id=ID_POZYCJI w linku


I potem jka masz widok/szablon dorzuć coś takiego:
Załóżmy że menu oparte o listy
Więc wstawiasz warunek -> sprawdzasz przy kazdym podmenu czy podane id akurat istnieje, jesli tak to wyswietlasz, jak nie to nie smile.gif

  1. <ul class="menu_root">
  2. <li><a href="link&id=1">Kat1</a>
  3. <?php if( $_GET['id'] == '1' ): ?>
  4. <ul>
  5. <li><a href="link&id=5">SubKat1</a></li>
  6. <li><a href="link&id=6">SubKat2</a></li>
  7. <li><a href="link&id=7">SubKat3</a></li>
  8. </ul>
  9. <? endif; ?>
  10. </li>
  11.  
  12. <li><a href="link&id=2">Kat2</a></li>
  13. <li><a href="link&id=3">Kat3</a></li>
  14. <li><a href="link&id=4">Kat4</a></li>
  15. </ul>

vokiel
Cytat(pablo89pl @ 1.12.2009, 16:10:33 ) *
SPróbuj może tak:
To jest "niekonstruktywna pomoc"! Co Ty wyprawiasz pablo89plquestionmark.gif biggrin.gif

Jeśli plik z menu nie generuje go automatycznie, tylko jest zrobiony raz, na stałe to niestety każde zagłębienie musi być ukryte, a dla każdego zagłębienia w adresie musi odpowiadać jakaś zmienna.

Czyli jeśli masz adres:
Kod
http://TwojaStrona.pl/index.php?menu=1&submenu=2&subsubmenu=4
W takim wypadku, w tym includowanym pliku odbierasz zmienne $_GET i w zależności od ich ilości, i wartości ukrywasz lub pokazujesz określone części menu (tak jak nakreślił to kolega wyżej). Poszczególne zmienne z adresu będą odpowiadały za kolejny poziom zagłębienia.

Szybciej, i wygodniej będzie napisanie skryptu, który stworzy te menu dynamicznie. Jeśli menu jest stałe i nie zależy od niczego najszybciej będzie poprzez utworzenie tablicy ze strukturą menu, następnie pobranie menu i pokazanie tylko tych dla których id elementu w tablicy odpowiada temu z adresu. Przykładowo:

  1. $menu = array(
  2. 'Bramy garażowe' => array(
  3. 'Bramy uchylne' => array(
  4. 'PROMINENT' => array('Bezpieczeństwo','Szczegóły techniczne','Kolory','Wyposażenie dodatkowe','Drzwi w bramie'),
  5. 'ELEGANT' => array(),
  6. 'STYLE' => array()
  7. ),
  8. 'Bramy sekcyjne górne g60' => array(
  9. 'g60 LINE' => array(),
  10. 'g60 TREND' => array(),
  11. 'g60 CLASSIC' => array()
  12. ),
  13. 'Bramy sekcyjne górne Euro' => array(),
  14. 'Bramy sekcyjne boczne' => array()
  15. ) ,
  16. 'Bramy przemysłowe' => array(),
  17. 'Automaty' => array(),
  18. 'Drzwi garażowe' => array(),
  19. );

Generowanie menu polega na pobraniu wszystkich poziomów z adresu
  1. $p1 = $_GET['menu'];
  2. $p2 = $_GET['submenu'];
  3. $p3 = $_GET['subsubmenu'];
  4.  
  5. //tworzenie
  6. foreach ($menu as $p1_id => $p1_value){
  7. echo '-'.$p1_id."<br />\n";
  8. if ($p1_id==$p1){
  9. foreach ($p1_value as $p2_id => $p2_value){
  10. echo '--'.$p2_id."<br />\n";
  11. if ($p2_id==$p2){
  12. foreach ($p2_value as $p3_id => $p3_value){
  13. echo '---'.$p3_id."<br />\n";
  14. }
  15. }
  16. }
  17. }
  18. }


Może być jakaś pomyłka w kodzie powyżej, bo nie sprawdzałem, pisałem z głowy (czyli z niczego biggrin.gif ).
Pozdrawiam
sekwenser
dziękuję za konstruktywną pomoc :) jutro spróbuję zrobić małą implementacje struktury tablicowej

mam jednak pytanie, czy nie da się tego zrobić statycznie ? na zasadzie includowania pliku i wykorzystanie basename ?
czy nazwa podstrony nie może być jednocześnie zmienną użytą do określenia które części menu mają być wyświetlane ? zależy mi na statycznej stronie.. nie wiem czy słusznie, podobno lepiej się takie strony indeksują i pozycjonują chociaż nie bardzo w to wierzę, ale na pewno są bardziej przyjazne dla użytkowników.. mod rewrite coś nie działa na moim hostingu.. eh..
pablo89pl
Pokaz moze jaka masz strukture plikow, co gdzie sie dzeiej, gdzie jest menu includowane, gdzie wczytuje sie tresc itp..

Czy masz po prostu same pliki php z tylko htmlem w srodku, i w jednym miejscu masz instrukcje include co CI wczytuje menu tak?


Opisz co i jak, będzie łatwiej pomóc winksmiley.jpg

Cytat(vokiel @ 1.12.2009, 18:02:22 ) *
To jest "niekonstruktywna pomoc"! Co Ty wyprawiasz pablo89plquestionmark.gif biggrin.gif

;- ) Fakt nie zauwazyłem tego na początku posta sekwener'a smile.gif
sekwenser
strona z założenia jest statyczna, php używam do content negotiation, includowania, formularza i generowania prostych elementów kodu w zależności od podstrony..
struktura katalogowa jest prosta.. ze względu na bardzo problematyczne adresowanie względne w poleceniu include wszystkie podstrony są w katalogu głównym natomiast wszystkie includowane pliki, skrypty js, css i grafika są uporządkowane w podfolderach..

schemat każdej podstrony jest w zasadzie identyczny:

1. include plik z content negotiation, doctype, otwarciem head i umieszczeniem czesci meta tagów
2. meta tagi, title, link do css, linki do js
4. naglowek, troche kodu
5. include nawigacja ogolna
6. include nawigacja sekcji, ta z którą mam problem..
7. treść
8. include stopka

co do samego inkludowanego menu sekcji z którym mam problem to faktycznie teraz jest to plik z kodem xhtml z rozszerzeniem php..
walczyłem dzisiaj z tematem ale nie daje rady.. niestety bardzo nie podoba mi się podejście php do tablic, poleceń operujących na tablicach jest niewiele,
ciężko jest wyciągnąć na podstawie elementu strukturę całej tablicy, poziomy zgłębienia.. masakra, dziwie się że tak to wygląda, ale to pewnie efekt
przyzwyczajenia do scilaba (taki pakiet jak matlab) gdzie funkcji dotyczących macierzy jest o niebo więcej, oczywiście nie uważam, że php jest złe, to ja po prostu mam za małe doświadczenie z tym językiem..

pomysł vokiela jest całkiem, całkiem, to pewnie jedyna rozsądna opcja w tej chwili..

wpadłem na pomysł właśnie, aby zachować statyczność stron a jedynie menu generować dynamicznie, mogę przekazywać informacje o zagłębieniu przed includowaniem:

<html>
<?php $p1=1; $p2=2; $p3=1; include 'menu.php ?>
</html>

Co o tym sądzicie ? takie rozwiązanie niszczy automatyzm ale i tak jest lepsze niż ręczna edycja całego menu na każdej z podstron..
piotrooo89 dał mi też kilka linków dotyczących tematu z wykorzystaniem baz danych.. ciekawe, ale czy dla menu warto tworzyć bazę danych ? ten projekt ma być jak najprostszy a przy tym funkcjonalny, dlatego statyczne strony, dlatego includowanie, dlatego brak bd, jak odejdę z firmy byle amator musi umieć się w tym połapać w tym co tworzę..

rozpisałem się ;) przepraszam xD
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.