Diskuze: class="active" v menu pres PHP
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 17 zpráv z 17.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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.
Podoba menu:
<pre class="php">
<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>
</pre>
Podoba vkladani obsahu ze stranek:
<?php
if (isset($_GET['stranka']))
$stranka = $_GET['stranka'];
else
$stranka = 'home';
if (preg_match('/^[a-z0-9]+$/', $stranka))
{
$vlozeno = include('podslozky/' . $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?
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
<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
<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>
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.
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>
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
<?=$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.
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č.
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ý
Jinak <?= není short tag, tudíž by to mělo fungovat vždycky. Nemusíš to tedy nahrazovat <?php echo jestli ti jde o tohle.
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
Zobrazeno 17 zpráv z 17.