Nasıl ben PHP am on bir css sınıfı hangi sayfada bağlı olarak seçebilirsiniz?

6 Cevap

I need to insert a class named "current" into a list like below depending on what page I am on.
All pages on my site are included into the index page like this,
Index.php includes a header file then it includes the body file and then footer file.
The body file will be one of the pages below.
It is included through the page like this in the url index.php?p=home
So I can easily get the page variable $p and know when I am on a certain page

Peki aşağıdaki gibi bir gezinti listeye "geçerli" css sınıfı eklemek için en iyi yolu olurdu?

<li class="drop"><a href=""><em>Home</em></a></li>
<li class="drop"><a href=""><em>inbox</em></a></li>
<li class="drop"><a href=""><em>outbox</em></a></li>
<li class="drop"><a href=""><em>online users</em></a></li>
<li class="drop"><a href=""><em>all users</em></a></li>
<li class="drop"><a href=""><em>forums</em></a></li>
<li class="drop"><a href=""><em>blogs</em></a></li>
<li class="drop"><a href=""><em>bulletins</em></a></li>
<li class="drop"><a href=""><em>news</em></a></li>

... Bu sadece bir mockup liste gerçek liste daha karmaşıktır


UPDATE: I don't know if an array is the way to go or not, Above is a quick example, below is my ACTUAL menu list, there are submenus embeded into the upper level list items, so if I am on any page in a submenu, the main menu should have the "current" class added to it, so doing an array is somewhat complex?

    <div id="bottomrow"> 
      <div class="pad"> 
        <ul class="menu left">
          <li class="first"><a href="/"><em>Home</em></a></li>
          <li class="current users drop"><a href=""><em>Users</em></a><span class="drop">&nbsp;</span> 
    	  	<ul id="moreheader">
              <li><a href=""><em>Widgets</em></a></li>
              <li><a href=""><em>News</em></a></li>
              <li><a href=""><em>Promote</em></a></li>
              <li><a href=""><em>Development</em></a></li>
              <li><a href=""><em>Bookmarks</em></a></li>
              <li><a href=""><em>About</em></a></li>
            </ul>
    	  </li>
          <li><a href=""><em>Forums</em></a></li>
          <li class="drop current"><a href="/moreheader"><em>More</em></a><span class="drop">&nbsp;</span> 
            <ul id="moreheader">
              <li><a href=""><em>Widgets</em></a></li>
              <li><a href=""><em>News</em></a></li>
              <li><a href=""><em>Promote</em></a></li>
              <li><a href=""><em>Development</em></a></li>
              <li><a href=""><em>Bookmarks</em></a></li>
              <li><a href=""><em>About</em></a></li>
            </ul>
          </li>
          <li class="moneytabmenu"><a href="/moneytabmenu"><em>Money:<span class="moneytabmenu-total">$0.00</span></em></a></li>
        </ul>
        <ul class="menu right">
          <li class="drop myaccount"><a href="" class="first"><img class="avatar" src="http://gravatar.com/avatar.php?gravatar_id=7ab1baf18a91ab4055923c5fd01d68a2&amp;rating=pg&amp;size=80&amp;default=" height="19" width="19" alt="you" /><em>My 
            Account</em></a><span class="drop">&nbsp;</span> 
            <ul id="myaccount">
              <li><a href=""><em>Dashboard</em></a></li>
              <li><a href=""><em>Account Settings</em></a></li>
              <li><a href=""><em>Settings</em></a></li>
            </ul>
          </li>
          <li class="drop"><a href=""><em>Mail</em></a><span class="drop">&nbsp;</span> 
            <ul id="mailboxheader">
              <li><a href=""><em>InBox</em></a></li>
              <li><a href=""><em>SentBox</em></a></li>
              <li><a href=""><em>Trash</em></a></li>
              <li><a href=""><em>Post Bulletin</em></a></li>
              <li><a href=""><em>View Bulletins</em></a></li>
            </ul>
          </li>
          <li class="drop"><a href=""><em>More</em></a><span class="drop">&nbsp;</span> 
            <ul id="moreheader">
              <li><a href=""><em>Widgets</em></a></li>
              <li><a href=""><em>News</em></a></li>
              <li><a href=""><em>Promote</em></a></li>
              <li><a href=""><em>Development</em></a></li>
              <li><a href=""><em>Bookmarks</em></a></li>
              <li><a href=""><em>About</em></a></li>
            </ul>
          </li>
        </ul>
      </div>
    </div>
    <!-- END div#bottomrow -->
  </div>

6 Cevap

Geçenlerde ben bunu uygun styling çekecek böylece 'cur' için sayfa adını eşleşen elemanın id değiştirmek istedim JavaScript kullanarak benzer bir şey yaptım.

Ben ilk eğik çizgi soymak için sayfa adını, JavaScript almak için php en $_SERVER["PHP_SELF"] kullanılan ve sonra kullanarak bölünmüş. ' ayırıcı olarak, bana geçerli sayfa adını vererek. Ben id sıfırlama çünkü Sonra, ben geçerli düğümü çoğaltmak ve (dinamik id değiştiremezsiniz) yeni için eski takas gerekiyordu.

Sınıf için, bu yolu daha kolay, ama sen Sınıfadı için ayarlamak hangilerinin bilmek niyetinde nasıl bağlıdır. JavaScript bir seçenek midir? Eğer durum bu ise, sen gülüyorsun. PHP tamamen yapıyor, sizin listeleri doldurmamak nasıl bilmeden düşünmek için çok sayıda faktör vardır.

Değil gerçekten iyi bir çözüm, ancak bu gibi menü öğeleri her üzerinde $p değişkene karşılık gelen bir id olsaydı:

<li id="home"><a href=""><em>Home</em></a></li>
<li id="inbox"><a href=""><em>inbox</em></a></li>

o zaman çıkışı ($p = 'home' için burada gösterilen) PHP script ile uygun bir <style> etiketi ya da olabilir:

<style type="text/css">#home { /* Your "current" styling here */ }</style>

veya vücut etiketi üzerinde bir id ayarlayın:

<body id="page_home">

ve ana stil sayfasında bu koymak:

#page_home #home,
#page_inbox #inbox,
...
{
    /* Your "current" styling here */
}

her şeyden önce ben bir dizi koyun olur:

$pages = array();
$pages['home'] = array(
    'name' => 'Home',
    'url' => '......',
    'submenus' => array(
       'test-submenu' = array(
          'name' => 'Test Submenu',
          'url' => '.....',
       )
    )
);
$pages['inbox'] = array(
    'name' => 'Inbox',
    'url' => '......',
);

sonra benim html i yapardı:

<?php foreach ($pages as $section => $page) { ?>
    <li class="drop <?php echo ($_GET['section'] == $section) ? 'current' : ''; ?>">
        <a href="<?php echo $page['url'] ?>"><em><?php echo $page['name'] ?></em></a>
    </li>  
<?php } ?>

Eğer bu deneyin komut ve menü seçeneği aynı adı kullanırsanız, basit bir özyinelemeli:

    $menu = array(
'home',
'users',
array('widgets','news','promote','development','bookmarks'),
'wrapper',
'forums',
array('widgets','news','promote','development','bookmarks'),
'contact'
);

function li_menu($arrItens){
    preg_match("/[^\/]\/(.*?)\./",$_SERVER['PHP_SELF'],$current);
    echo "<ul>";
    foreach($arrItens as $title){
    	if ( is_array($title) ) {li_menu($title);} else {
    		$cur = ( $title == $current[1] ) ? 'current' : 'drop';
    		echo '<li class="'. $cur . '"><a href="'. $title. '.php"><em>'. $title .'</em></a></li>';
    	}
    }
    echo "</ul>";
}
li_menu($menu);

Ben bunun yerine böyle <li> öğelerin bir listesi dosyası sürdürmenin, bir diziye öğeler koymak ve bunları dinamik oluşturmak gerektiğini düşünüyoruz.

$arr = array(
    'Home' => 'url/to/home',
    'inbox' => 'url/to/inbox',
    //etc
);

foreach($arr as $name => $url)
{
    echo '<li class="drop';
    if ($name == $p) echo ' curPage';
    echo '"><a href="'.$url.'"><em>'.$name.'</em></a></li>';
}

Sen $p karşılaştırmak ve geçerli sayfa olduğunu belirlemek için döngü oluştururken orada ne gerek karşılaştırma kriterleri kullanabilirsiniz.

Bu konuda gitmek nasıl bir kaba örneği

$menu = array(
    'Home'         => '#'
  , 'inbox'        => '#'
  , 'outbox'       => '#'
  , 'online users' => '#'
  , 'all users'    => '#'
  , 'forums'       => '#'
  , 'blogs'        => '#'
  , 'bulletins'    => '#'
  , 'news'         => '#'
);

$current = "outbox";

foreach ( $menu as $label => $url )
{
  $css = ( $label == $current ) ? 'drop current' : 'drop';
  echo '<li class="', $css, '"><a href="', $url, '"><em>', $label, '</em></a></li>';
}