Temat: Generacja menu na stronie

Cześć,

słuchajcie, podpowiedzcie mi jak robicie menu główne strony z podświetleniem głównego elementu? Ja wymyśliłem coś takiego:

Plik website_controller

// menu strony
$this->template->menu = array(
'Strona główna' => '',
'Portfolio' => 'portfolio/lista'
);


a w widoku mam takie ustrojstwo:


foreach ($menu as $name => $action) {
$class = 'nav-element';
if (Request::instance()->controller == strtolower($name)) {
$class = 'nav-element-selected';
}
echo '<span class="nav-element">';
echo html::anchor($action, $name, array('class' => $class));
echo '</span>';
}


Macie jakieś lepsze pomysły? Bo mnie to gnębi od jakiegoś czasu.

konto usunięte

Temat: Generacja menu na stronie

Ja menu na kohanie robię trochę inaczej, ale nie jestem programistą więc nie będę się chwalił jak, bo wiem, że tak nie powinno być :)
Ale na pewno powinieneś zrobić inny HTML (chyba, że ten podany przez Ciebie jest jedynie przykładowy)

Raczej powinno być tak:
<ul>
<?php foreach {
<li><a href="..." title=".."> ... </a></li>
} ?>
</ul>


Klasy dla aktywnego elementu menu nie dawałbym dla linku (<a>), a dałbym dla <li> (w Twoim przykładzie <span>) - masz większe możliwości stylowania za pomocą CSS.
Również pomyślałbym nad zmianą nazwy klasy nav-element-selected, skoro rodzic ma klasę nav-element, to dla dziecka wystarczy klasa selected, a w css odwołujesz się do klasy w ten sposób
.nav-element .selected { ... }


Sorry za mały offtop, ale może się przyda.Oskar Wróbel edytował(a) ten post dnia 12.09.10 o godzinie 22:00
Michał Jastrzębski

Michał Jastrzębski Django-fu, phpjutsu,
sql-do

Temat: Generacja menu na stronie

A ja sobie na przyklad podpiąłem Smarty w Kohana;)

a nie lepiej tak:


$menu = array(
array(
'nazwa' => 'Menu1',
'link' => 'Http://example.com,
),
array(
'nazwa' => 'Menu2',
'link' => 'Http://example2.com,
),
)

$selected = 'Menu2';

foreach($menu as $menu) {
if($menu['nazwa'] == $selected) {
$class="nav-element-selected";
}
else {
$class="nav-element";
}

echo '<span class="'.$class.'">'.$menu['nazwa'].'</span>';
}



Zdaje mi sie znacznie bardziej przejzyste

Temat: Generacja menu na stronie

Michał Jastrzębski:
A ja sobie na przyklad podpiąłem Smarty w Kohana;)

a nie lepiej tak:


if($menu['nazwa'] == $selected) {
$class="nav-element-selected";
}
else {
$class="nav-element";
}

echo '<span [/quote]> class="'.$class.'">'.$menu['nazwa'].'</span>';[quote]}



Zdaje mi sie znacznie bardziej przejzyste

Tylko po co tyle klas, kiedy mamy tyle selektorów w CSS? :)Rafał Nowak edytował(a) ten post dnia 16.09.10 o godzinie 13:44
Michał Jastrzębski

Michał Jastrzębski Django-fu, phpjutsu,
sql-do

Temat: Generacja menu na stronie

Rafał Nowak:
Michał Jastrzębski:
A ja sobie na przyklad podpiąłem Smarty w Kohana;)

a nie lepiej tak:


if($menu['nazwa'] == $selected) {
$class="nav-element-selected";
}
else {
$class="nav-element";
}

echo '<span [/quote][/quote]> > class="'.$class.'">'.$menu['nazwa'].'</span>';[quote][quote]}



Zdaje mi sie znacznie bardziej przejzyste

Tylko po co tyle klas, kiedy mamy tyle selektorów w CSS? :)Rafał Nowak edytował(a) ten post dnia 16.09.10 o godzinie 13:44

A jakbyś to zrobił selektorami samymi?:)

Temat: Generacja menu na stronie

Michał Jastrzębski:
A jakbyś to zrobił selektorami samymi?:)

Klasa selected oczywiście musi być, ale klasa nav-element jest zbędna, wystarczy że rodzic jest opisany jako nawigacja :) Ale to już takie dopieszczanie szczegółów, bo poza tym drobiazgiem ja robię niemal identycznie ;)
Michał Jastrzębski

Michał Jastrzębski Django-fu, phpjutsu,
sql-do

Temat: Generacja menu na stronie

Ach w ten deseń:) Ja jednak formatuje dziecko, bo to dziecko ma kolor itp a nie rodzic;) Ale to jak powiedziales szczegol, i tak na prawde kwestia preferencji:)

Temat: Generacja menu na stronie

Michał Jastrzębski:
Ach w ten deseń:) Ja jednak formatuje dziecko, bo to dziecko ma kolor itp a nie rodzic;) Ale to jak powiedziales szczegol, i tak na prawde kwestia preferencji:)

No ale nie ma problemu, żeby dostać się do niego poprzez rodzica? :) A używasz wtedy tylko jednej klasy dla rodzica, czyli oszczędzasz te kilka bajtów na każdym elemencie nawigacji, razy ilość elementów, razy ilość żądań... Zawsze to jakaś optymalizacja, choć już na poziomie wyciskania ostatnich możliwości ;)
Michał Jastrzębski

Michał Jastrzębski Django-fu, phpjutsu,
sql-do

Temat: Generacja menu na stronie

Rafał Nowak:
Michał Jastrzębski:
Ach w ten deseń:) Ja jednak formatuje dziecko, bo to dziecko ma kolor itp a nie rodzic;) Ale to jak powiedziales szczegol, i tak na prawde kwestia preferencji:)

No ale nie ma problemu, żeby dostać się do niego poprzez rodzica? :) A używasz wtedy tylko jednej klasy dla rodzica, czyli oszczędzasz te kilka bajtów na każdym elemencie nawigacji, razy ilość elementów, razy ilość żądań... Zawsze to jakaś optymalizacja, choć już na poziomie wyciskania ostatnich możliwości ;)

No wiem, że tak się da;) A ta optymalizacja to taka, jakby jej nie było:P To raczej kwestia osobistych preferencji jak mówiłem;)

konto usunięte

Temat: Generacja menu na stronie

Michał Jastrzębski:
Rafał Nowak:
Michał Jastrzębski:
Ach w ten deseń:) Ja jednak formatuje dziecko, bo to dziecko ma kolor itp a nie rodzic;) Ale to jak powiedziales szczegol, i tak na prawde kwestia preferencji:)

No ale nie ma problemu, żeby dostać się do niego poprzez rodzica? :) A używasz wtedy tylko jednej klasy dla rodzica, czyli oszczędzasz te kilka bajtów na każdym elemencie nawigacji, razy ilość elementów, razy ilość żądań... Zawsze to jakaś optymalizacja, choć już na poziomie wyciskania ostatnich możliwości ;)

No wiem, że tak się da;) A ta optymalizacja to taka, jakby jej nie było:P To raczej kwestia osobistych preferencji jak mówiłem;)

Osobistych preferencji lub doświadczenia :)
Michał Jastrzębski

Michał Jastrzębski Django-fu, phpjutsu,
sql-do

Temat: Generacja menu na stronie

Oskar Wróbel:
Michał Jastrzębski:
Rafał Nowak:
Michał Jastrzębski:
Ach w ten deseń:) Ja jednak formatuje dziecko, bo to dziecko ma kolor itp a nie rodzic;) Ale to jak powiedziales szczegol, i tak na prawde kwestia preferencji:)

No ale nie ma problemu, żeby dostać się do niego poprzez rodzica? :) A używasz wtedy tylko jednej klasy dla rodzica, czyli oszczędzasz te kilka bajtów na każdym elemencie nawigacji, razy ilość elementów, razy ilość żądań... Zawsze to jakaś optymalizacja, choć już na poziomie wyciskania ostatnich możliwości ;)

No wiem, że tak się da;) A ta optymalizacja to taka, jakby jej nie było:P To raczej kwestia osobistych preferencji jak mówiłem;)

Osobistych preferencji lub doświadczenia :)

E tam. Doświadczony programista może też tak pisać:) Realnej różnicy nie ma..

konto usunięte

Temat: Generacja menu na stronie

Michał Jastrzębski:
Oskar Wróbel:
Michał Jastrzębski:
Rafał Nowak:
Michał Jastrzębski:
Ach w ten deseń:) Ja jednak formatuje dziecko, bo to dziecko ma kolor itp a nie rodzic;) Ale to jak powiedziales szczegol, i tak na prawde kwestia preferencji:)

No ale nie ma problemu, żeby dostać się do niego poprzez rodzica? :) A używasz wtedy tylko jednej klasy dla rodzica, czyli oszczędzasz te kilka bajtów na każdym elemencie nawigacji, razy ilość elementów, razy ilość żądań... Zawsze to jakaś optymalizacja, choć już na poziomie wyciskania ostatnich możliwości ;)

No wiem, że tak się da;) A ta optymalizacja to taka, jakby jej nie było:P To raczej kwestia osobistych preferencji jak mówiłem;)

Osobistych preferencji lub doświadczenia :)

E tam. Doświadczony programista może też tak pisać:) Realnej różnicy nie ma..

W przypadku utrzymania większych serwisów im mniej, tym czytelniej i łatwiej.
Ale rzeczywiście nie gra to jakiejś kluczowej roli.
Michał Pakuła

Michał Pakuła Research Manager,
Pentagon Research

Temat: Generacja menu na stronie

Michał Jastrzębski:

a nie lepiej tak:


[...]
foreach($menu as $menu) {
if($menu['nazwa'] == $selected) {
$class="nav-element-selected";
}
else {
$class="nav-element";
}

echo '<span> class="'.$class.'">'.$menu['nazwa'].'</span>';
}



Zdaje mi sie znacznie bardziej przejzyste


przejrzyste jest, ale po co tyle pisać jak można tak:


foreach($menu as $m) {
$class = $m['nazwa'] == $selected ? "nav-element-selected" : "nav-element";
echo '<span class="'.$class.'">'.$m['nazwa'].'</span>';
}

Michał Pakuła edytował(a) ten post dnia 24.03.11 o godzinie 01:06

Podobne tematy


Następna dyskusja:

Mapka Google na stronie




Wyślij zaproszenie do