Diskuze: class="active" v menu pres PHP

PHP PHP class="active" v menu pres PHP American English version English version

Avatar
miki.brki
Člen
Avatar
miki.brki:

Zdar!
Mám menší problémek. Dělám si průběžně tutoriály pro programování webů.
Začal jsem u http://www.itnetwork.cz/…bove-stranky

Ten byl v pohodě, web jsem si udělal vzhledově podle sebe, ale jinak kod je skoro stejný.

Pak jsem přešel na http://www.itnetwork.cz/php/zaklady

V 10. článku je skládání stránek za použití webu z prvního tutorialu. Obsah stránky se vloží do index.php přes skript. Funguje to, ale přestal fungovat tag class="active". Je to tím, že jsem pořád v index.php a jen si načítám obsah ostatních tránek, takže když kliknu v menu např. na Kontakt, tak mám pořád aktivní kolonku "Home".
Nevíte někdo, jak to upravím, aby mi třída začla opět fungovat?
Dík za jakoukoliv radu

 
Odpovědět 14.6.2015 20:49
Avatar
Nahoru Odpovědět 14.6.2015 21:30
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na miki.brki
Inoue Yūki:

Třídu active musíš elementu přiřadit jen tehdy, pokud se nachází na dané stránce. Tudíž pokud máš název stránky v $_GET["page"]:

<a href="#" <?if($_GET["page"]=="articles"):?>class="active"<?endif?>>Articles</a>

Snad jsem tě dobře pochopil. :)

Nahoru Odpovědět 14.6.2015 21:34
Avatar
miki.brki
Člen
Avatar
miki.brki:

Podoba menu:

<pre class="php">
<nav>
<ul>
<li>Home</li>
<li>O mně</li>
<li>Lorem</li>
<li>Ipsum</li>
<li>Dolor</li>
<li>Kontakt</li>
</ul>
</nav>
</pre>

Podoba vkladani obsahu ze stranek:

<?php
if (isset($_GET['s­tranka']))
$stranka = $_GET['stranka'];
else
$stranka = 'home';
if (preg_match('/^[a-z0-9]+$/', $stranka))
{
$vlozeno = include('podsloz­ky/' . $stranka . '.php');
if (!$vlozeno)
echo('Podstránka nenalezena');
}
else
echo('Neplatný parametr.');
?>

Jak přesně to mám zadat do toho scriptu, co jsi mi poslal?

Editováno 14.6.2015 22:18
 
Nahoru Odpovědět 14.6.2015 22:15
Avatar
miki.brki
Člen
Avatar
Odpovídá na miki.brki
miki.brki:

Nevím, jak tam vlozit ten kod, aby byl videt, tak se prosím koukni do zdrojoveho kodu stranky.. To <pre> jsem tam vlozil az ted, aby to nevzalo jako kod, ale nefunguje to

Editováno 14.6.2015 22:20
 
Nahoru Odpovědět 14.6.2015 22:20
Avatar
miki.brki
Člen
Avatar
miki.brki:
<nav>
                    <ul>
                        <li><a href="index.php?stranka=home">Home</a></li>
                        <li><a href="index.php?stranka=omne">O mně</a></li>
                        <li><a href="index.php?stranka=lorem">Lorem</a></li>
                        <li><a href="index.php?stranka=ipsum">Ipsum</a></li>
                        <li><a href="index.php?stranka=dolor">Dolor</a></li>
                        <li><a href="index.php?stranka=kontakt">Kontakt</a></li>
                    </ul>
                </nav>

Už to mám

 
Nahoru Odpovědět 14.6.2015 22:31
Avatar
Michal Šmahel (ceskyDJ):
<nav>
    <ul>
        <li <?php if($_GET['stranka'] == 'domu' || $_GET['stranka'] == ''): ?>class="aktivni"<?php endif; ?>><a href="index.php">Domů</a></li>
        <li <?php if($_GET['stranka'] == 'o-mne'): ?>class="aktivni"<?php endif; ?>><a href="index.php?stranka=o-mne">O mně</a></li>
        <li <?php if($_GET['stranka'] == 'kontakt'): ?>class="aktivni"<?php endif; ?>><a href="index.php?stranka=kontakt">Kontakt</a></li>
    </ul>
</nav>
Nahoru Odpovědět 14.6.2015 22:50
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
miki.brki
Člen
Avatar
miki.brki:

První obrázek je kód.
Druhý je po kliknutí na Home a třetí po kliknutí na kontakt

 
Nahoru Odpovědět 14.6.2015 23:05
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na miki.brki
Inoue Yūki:

Jestli myslíš tu chybu, je to tím, že nemáš nastavený $_GET["stranka"] defaultně na indexu. Tudíž musíš v kódu kontrolovat, jestli je nastavený, třeba takto:

$stranka = isset($_GET["stranka"]) ? $_GET["stranka"] : "home";

A pak místo $_GET["stranka"] používat $stranka. :)

Nahoru Odpovědět 15.6.2015 6:14
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na miki.brki
Daniel Vítek:

Myslím si, že nejjednodušší je vypisovat to foreacheachem.

<ul>
  <?php $menu = array(
           'home' => 'Domů'
           'omne'  => 'O mně',
           'kontakt' => 'Kontakt'
        );
        $active = isset($_GET['stranka']) ? $_GET['stranka'] : 'home';
   ?>

  <?php foreach ($menu as $url=>$title) : ?>
      <li <?= $url == $active ? 'class="aktivni"' : '' ?>>
           <a href="index.php?stranka=<?= $url ?>">
                  <?= $title ?>
           </a>
      </li>
  <?php endforeach ?>
</ul>
 
Nahoru Odpovědět 15.6.2015 9:21
Avatar
smiesek
Člen
Avatar
Odpovídá na Daniel Vítek
smiesek:

můžu se prosím zeptat, jaké má opodstatnění použití ve foreach

<?=

myslela jsem, že to je pouze nějaký zkrácený výpis pro jinak

<?php $title ?>

ale pokud jsem to tedy takhle upravila, tak mi zcela zmizely odkazy na jednotlivé stránky a nějak tedy ten kod nemohu pochopit :-(

 
Nahoru Odpovědět 15.6.2015 14:05
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na smiesek
Inoue Yūki:
<?=$promenna?>

je zkrácenina od

<?php echo $promenna;?>

Tudíž ti proměnnou vypíše. Chceš říct, že jsi původní manuální výpis změnil(a) na zápis tím foreachem a nefunguje ti to? Nebo jsi změnil(a) <?=$title?> na <?php $title?>? Pokud to první, budu potřebovat víc informací, pokud to druhé, tak je to proto, že nic nevypisuješ (nemáš tam právě to rovnítko, které zastupuje echo, popřípadě print). :)

V tom kódu se nejdřív definuje pole odkazů. První je URL parametr, druhý název, který se vypíše do odkazu. Proměnná $action ti vrácí $_GET["stranka"] nebo "home", podle toho, jestli existuje $_GET["stranka"].

Poslední je cyklus, který projede celé pole odkazů a vypíše je v HTML formátu.

Editováno 15.6.2015 14:34
Nahoru Odpovědět  +3 15.6.2015 14:32
Avatar
smiesek
Člen
Avatar
Odpovídá na Inoue Yūki
smiesek:

:( uf já su hlupák, já jsem automaticky, kde jsi použil

<?=

to nahradila

<?php

a nenapadlo mě tedy, že tam musí přijít ještě případně

echo

Jinak je to tedy funkční a pouze v poli s indexem 'home' pak chybí , čárka za hodnotou 'Domů', aby to případně původního autora příspěvku nezmátlo, tedy

<?php $menu = array(
         'home' => 'Domů',
         'omne'  => 'O mně',
         'kontakt' => 'Kontakt'
      );
      $active = isset($_GET['stranka']) ? $_GET['stranka'] : 'home';
 ?>

Díky za vysvětlení jinak, já jsem viděla, že se nepředávala v konečném důsledku proměnná, ale netušila jsem proč.

 
Nahoru Odpovědět  +2 15.6.2015 14:38
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na smiesek
Daniel Vítek:

Takhle lze mnohem snáz přidávat do menu položky, a hlavně nemusíš mít u každé položky ten šílenej if, kterej dělá všude to samý :-)

 
Nahoru Odpovědět 15.6.2015 19:00
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na smiesek
Inoue Yūki:

Jinak <?= není short tag, tudíž by to mělo fungovat vždycky. Nemusíš to tedy nahrazovat <?php echo jestli ti jde o tohle.

Nahoru Odpovědět 15.6.2015 19:01
Avatar
smiesek
Člen
Avatar
smiesek:

:) již vše v pořádku, prostě jsem nevěděla, že

<?=

lze napsat i jako

<?php echo

znám právě ten druhý způsob

 
Nahoru Odpovědět 16.6.2015 6:12
Avatar
Jan Řehák
Člen
Avatar
Odpovídá na Inoue Yūki
Jan Řehák:

Prosímtě moc jsem nepochopil jak udělat aby byl index nastaven tak jako že to je první stránka. Jak (kam) mám upravit to $_GET. Děkuji za odpověd

 
Nahoru Odpovědět 26. února 18:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.