Как добавить тег img к ссылкам в меню? - PullRequest
0 голосов
/ 04 июля 2019

Пожалуйста, помогите мне с моей проблемой. У меня есть таблица в базе данных со столбцом mlid (идентификатор ссылки меню) и столбцом path - у каждого основного меню ссылки есть изображение. Я создал свой пользовательский модуль, который добавляет поле загрузки файла в форму редактирования ссылки меню и сохраняет его mlid (идентификатор ссылки меню) и 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>

Пожалуйста, помогите.

1 Ответ

1 голос
/ 04 июля 2019

Вы можете реализовать обработчик препроцессора в вашем модуле, чтобы загрузить путь к изображению в массив $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);
}

Тогда вам просто нужно переопределить функцию шаблона, чтобы она выводила тег в соответствии с тем, был ли установлен источник изображения.

В файле template.php вашей темы создайте собственную функцию THEME_menu_link () (или, если она уже переопределена вашей текущей темой, аккуратно добавьте логику в существующую) - например, следующие переопределения реализация по умолчанию для Главного меню):

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";
}
...