web-dev-qa-db-ja.com

値の代わりに選択リストのラベルをプログラムで表示する方法は?

次の形式で選択リストボックスを作成しました

Gender
1|Male
2|Female

次の情報を表に表示したいのですが、男性が「1」、女性が「2」です。

これが私のコードです:

function display_results_submissions(){
$results = db_query("SELECT * FROM {users}");
$header = array( t('Name'), t('Mail'), t('Gender'),);

foreach($results as $result){
        $rows[] = array(

            $result->name,
            $result->mail,
            $result->gender,

            );
    }

    return theme('table', array('header' => $header, 'rows'=>$rows));
}

「1」と「2」の代わりに男性または女性を表示したい。どうすればできますか?

4
Ian Nato

性別を保存する場合、データベースに格納される値はキーであり、値ではありません。したがって、データベースには男性/女性ではなく1/2が含まれていました。したがって、クエリは正しく、rows[]に格納する前にキーをフォーマットするだけで済みました。

function display_results_submissions(){
  $results = db_query("SELECT * FROM {users}");
  $header = array(t('Name'), t('Mail'), t('Gender'));
  foreach($results as $result){
    $gender = $result->gender == '1' ? t('Male') : t('Female');
    $rows[] = array(
      $result->name,
      $result->mail,
      $gender,
    );
  }

  return theme('table', array('header' => $header, 'rows' => $rows));
}
2
Vishal Kumar

選択ラベルが変更されてもコードを変更する必要がないため、entity_metadata_wrapperを使用する必要があると思います。

次の行はあなたが望むことをします:

$wrapper = entity_metadata_wrapper('user', $result->uid);
$gender = $wrapper->field_user_gender->label();

したがって、コードは次のようになります。

function display_results_submissions(){
  $results = db_query("SELECT * FROM {users}");
  $header = array(t('Name'), t('Mail'), t('Gender'));
  foreach($results as $result){
    $wrapper = entity_metadata_wrapper('user', $result->uid);
    $gender = $wrapper->field_user_gender->label();
    $rows[] = array(
      $result->name,
      $result->mail,
      $gender,
    );
  }

  return theme('table', array('header' => $header, 'rows' => $rows));
}

http://www.mediacurrent.com/blog/entity-metadata-wrapper に良いブログ投稿があります。

3
Irmela