【问题标题】:Drupal theme preprocess function - primary linksDrupal 主题预处理功能 - 主要链接
【发布时间】:2010-03-25 17:43:05
【问题描述】:

我最近写了一个主题函数来为我的主要链接添加一个类,效果很好。然后我编写了一些 CSS 类来使用自定义背景图像设置这些链接的样式。效果很好。现在问题来了,主要链接的链接文本仍然显示。通常这不是问题,因为我只是用一个自定义的“隐藏”类包装它。例如:

<span class="hide"><a href="#">Link Text</a></span>

所以我的问题是如何循环访问主要链接并用&lt;span&gt; 包装文本,就像我的示例一样?这是我用来添加类的主题函数。

function zkc_preprocess_page(&$vars, $hook) {

// Make a shortcut for the primary links variables
  $primary_links = $vars['primary_links'];
// Loop thru the menu, adding a new class for CSS selectors
    $i = 1;

    foreach ($primary_links as $link => $attributes){
        // Append the new class to existing classes for each menu item
        $class = $attributes['attributes']['class'] . " item-$i";
        // Add revised classes back to the primary links temp variable
        $primary_links[$link]['$attributes']['class'] = $class;
        $i++;
        } // end the foreach loop

// reset the variable to contain the new markup
$vars['primary_links'] = $primary_links;

}

【问题讨论】:

    标签: drupal themes preprocessor


    【解决方案1】:

    jQuery 是一个选项吗?

    试试这样的:

    $(document).ready(function(){
      $('#primary li a')
      .wrapInner('<span class="hide">' + '</span>');
    });
    

    编辑:

    或者,如果您想使用 Drupal,请将这个人放在您的 foreach 循环中:

    $link['title'] = '&lt;span class="hide"&gt;' . check_plain($link['title']) . '&lt;/span&gt;';

    【讨论】:

    • jQuery 的工作就像一个魅力,谢谢!一点点css,它就像我想要的那样工作。非常感谢。
    【解决方案2】:

    如果您只想隐藏链接文本,为什么不直接使用text-indent: -9999px; 之类的东西?

    【讨论】:

    • 我也喜欢这个主意!我的 css 比 php 好得多,所以这对我来说可能更好。
    • 这不是坏习惯,实际上是好习惯。如果您使用背景图片作为链接,这对人们如何查看来说很好,但对于屏幕阅读器,您仍然应该拥有链接文本。因此,使用文本缩进对普通用户隐藏它是可以的。屏幕阅读器仍然可以访问链接的信息,因为我们足够聪明,可以将链接文本留在那里。
    【解决方案3】:

    更改菜单链接输出的正确方法可以在主题层完成。您在使用预处理钩子时走在正确的道路上,但还有更多。

    请参阅此处了解更多信息:

    http://drupal.org/node/352924#comment-1189890

    http://api.drupal.org/api/function/theme_links/6

    【讨论】:

    【解决方案4】:

    错别字?

    $primary_links[$link]['$attributes']['class'] = $class;

    应该阅读;

    $primary_links[$link]['attributes']['class'] = $class;

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多