使用Drupal 7,我有一个包含多个字段的内容类型。然后我有一个视图页面,它采用这种内容类型并显示上面的所有内容
所以把它想象成一个博客。。然后是主博客显示页面。
我把它设置好了,这样菜单项就会自动创建在合适的位置。
我还设置了Pathauto,以便它创建一个链接www.site.com/blog_anchor_node-title
单独的内容页面永远不会被访问,所以我不担心奇怪的url,然而,由于pathauto不支持标签,我使用了anchor
我需要通过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);
} }
这行不通。
首先,theme_links
实现的函数名称中不应包含主题。第二个引用之前链接的文档页面,`$variables['links']是…
要设置主题的链接的关联数组。每个链接的键都用作其CSS类。每个链接本身都应该是一个数组,包含以下元素
您的替换不起作用,因为您正在阵列上使用strpos
。
为了使这项工作进入API文档页面,复制代码(是的,孔代码),并在开头插入如下内容:
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.
}
//...
}
还要确保函数的名称正确。
为了允许我在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'];
}
}