2012-03-06 68 views
0

我正在建立一個CMS,我有我的導航問題。我想將活動類添加到導航中的活動項目。這將正常工作,如果我不得不爲每個項目一個頁面,但我有其他部分和鏈接如何使導航項目顯示正確的活動類與php

這裏是我的代碼:

<div id="main-menu"> 
<?php foreach ($items as $item) : ?> 
    <?php $active = ''; ?> 
    <?php if (isset($page)) : ?> 
    <?php ($item->pageId === $page->id) ? $active = 'active' : $active = ''; ?> 
    <?php endif; ?> 
    <?php if ($item->link == '') : ?> 
    <a href="<?php echo ROOT_PATH; ?>front/site/page?x=<?php echo $item->id; ?>" class="<?php echo $active; ?>"><?php echo $item->label; ?></a> 
    <?php else : ?> 
    <a href="<?php echo $item->link; ?>" class="<?php echo $active; ?>"><?php echo $item->label; ?></a> 
    <?php endif; ?> 
    <?php endforeach; ?> 

當我沒有一個頁面,然後我將鏈接提供的值指向特定部分。我怎樣才能讓他們都能正常工作?

+6

聖PHP代碼...嘿嘿,不知道我見過有人代碼的PHP之前的方式。無論如何,很難從你給的上下文中說出你的意思。也許給一些你正在獲得的HTML輸出,以及所需的HTML輸出。然後是應該改變行爲的示例URL。 – user17753 2012-03-06 21:34:46

+0

另外,當使用[三元比較](http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary)嘗試和設置前面的變量像'$ active = ($ item-> pageId === $ page-> id)? 'active':'';' – 2012-03-06 21:38:14

+0

我循環瀏覽菜單上的所有鏈接項目,我將活動設置爲空,之後檢查頁面標識是否等於鏈接項目標識,如果是,則表示我的項目鏈接在它的頁面上,我設置了$ active類。之後,我檢查我是否沒有設置頁面,如果沒有,我會做一些事情。例如,如果我在菜單中有5個物品鏈接,3個帶有頁面,2個沒有頁面,只是鏈接到其他不活動的東西,那麼輸出就是這樣。 – Mythriel 2012-03-06 21:39:56

回答

0

你不需要那麼多<?php ?>標籤!無論如何,你的問題似乎是不正確的使用ternary operator。試試這個:

<?php 
foreach ($items as $item) : 
    $active = ''; 
    if (isset($page)) : 
     $active = ($item->pageId === $page->id) ? 'active' : ''; 
    endif; 
    if ($item->link == '') : 
     ?> 
     <a href="<?php echo ROOT_PATH; ?>front/site/page?x=<?php echo $item->id; ?>" class="<?php echo $active; ?>"><?php echo $item->label; ?></a> 
    <?php else : ?> 
     <a href="<?php echo $item->link; ?>" class="<?php echo $active; ?>"><?php echo $item->label; ?></a> 
    <?php 
    endif; 
endforeach; 
?> 
+0

同樣的東西時,它不會設置類爲活動狀態,該語句正確設置$活動,問題是沒有頁面的鏈接 – Mythriel 2012-03-06 21:43:01

+0

您的代碼表示如果沒有設置「$ page」,$ $ active '等於''''。你在尋找不同的邏輯嗎? – bfavaretto 2012-03-06 21:48:03

+0

是的,例如我的新聞欄目是一個模塊,我的聯繫人是一個模塊,它們被鏈接到,當我在新聞頁面或聯繫頁面時,我的菜單鏈接不活動。如果不是頁面,設置$活動,使它們同時處於活動狀態。 – Mythriel 2012-03-06 21:52:12

0

下面是如何在只一個對PHP標籤的做到這一點:

<?php 

foreach($items as $item) 
{ 
    $active = ($item->pageId == $page->id) ? 'active' : ''; 
    if(!$item->link) 
    { 
     echo '<a href="' . ROOT_PATH . '/front/site/page?x=' . $item->id . '" class="' .$active . '">' . $item->label . '</a>'; 
    } 
    else 
    { 
     echo '<a href="' . $item->link . '" class="' .$active . '">' . $item->label . '</a>'; 
    } 
} 

?> 
+0

是的連接運算符(。)是你最好的朋友,這是我喜歡的風格。最小化php標籤使得代碼更易於閱讀......以及人類。字符串的單個連字符表示法有助於減少轉義。 – user17753 2012-03-06 21:45:56

+0

代碼是這樣寫的,因爲我在一個模板和php標籤之間會插入更多的html – Mythriel 2012-03-06 21:47:58

相關問題