2013-06-23 72 views
0

隨着Drupal 7,我有一個內容類型與多個領域。然後,我有一個視圖頁面,它將採用此內容類型並顯示其中的所有內容。Drupal更改菜單網址

所以想想它像一個博客..然後一個主要的博客顯示頁面。

我已經設置了這樣一個菜單項會自動創建在適當的位置。

我也Pathauto設置,以便它創建 www.site.com/blog_anchor_node-title

個別內容頁面將不能被訪問的鏈接,所以我不擔心陌生網址,然而,由於井號標籤不被pathauto支持,我以前

我需要的每個實例與通過的template.php文件中的#替換。

這將允許錨標籤自動添加到我的主菜單,頁腳,以及在它自己的「博客」頁面上跳轉菜單。

到目前爲止,我最接近的是:

function bartik_theme_links($variables) { 
    $links = $variables['links']; 
    if (!(strpos($links, "_anchor_") === false)) { 
     $links = str_replace("http://", '', $links); 
     $links = str_replace("_anchor_","#",$links); 
    } } 

這是行不通的。

回答

0

首先,您的theme_linksimplementation不應包含其功能名稱中的主題。第二個要引用之前鏈接的文檔頁面,`$ variables ['links']是...

要成爲主題的鏈接的關聯數組。每個鏈接的關鍵字都用作其CSS類。每個鏈接本身應該是一個陣列,其中包含以下元素

由於您在陣列上使用strpos,因此替換不起作用。

爲了使這項工作轉到API documentation page,複製代碼(是孔代碼),只需插入像開頭如下:

function bartik_links($variables) { 
    $links = $variables['links']; 
    foreach($links as $key => $l) { 
    // do your replacements here. 
    // You may want to print out $l here to make sure 
    // what you need to replace. 
    } 
    //... 
} 

同時確保功能正確命名。

0

爲了讓我在URL中使用#符號,我的工作是將以下內容添加到我的template.php文件中(在要調用的函數之前)。除了YOURTHEMENAME之外,您不必更改主題名稱中的其他任何內容:

function YOURTHEMENAME_url_outbound_alter(&$path, &$options, $original_path) { 
    $alias = drupal_get_path_alias($original_path); 
    $url = parse_url($alias); 

    if (isset($url['fragment'])){ 
     //set path without the fragment 
     $path = $url['path']; 

     //prevent URL from re-aliasing 
     $options['alias'] = TRUE; 

     //set fragment 
     $options['fragment'] = $url['fragment']; 
    } 
}