如何将 img 标签添加到菜单链接?

How to add an img tag to menu links?

请帮我解决我的问题。 我在数据库中有一个 table,其中包含 mlid(菜单 link id)列和 path 列 - 每个 link 主菜单都有一个图像。我创建了我的自定义模块,它将文件上传字段添加到菜单 link 编辑表单,并将其 mlid (菜单 link id)和 path (图像路径)保存到数据库。

我的问题是:如何在我的菜单项中显示我的图像?我只想为每个菜单项添加一个 <img src=".."> 标签。 代码:

<ul class="menu">
  <li>
    <a>First menu item</a>
    // <img>HERE I WISH TO GENEARATE AN IMG TAG</img>
  </li>
  <li>
    <a>Second menu item</a>
    // <img>HERE I WISH TO GENEARATE AN IMG TAG</img>
  </li>
...
</ul>

请帮忙。

您可以在模块中实现 preprocess hook,以便将图像路径加载到传递给模板的 $variables 数组中:

function MODULE_preprocess_menu_link(&$variables) {
  $element = &$variables['element'];
  $mlid = $element['#original_link']['mlid'];

  # Retrieve image source (if any) from database/original_link object.
  $element['image_src'] = _your_helper_function($mlid);
}

那你只需要重写模板函数,让它根据是否设置图片源输出tag即可。

在您的 主题的 template.php 中,创建您自己的 THEME_menu_link() 函数(或者如果它已被您当前的主题覆盖,请仔细添加逻辑到现有的) - 例如,以下覆盖主菜单的 default implementation):

function THEME_menu_link__main_menu($variables) {
  $element = $variables['element'];
  $sub_menu = '';

  if ($element['#below']) {
    $sub_menu = drupal_render($element['#below']);
  }

  $output = l($element['#title'], $element['#href'], $element['#localized_options']);

  if (!empty($element['image_path'])) {
    $output .= '<img src="' . $element['image_path'] . '" />';
  }

  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}