Drupal 7 - 在#link表单类型条目中添加HTML?

时间:2013-02-27 19:59:52

标签: drupal drupal-7 drupal-forms

我需要将HTML标记添加到Drupal 7 #title链接表单元素的#type字段中。输出应该大致如下:

<a href="/saveprogress/nojs/123" id="saveprogress-link" class="ajax-processed">
  <span data-icon="&#61515;" aria-hidden="true" class="mymodule_symbol"></span>
  Save Progress
</a>

由于我正在做一些ajax表单,我不能只使用#markupl()函数。这是一个没有跨度的例子:

function mymodule_save_progress_link($nid) {
  return array(
    '#type' => 'link',
    '#title' => t('Save Progress'),
    '#href' => 'saveprogress/nojs/' . $nid,
    '#id' => 'saveprogress-link',
    '#ajax' => array(
      'wrapper' => 'level-form',
      'method' => 'html',
    ),
  );
}

function mymodule_print_links($nid=NULL) {
  ctools_include('ajax');
  ctools_include('modal');
  ctools_modal_add_js();

  $build['saveprogress_link'] = mymodule_save_progress_link($nid);

  return '<div id="level-form">' . drupal_render($build) . '</div>';
}

当我将<span>添加到#title字段时,它会被转义,而不会被解释为HTML。如何将此span(或其他标记)插入link类型表单元素的tile字段。 Drupal站点上没有详细记录此表单元素。

2 个答案:

答案 0 :(得分:4)

实际上,这比定制滚动主题要简单得多 - 只需告诉drupal_render()'#title'视为html。

function mymodule_save_progress_link($nid) {
  return array(
    '#type' => 'link',
    '#title' => '<span>unescaped HTML here</span> '.t('Save Progress'),
    '#href' => 'saveprogress/nojs/' . $nid,
    '#id' => 'saveprogress-link',
    '#ajax' => array(
      'wrapper' => 'level-form',
      'method' => 'html',
    ),
    '#options' => array(
      'html' => true,
    )
  );
}

这可以非常方便地将图像或其他元素添加到可点击区域。

答案 1 :(得分:0)

我确信有更好的方法,但这是使用自定义主题的一种工作方法。您需要在hook_theme()中注册自定义主题函数,然后禁用并重新启用模块以更新主题注册表。在自定义主题函数中,您可以重写输出HTML,但是您需要添加另一个类“use-ajax”。

/**
 * Implements hook_theme().
 */
function mymodule_theme() {
  return array (
    'mymodule_link' => array(
      'render element' => 'element',
    ),
  );
}

/**
* Returns HTML for a mymodule link
*
* @param $variables
*   An associative array containing:
*   - element: A render element containing the properties of the link.
*
* @ingroup themeable
*/
function theme_mymodule_link($variables) {
  return l(
    '<span data-icon="&#61515;" '.
      'aria-hidden="true" class="mymodule-symbol"></span> '.
      $variables['element']['#title'],
    $variables['element']['#href'],
    array(
     'html' => TRUE, 
     'attributes' => array(
       'class' => array('use-ajax'), 
       'title' => $variables['element']['#title']
     )
    )
  );
}

最后,要求表单元素使用此主题:

function mymodule_save_progress_link($nid) {
  return array(
    '#type' => 'link',
    '#title' => t('Save Progress'),
    '#href' => 'saveprogress/nojs/' . $nid,
    '#id' => 'saveprogress-link',
    '#ajax' => array(
      'wrapper' => 'level-form',
      'method' => 'html',
    ),
    '#theme' => 'mymodule_link',
  );
}