3

#titleDrupal 7#typeリンク フォーム要素のフィールドに HTML マークアップを追加する必要があります。出力はおおよそ次のようになります。

<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 フォームを実行しているので、単に使用#markupしてl()機能させることはできません。スパンなしの例を次に示します。

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>と、エスケープされ、HTML として解釈されません。このスパン (または他のマークアップ) をタイプ フォーム要素#titleのタイル フィールドに挿入するにはどうすればよいですか。linkこのフォーム要素は、Drupal サイトで十分に文書化されていません。

4

2 に答える 2

4

実際には、テーマをカスタム ローリングするよりもはるかに簡単な方法があります。html としてdrupal_render()扱う'#title'ように指示するだけです。

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,
    )
  );
}

これは、クリック可能な領域に画像やその他の要素を追加するのに非常に便利です。

于 2013-03-07T21:04:56.957 に答える
0

もっと良い方法があると思いますが、ここではカスタム テーマを使用する 1 つの作業方法を示します。カスタム テーマ関数を 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',
  );
}
于 2013-02-28T19:48:00.273 に答える