ホームページ  >  記事  >  バックエンド開発  >  Drupal のユーザー名出力に関する問題 Drupal のテーマ関数の使用法、テーマ出力_PHP チュートリアル

Drupal のユーザー名出力に関する問題 Drupal のテーマ関数の使用法、テーマ出力_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-14 10:10:13784ブラウズ

今日、drupal のユーザー名の出力で問題が発生し、その出力が drupal のテーマ機能を使用していたので、情報を検索したところ、次のことがわかりました。

1.theme('username', array('account' => $log)) は関数を呼び出します。パラメーター 1 はフック、パラメーター 2 はパラメーターです

表示されていないコードが多すぎます。クリックしてリンクを開いてアドレスを表示してください。

2. 実行中に、テンプレートを見つけるために戻る前処理関数と処理関数は、それぞれ template_preprocess_username(&$variables) と template_process_username(&$variables) です。これら 2 つの関数は、theme.inc

にあります。

[php]
/**
 * theme_username() の変数を前処理します。
 *
 * 'name' や 'extra' などの変数に変更を加えるモジュールは、次のことを保証する必要があります
 *
を使用して、最後の文字列を出力に直接含めても安全であること  * check_plain() または filter_xss()
 *
 * @template_process_username() を参照
 */
関数 template_preprocess_username(&$variables) {
  $アカウント = $変数['アカウント']; 
 
  $variables['extra'] = ''; 
  if (empty($account->uid)) {
   $variables['uid'] = 0; 
   if (theme_get_setting('toggle_comment_user_verification')) {
     $variables['extra'] = ' (' . t('未検証') . ')'; 
   }
  }
  それ以外の場合 {
    $variables['uid'] = (int) $account->uid; 
  }
 
  // 名前を印刷しても安全な書式設定された名前に設定し、
  // 長すぎてテーブルが壊れることはありません。短縮せずにそのままにしておいてください。
  // 他の前処理関数を実装したい場合に備えて、サニタイズされていないバージョン
  // 独自の短縮ロジックまたはマークアップを追加します。そうする場合、次のことを確認する必要があります
  // $variables['name'] は印刷しても安全であること。  
  $name = $variables['name_raw'] = format_username($account); 
  if (drupal_strlen($name) > 20) {
    $name = drupal_substr($name, 0, 15) 。 「...」; 
  }
  $variables['name'] = check_plain($name); 
 
  $variables['profile_access'] = user_access('ユーザー プロファイルにアクセス'); 
  $variables['link_attributes'] = array(); 
  // 必要に応じて、リンク パスと属性を設定します。  
  if ($variables['uid'] && $variables['profile_access']) {
    // ローカル ユーザーにリンクしています。  
    $variables['link_attributes'] = array('title' => t('ユーザー プロフィールを表示します。')); 
    $variables['link_path'] = 'user/' 。 $variables['uid']; 
  }
  elseif (!empty($account->homepage)) {
    // 'class' 属性と同様に、'rel' 属性は
    // スペースで区切られた値のセットなので、配列として初期化して、
    // 他の前処理関数を追加しやすくなります。  
    $variables['link_attributes'] = array('rel' => array('nofollow')); 
    $variables['link_path'] = $アカウント->ホームページ; 
    $variables['homepage'] = $account->homepage; 
  }
  // l() 関数で check_plain() を再度実行する必要はありません。  
  $variables['link_options']['html'] = TRUE; 
  // デフォルトのクラスを設定します。  
  $variables['attributes_array'] = array('class' => array('username')); 
}
 
/**
 * theme_username() の変数を処理します。
 *
 * @template_preprocess_username() を参照
 */
関数 template_process_username(&$variables) {
  // l() 関数に渡すために link_options 配列を完成させます。  
  // これはプロセスフェーズで行われ、
によって属性が追加されるようになります   // 前処理フェーズ中のモジュールまたはテーマ。  
  if (isset($variables['link_path'])) {
    // $variables['attributes_array'] には適用する必要がある属性が含まれています
    // リンクがレンダリングされているかどうかには関係ありません。  
    // $variables['link_attributes'] には、
のみである必要がある属性が含まれています     // リンクがレンダリングされている場合に適用されます。前処理関数が推奨されます
    // リンクのみに属性を追加する場合を除き、前者を使用します。  
    // リンクがレンダリングされている場合、これらをマージする必要があります。一部の属性は
    // それ自体が配列であるため、マージは再帰的に行う必要があります。  
    $variables['link_options']['attributes'] = array_merge_recursive($variables['link_attributes'], $variables['attributes_array']); 
  }
}

/**
 * theme_username() の変数を前処理します。
 *
 * 'name' や 'extra' などの変数に変更を加えるモジュールは、次のことを保証する必要があります
 *
を使用して、最後の文字列を出力に直接含めても安全であること  * check_plain() または filter_xss()
 *
 * @template_process_username() を参照
 */
関数 template_preprocess_username(&$variables) {
  $account = $variables['account'];

$variables['extra'] = '';
  if (empty($account->uid)) {
   $variables['uid'] = 0;
   if (theme_get_setting('toggle_comment_user_verification')) {
     $variables['extra'] = ' (' . t('未検証') . ')';
   }
  }
  他に{
    $variables['uid'] = (int) $account->uid;
  }

// 名前を印刷しても安全な書式設定された名前に設定します
  // 長すぎてテーブルが壊れることはありません。短縮せずにそのままにしておいてください
  // 他の前処理関数を実装したい場合に備えて、サニタイズされていないバージョン
  // 独自の短縮ロジックまたはマークアップを追加します。そうする場合、次のことを保証する必要があります
  // $variables['name'] は安全に印刷できることを確認します。
  $name = $variables['name_raw'] = format_username($account);
  if (drupal_strlen($name) > 20) {
    $name = drupal_substr($name, 0, 15) 。 「...」;
  }
  $variables['name'] = check_plain($name);

$variables['profile_access'] = user_access('ユーザー プロファイルにアクセス');
  $variables['link_attributes'] = array();
  // 必要に応じて、リンク パスと属性を設定します。
  if ($variables['uid'] && $variables['profile_access']) {
    // ローカル ユーザーにリンクしています。
    $variables['link_attributes'] = array('title' => t('ユーザープロフィールを表示します。'));
    $variables['link_path'] = 'user/' 。 $variables['uid'];
  }
  elseif (!empty($account->homepage)) {
    // 'class' 属性と同様に、'rel' 属性は
を保持できます     // スペースで区切られた値のセットなので、配列として初期化して作成します
    // 他の前処理関数を追加しやすくなります。
    $variables['link_attributes'] = array('rel' => array('nofollow'));
    $variables['link_path'] = $account->ホームページ;
    $variables['ホームページ'] = $account->ホームページ;
  }
  // l() 関数で check_plain() を再度実行する必要はありません。
  $variables['link_options']['html'] = TRUE;
  // デフォルトのクラスを設定します。
  $variables['attributes_array'] = array('class' => array('username'));
}

/**
 * theme_username() の変数を処理します。
 *
 * @template_preprocess_username() を参照
 */
関数 template_process_username(&$variables) {
  // l() 関数に渡すために link_options 配列を完成させます。
  // これはプロセスフェーズで行われ、
によって属性が追加されるようになります。   // 前処理フェーズ中のモジュールまたはテーマ。
  if (isset($variables['link_path'])) {
    // $variables['attributes_array'] には適用する必要がある属性が含まれています
    // リンクがレンダリングされているかどうかに関係なく。
    // $variables['link_attributes'] には
のみであるべき属性が含まれています     // リンクがレンダリングされている場合に適用されます。前処理関数が推奨されます
    // リンクのみに属性を追加する場合を除き、前者を使用します。
    // リンクがレンダリングされている場合、これらをマージする必要があります。いくつかの属性は
    // それ自体が配列であるため、マージは再帰的である必要があります。
    $variables['link_options']['attributes'] = array_merge_recursive($variables['link_attributes'], $variables['attributes_array']);
  }
}
 

3、これらの量の処理が完了した後、主関数に到達し、ここで最終的な html の実装と出力 theme_username($variables);

[php]
関数テーマユーザー名($variables) {
  if (isset($variables['link_path'])) {
    // リンク パスがあるので、l() を使用してリンクを生成する必要があります。  
    // 追加のクラスは、
のような配列要素として追加できます。     // $variables['link_options']['attributes']['class'][] = 'myclass';  
    $output = l($variables['name'] . $variables['extra'], $variables['link_path'], $variables['link_options']); 
  }
  それ以外の場合 {
    // モジュールには重要な属性が追加されている可能性があるため、それらを含める必要があります
    // 出力内。追加のクラスは、
のような配列要素として追加できます。     // $variables['attributes_array']['class'][] = 'myclass';  
    $output = '' 。 $変数['名前'] 。 $variables['extra'] 。 ''; 
  }
  $output を返します。 
}
'>

関数テーマユーザー名($variables) {
  if (isset($variables['link_path'])) {
    // リンクパスがあるので、l() を使用してリンクを生成する必要があります。
    // 追加のクラスは
のような配列要素として追加できます     // $variables['link_options']['attributes']['class'][] = 'myclass';
    $output = l($variables['name'] . $variables['extra'], $variables['link_path'], $variables['link_options']);
  }
  他に{
    // モジュールには重要な属性が追加されている可能性があるため、含める必要があります
    // 出力内。追加のクラスは、次のような配列要素として追加できます
    // $variables['attributes_array']['class'][] = 'myclass';
    $output = '' 。 $変数['名前'] 。 $variables['extra'] 。 '';
  }
  $output を返します;
}
 
'>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/477543.html技術記事今天遇了drupal输出一用户名的问、使用的是drupal的主题関数テーマ出出的,在蟥资料搜索,摸索結果以下内容: 1、テーマ(ユーザー名,...
)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。