Обхождане на масив с foreach?

ivan_s

Registered
Извинявам се предварително, че пускам нова тема на този въпрос, но вече от 5-6 часа стоя на това ниво и се чудя какво да правя? Ето и проблема ми:
Правя навигационно меню. Имам един масив с разделите на сайта. Този масив го обхождам с foreach и менюто се добавя автоматично.
Ето го и кода:

Код:
$munu["home"] = "home";
$munu["about"] = "about";
$munu["gr"] = "gr";

foreach($munu as $m => $menu_title){
      if ($_GET['lang'] == "bg") {
          $razdel = "_active";
      } 
      else if ($_GET['lang'] == "gr") {
          $razdel = "_active";
      }

      $st= "<a href='/" class='menu".$razdel."'>$menu_title</a>";
}

print $st;

С този код класът "_active" се добавя навсякъде във всяко едно меню. Това сигурно е заради foreach, незнам? Как да направя така, че този клас да се добавя само в home или ако съм в about - само в about, или там където съм в момента, т.е. като краeн резултат искам в html ако съм в Home страницата да виждам този резултат:
Код:
<a href='/" class="menu_active">home</a>
<a href='/" class="menu">about</a>
<a href='/" class="menu">gr</a>
Ако съм в About страницата да виждам този резултат:
Код:
<a href='/" class="menu">home</a>
<a href='/" class="menu_active">about</a>
<a href='/" class="menu">gr</a>
и Ако съм в gr страницата да виждам този резултат:
Код:
<a href='/" class="menu">home</a>
<a href='/" class="menu">about</a>
<a href='/" class="menu_active">gr</a>
Надявам се сте ме разбрали какво искам да попитам. Предварително благодаря на отзоалите се.
 
Направи си отделна функция, която да ти определя css класа извън foreach-a.
Само че, аз не съм светнат достатъчно за да ти я направя. :)
 
ivan_s каза:
$munu["home"] = "home";
$munu["about"] = "about";
$munu["gr"] = "gr";

foreach($munu as $m => $menu_title){
if ($_GET['lang'] == $menu_title) {
$razdel = "_active";
}
else if ($_GET['lang'] == $menu_title ){
$razdel = "_active";
}

$st= "<a href='/" class='menu".$razdel."'>$menu_title</a>";
}

print $st;
:idea:
 
//somebody overtook me, may be :oops:

Грешката ти е чисто логична. Тоест, ако съм на страница "bg" ще провери, че съм в bg и $_GET е равна на "bg" и от там какво искаш? Това е нещо статично което не се променя на всяка интерация.

Пробвай така:

PHP:
<?php
$munu["home"] = "home";
$munu["about"] = "about";
$munu["gr"] = "gr";

foreach($munu as $m => $menu_title){
      $razdel = null;
      if ($_GET['lang'] == $m) {
          $razdel = "_active";
      }
	  
      $st= "<a href='/' class='menu".$razdel."'>$menu_title</a> | ";  
	  
	  print $st;
}
?>

И обърни внимание какво съм променил. Тоест ако $_GET ти е ключа на масива. Ако ти имаш $_GET["lang"] която е gr (от масива) тя ще види и ще я направи само за него _active, както и там за home и т.н. Това което беше направил ти няма нужда да е в цикъл. Също така внимавай с презаписвамето на променливите.
 
@Karcho, благодаря ти, това, което предлагаш наистина работи, но аз явно не се бях изразил правилно. Искам като се отвори сайта за първи път менюто Home да си стой с клас "_active", т.е. хоме да е по дефолт така:
<a href='/" class="menu_active">home</a>
<a href='/" class="menu">about</a>
<a href='/" class="menu">gr</a>
Благодаря
 
ivan_s каза:
@Karcho, благодаря ти, това, което предлагаш наистина работи, но аз явно не се бях изразил правилно. Искам като се отвори сайта за първи път менюто Home да си стой с клас "_active", т.е. хоме да е по дефолт така:
<a href='/" class="menu_active">home</a>
<a href='/" class="menu">about</a>
<a href='/" class="menu">gr</a>
Благодаря

Има доста начини за този работа.

Първо ако страниците са ти статични, може просто на страницата за about да сложиш _active class, друго може да провериш с PHP например PHP_SELF.

Пример:
PHP:
<a href='anywhere.php' class='menu<?if(strstr($_SERVER["PHP_SELF"], "about")) echo "_active";?>'>About</a>

Това проверява просто дали някаде по URL-a има думата "about" (в този случай, и добавя "_active", ако го има)
 
Не са ми статични страниците, нали затова е този код:
Код:
<?php
$munu["home"] = "home";
$munu["about"] = "about";
$munu["gr"] = "gr";

  foreach($munu as $m => $menu_title){
        $razdel = null;      
            if ($_GET['lang'] == $m) {
                $razdel = "_active";
            } 

$st= "<a href='/' class='menu".$razdel."'>$menu_title</a>";                      

print $st;}

?>

Как да направя ако в url-a нямам $_GET['lang'] == $m, получената стойност САМО на Home по дефолт да е тази
<a href='/" class="menu_active">home</a>
, а другите да са си
<a href='/" class="menu">about</a>
<a href='/" class="menu">gr</a>
 
Може би въпроса ми е неразбран или това което питам е трудно за реализиране...?
 
Слагаш още един иф във цикъла :idea:
PHP:
if ( !isset($_GET['lang']) && $menu_title == 'home' ) {
$razdel = "_active"; 
}
 
@Replace, златен си!:)) Ако знаеш колко време се мъчих да го направя това. Получаваш +1 от мен. Благодаря на теб и на всички отзовали се :?:
 

Back
Горе