2015-11-25 13:50
W menu głównym próbuję wyświetlić submenu, rozwijane. Sprawa dotyczy tej strony: http://www.dworekdabrowa.pl Po najechaniu na odnośnik "Oferta" powinno się ukazać rozwijane menu. Nie jest to wina złego CSSa, bo w kodzie nawet nie widać fragmentu odpowiedzialnego za wyświetlenie submenu. menu wywołuje tym w pliku header.php:
echo $oPage -> listPagesMenu ( 1 , Array( 'iDepthLimit' => 0 ) );
Funkcja listPagesMenu:
public function listPagesMenu ( $iMenu , $aParametersExt = null ){ global $lang , $config ; if( !isset( $this -> aPagesParentsMenus [ $iMenu ] ) ) return null ; $this -> aMenuParams [ 'iDepthLimit' ] = isset( $aParametersExt [ 'iDepthLimit' ] ) ? $aParametersExt [ 'iDepthLimit' ] : 1 ; $this -> aMenuParams [ 'bExpanded' ] = isset( $aParametersExt [ 'bExpanded' ] ) ? true : null ; $content = null ; foreach( $this -> aPagesParentsMenus [ $iMenu ] as $iElement => $iPage ){ $aParametersExt [ 'sSubMenu' ] = ( isset( $this -> aPagesChildrens [ $iPage ] ) && ( isset( $this -> aMenuParams [ 'bExpanded' ] ) || ( isset( $config [ 'current_page_id' ] ) && ( $iPage == $config [ 'current_page_id' ] || isset( $this -> aPagesAllChildrens [ $iPage ][ $config [ 'current_page_id' ]] ) ) ) ) && $this -> aMenuParams [ 'iDepthLimit' ] > 0 ) ? $this -> listPagesSubMenu ( $iPage , 1 ) : null ; $aParametersExt [ 'bSelected' ] = ( isset( $config [ 'current_page_id' ] ) && $config [ 'current_page_id' ] == $iPage ) ? true : null ; $aParametersExt [ 'iElement' ] = $iElement ; $content .= listPagesMenuView ( $this -> aPages [ $iPage ], $aParametersExt ); } // end foreach unset( $this -> aMenuParams ); if( isset( $content ) ){ return '<ul>' . $content . '</ul>' ; } } // end function listPagesMenu
funkcja listPagesSubMenu:
public function listPagesSubMenu ( $iPageParent , $iDepth = 1 ){ global $config ; if( isset( $this -> aPagesChildrens [ $iPageParent ] ) ){ $content = null ; foreach( $this -> aPagesChildrens [ $iPageParent ] as $iElement => $iPage ){ $aParametersExt [ 'sSubMenu' ] = ( isset( $this -> aPagesChildrens [ $iPage ] ) && ( ( isset( $this -> aMenuParams [ 'bExpanded' ] ) || ( isset( $config [ 'current_page_id' ] ) && ( $iPage == $config [ 'current_page_id' ] || isset( $this -> aPagesAllChildrens [ $iPage ][ $config [ 'current_page_id' ]] ) ) ) ) && $this -> aMenuParams [ 'iDepthLimit' ] > $iDepth ) ? $this -> listPagesSubMenu ( $iPage , $iDepth + 1 ) : null ); $aParametersExt [ 'bSelected' ] = ( isset( $config [ 'current_page_id' ] ) && $config [ 'current_page_id' ] == $iPage ) ? true : null ; $aParametersExt [ 'iElement' ] = $iElement ; $content .= $this -> aMenuParams [ 'sFunctionView' ]( $this -> aPages [ $iPage ], $aParametersExt ); } // end foreach if( isset( $content ) ){ return '<ul>' . $content . '</ul>' ; } } } // end function listPagesSubMenu
funkcja listPagesMenuView:
function listPagesMenuView ( $aData , $aParametersExt ){ $sClassName = null ; if( isset( $aParametersExt [ 'bSelected' ] ) ) $sClassName .= 'selected' ; return '<li' .( isset( $sClassName ) ? ' class="' . $sClassName . '"' : null ). '><a href="' . $aData [ 'sLinkName' ]. '">' . $aData [ 'sName' ]. '</a>' . $aParametersExt [ 'sSubMenu' ]. '</li>' ; } // end function listPagesMenu
» Quick.Cms v6.x biuro@tomaszowiak.tv 2015-11-25 14:54
iDepthLimit - przekazuje do funkcji zagłębienie w wyświetlaniu podstron w menu. Używana w funkcjach: listPagesMenu zmień na 1 :)
Paweł 2015-11-25 15:48
A choćby i 1000 wpisał, nie zadziała :-) Oprócz tej "1" (czy tam ile głębokości potrzeba) trzeba jeszcze małą zmiankę wprowadzić w funkcji listPagesSubMenu linijkę
$content .= $this -> aMenuParams [ 'sFunctionView' ]( $this -> aPages [ $iPage ], $aParametersExt );
zamienić na:
$content .= listPagesMenuView ( $this -> aPages [ $iPage ], $aParametersExt );
Ponieważ parametr: $this->aMenuParams['sFunctionView'] nie jest nigdzie zdefiniowany. A potem trochę pracy w css.
boboo :-) 2015-11-25 16:31
Dzięki! jest postęp. Menu rozwija się, ale tylko gdy jesteśmy w dziale "Oferta". W pozostałych przypadkach ciągle nic.
biuro@tomaszowiak.tv 2015-11-25 17:19
Weź sobie obejrzyj jak to zrobiłem tu: http://www.kimla.de/ponton/ Na razie mi się nie chce patrzeć w .css'a Ściągnij go sobie i przeanalizuj.
boboo :-) 2015-11-25 18:59
No tak racja.. przyzwyczajenia z płatnej wersji :)
Paweł 2015-11-26 11:40
CSS miałem zrobiony już wcześniej, działa poprawnie. Chodzi o to, że funkcja nie generuje kodu html. Generuje go tylko w przypadku gdy jesteśmy w zakładce która ma podstrony, gdy ta zakłądka jest aktywna, to submenu jest generowane. W innych przypadkach już nie. Szybka prezentacja: Gdy mamy aktywną "Strona główna":
< ul > < li class= "selected" >< a href = "./" > Strona główna </ a ></ li > < li >< a href = "?oferta" > Oferta </ a ></ li > < li >< a href = "?cennik" > Cennik </ a ></ li > < li >< a href = "?o-nas" > O nas </ a ></ li > < li >< a href = "?galeria-zdjec" > Galeria zdjęć </ a ></ li > < li >< a href = "?kontakt" > Kontakt </ a ></ li > </ ul >
Gdy mamy aktywną zakładkę "Oferta" (ta zakładka ma podstrony):
< ul > < li >< a href = "./" > Strona główna </ a ></ li > < li class= "selected" >< a href = "?oferta" > Oferta </ a > < ul > < li >< a href = "?restauracja" > Restauracja </ a ></ li > < li >< a href = "?pokoje" > Pokoje </ a ></ li > < li >< a href = "?wesela" > Wesela </ a ></ li > < li >< a href = "?imprezy" > Imprezy </ a ></ li > </ ul > </ li > < li >< a href = "?cennik" > Cennik </ a ></ li > < li >< a href = "?o-nas" > O nas </ a ></ li > < li >< a href = "?galeria-zdjec" > Galeria zdjęć </ a ></ li > < li >< a href = "?kontakt" > Kontakt </ a ></ li > </ ul >
Jak widać błąd jest po stronie funkcji która nie generuje submenu.
biuro@tomaszowiak.tv 2015-11-26 11:53
OK już sobie poradziłem, dzięki za trop Panowie! W funkcji listPagesMenu, zmieniłem:
$aParametersExt[ 'sSubMenu' ] = ( isset( $this -> aPagesChildrens [ $iPage ] ) && ( isset( $this -> aMenuParams [ 'bExpanded' ] )
na
$aParametersExt[ 'sSubMenu' ] = ( isset( $this -> aPagesChildrens [ $iPage ] ) || ( isset( $this -> aMenuParams [ 'bExpanded' ] )
Czyli zmiana operatora logicznego && na ||. Nie wiem tylko dlaczego domyślnie jest ustawiony na taką wartość, przez to blokuje generowanie htmal submenu.
biuro@tomaszowiak.tv 2015-11-26 12:14
Zamiast tego, może lepiej wprowadzić ten parametr (bExpanded) przy wywoływaniu tej funkcji? W templates/default/header.php zamienić linijkę:
<?php echo $oPage -> listPagesMenu ( 1 , Array( 'iDepthLimit' => 1 ) ); // content of top menu ?>
na:
<?php echo $oPage -> listPagesMenu ( 1 ,Array( 'iDepthLimit' => 1 , 'bExpanded' => 1 )); // content of top menu ?>
W ten sposób możesz sterować generowaniem submenu. Przy sposobie, który użyłeś, będzie ono generowane zawsze (czasami niepotrzebnie).
boboo :-) 2015-11-26 13:05
Dzięki sprawdzę to.
biuro@tomaszowiak.tv 2015-11-26 15:28
Myślę, że można to też zrobić bez usuwania kodu z funkcji. Wystarczy, że w funkcji listPagesMenu pod kodem:
$this -> aMenuParams [ 'bExpanded' ] = isset( $aParametersExt [ 'bExpanded' ] ) ? true : null ;
dodasz:
$this -> aMenuParams [ 'sFunctionView' ] = isset( $aParametersExt [ 'sFunctionView' ] ) ? $aParametersExt [ 'sFunctionView' ] : null ;
a wywołując funkcję listPagesMenu w header.php, dodasz więcej parametrów.
$oPage -> listPagesMenu ( 1 , Array( 'iDepthLimit' => 1 , 'bExpanded' => true , 'sFunctionView' => 'listPagesMenuView' ) )
DEHA 2015-11-26 16:42
No widzisz :-) parę miesięcy bez dłubania w kodzie i oczywiste oczywistości wylatują z głowy ;-)
boboo :-)