2012-03-07 71 views
0

我需要在Magento中自定義Navigation.php的幫助。我正在使用Superfish創建頂級導航欄,如果沒有選擇其他選項卡,則始終打開第一個選項卡(此Superfish導航欄示例具有第二個選項卡作爲默認設置:http://users.tpg.com.au/j_birch/plugins/superfish/#sample4Magento Top Nav:使用PHP向第一類添加CSS類

但是,由於Magento使用PHP生成頂級菜單,我需要使用PHP插入CSS類sfHover。

這是Magento的使用的CSS類插入頂部導航鏈接代碼:

$classes = array(); 
    $classes[] = 'level' . $level; 
    $classes[] = 'nav-' . $this->_getItemPosition($level); 
    if ($this->isCategoryActive($category)) { 
     $classes[] = 'active'; 
    } 
    $linkClass = ''; 
    if ($isOutermost && $outermostItemClass) { 
     $classes[] = $outermostItemClass; 
     $linkClass = ' class="'.$outermostItemClass.'"'; 
    } 
    if ($isFirst) { 
     $classes[] = 'first'; 
    } 
    if ($isLast) { 
     $classes[] = 'last'; 
    } 
    if ($hasActiveChildren) { 
     $classes[] = 'parent'; 
    } 

這是Magento的使用,以確定在頂部導航每個類別的職位代碼:

protected function _getItemPosition($level) 
{ 
    if ($level == 0) { 
     $zeroLevelPosition = isset($this->_itemLevelPositions[$level]) ? $this->_itemLevelPositions[$level] + 1 : 1; 
     $this->_itemLevelPositions = array(); 
     $this->_itemLevelPositions[$level] = $zeroLevelPosition; 
    } elseif (isset($this->_itemLevelPositions[$level])) { 
     $this->_itemLevelPositions[$level]++; 
    } else { 
     $this->_itemLevelPositions[$level] = 1; 
    } 

    $position = array(); 
    for($i = 0; $i <= $level; $i++) { 
     if (isset($this->_itemLevelPositions[$i])) { 
      $position[] = $this->_itemLevelPositions[$i]; 
     } 
    } 
    return implode('-', $position); 
} 

我試過以下添加我的CSS類:

if ($this->_getItemPosition($level) == "1") { 
     $classes[] = 'sfHover'; 
    } 

if ($position == "1") { 
      $classes[] = 'sfHover'; 
     } 

但他們都沒有工作,無論是與三個等號===或單引號。

有沒有人比我有更多的Magento/PHP知識知道我能做什麼?提前致謝!

更新:Superfish腳本去掉sfHover類。需要將「主動」類添加到Navigation.php中。

我可以在手動編碼導航下面的代碼做在top.phtml:

<?php $_anyActive = false; foreach ($this->getStoreCategories() as $_category) { $_anyActive = $_anyActive || $this->isCategoryActive($_category); } ?> 
<li class="level0 nav-1 level-top first parent <?php echo !$_anyActive ? 'active' : '' ?>"> 

但我不知道如何集成了從Navigation.php ...

代碼
+0

1.該導航高度緩存,因此請確保在進行更改後清除緩存。 2.當你var_dump($ position)時會發生什麼; – 2012-03-07 18:45:45

+0

1.每次我對文件進行更改時,我一直在清除緩存。 2.我會嘗試var_dump。我以前從來沒有做過。謝謝! – mercyt 2012-03-07 19:11:24

+0

更新:嘗試做一個var_dump,它返回的是「null」。我不確定我是否正確使用它,但嘗試了兩種不同的方法,但仍然無法正常工作。 – mercyt 2012-03-07 19:26:40

回答

0

我會嘗試以下操作。改變

if ($isFirst) { 
    $classes[] = 'first'; 
} 

if ($isFirst) { 
    $classes[] = 'first sfHover'; 
} 

這應該插入兩個第一類和sfHover進入菜單陣列中的第一個元素。另一種方法是從主題中移除自動創建的菜單,並將其替換爲內容塊以提供菜單項。它不是很優雅,但完成了工作。

+0

這確實在每個導航欄的第一項中輸入了「sfHover」,但由於某些原因,Superfish腳本剝離了sfHover(我可以說因爲源HTML中有sfHover,但Firebug顯示的是沒有該類的元素施加)。 我將需要弄清楚如何僅在沒有其他項目處於活動狀態時纔將「活動」類應用於第一個導航項。請參閱編輯的問題。謝謝您的意見! – mercyt 2012-03-07 23:15:08