ユーザーのアカウントページのタイトルを役割によって変更したい

Events happening in the community are now at Drupal community events on www.drupal.org.
bzj00220's picture

一般のかたに専門家を紹介するサイトを運営しています。

役割には「会員○○○」「一般会員」があります。
profile2を使って専門家のプロフィールには事務所名や本名・都道府県なども
登録されています

現在、
http://sample.jp/users/[user:name]
にアクセスするとユーザーのプロフィールが表示されるようになっています。

ページのタイトルはユーザー名になっています。

一般会員のページタイトルはそのままでいいのですが
専門家のプロフィールページのタイトルを
ユーザー名 | ○○県の○○○
のように設定したいと思っています。

なにかいい方法がありましたら教えていただければ幸いです。

Comments

カスタムモジュールの方法です

shigehiro's picture

カスタムモジュールに hook_menu_alter() を設置して、タイトルコールバックを変更します。

<?php
/**
* hook_menu_alter() の実装
*/
function custom_menu_alter(&$items) {
 
// ユーザーページのタイトルをカスタマイズするため、タイトルコールバックを変更
 
$items['user/%user']['title callback'] = 'custom_user_page_title';
}

/**
* カスタムタイトルコールバック
*/
function custom_user_page_title($account) {
 
$username = is_object($account) ? format_username($account) : '';

 
// 役割「会員○○○」の rid を 5 とすると
 
if (isset($account->roles[5])) {
   
// 都道府県のフィールド名を 'field_state'
    // profile2 のバンドルは Main profile とすると
   
$profile = profile2_load_by_user($account, 'main');
   
$items = field_get_items('profile2', $profile, 'field_state');
   
$field = field_view_value('profile2', $profile, 'field_state', $items[0]);
   
$state = drupal_render($field);

    return
$username . '|' . $state . '県の' . $account->roles[5];
  } else {
    return
$username;
  }
}
?>

※ 役割の rid はその役割の編集ページの url で分かります。

Drupal カスタマイズTips 更新中...
CMS自由自在!
http://customfield.jp/

返信有難うございます。

bzj00220's picture

カスタムモジュールですか・・・。
使ったことはないのですが、せっかくコードまで丁寧に書いていただいているので試してみたいと思います。
ありがとうございます。

試してみたんですができませんでした

bzj00220's picture

shigehiroさんの方法は間違えていないんだと思いますが
正直、phpのコードを見てもなにが書いてあるか理解できていないので
私自身がどこか間違えているのだと思います。

カスタムモジュールを作って設置することはできるのですが
その後、コードをコピペして直すべきところを直して
書き込んだつもりなのですが、タイトル欄は変わりませんでした。

申し訳ありません。
もし、よろしければどなたかコードを書かないですむ方法があれば教えていただければ幸いです。

shigehiro's picture

キャッシュをクリアしてもダメでしょうか?

「環境設定」 > 「パフォーマンス」 > 「すべてのキャッシュをクリア」

Drupal カスタマイズTips 更新中...
CMS自由自在!
http://customfield.jp/

bzj00220's picture

返信ありがとうございます。
キャッシュをクリアするとタイトル欄が変更されましたが
いくつか問題点がありますので教えていただければ幸いです。

・今回の施策はSEO対策のために考えたものなので、HTMLソース内の
 タグ内のページタイトルも同じように変更したいのですが
 どうすればいいのでしょうか?

・都道府県のところが「福岡県」と表示されてしまうのですがこのHTMLタグを消すにはどうしたら良いのでしょうか?

・役割を会員○○○としているのですがページタイトルのところには
 会員を表示せずに「福岡県の○○○」と表示させたいと思っています。

 return $username . '|' . $state . '県の' . $account->roles[4];
 を試しに
 return $username . '|' . $state . '県の○○○';
 としてみたのですがサイトが表示されなくなったので
 慌ててもとに戻しました。
 どのようにすればいいのでしょうか?

shigehiro's picture

今回の施策はSEO対策のために考えたものなので、HTMLソース内の
 タグ内のページタイトルも同じように変更したいのですが
 どうすればいいのでしょうか?

ヘッダーのタイトルタグ(<title></title>)もこれで変更されているはずですが、どうなっていますか?

都道府県のところが「福岡県」と表示されてしまうのですがこのHTMLタグを消すにはどうしたら良いのでしょうか?

役割を会員○○○としているのですがページタイトルのところには
 会員を表示せずに「福岡県の○○○」と表示させたいと思っています。

<?php
return $username . '|' . strip_tags($state) . '県の' . str_replace('会員', '', $account->roles[4]);
?>

で、どうでしょうか。

○○○ の部分が固定でよければ、

<?php
return $username . '|' . strip_tags($state) . '県の○○○';
?>

でも良いと思います。

Drupal カスタマイズTips 更新中...
CMS自由自在!
http://customfield.jp/

ありがとうございました。

bzj00220's picture

<?php
return $username . '|' . strip_tags($state) . 'の○○○';
?>

でリンクタグの問題も○○○の問題も解決出来ました。

ヘッダのタイトルタグの問題もよく確認してみたら、私がmetatagsモジュールを入れてそこでユーザーのページのタイトル部分を「[user:name]|[site:name]」と設定していたのが優先されていたみたいです。

試しにmetatagsモジュールでユーザーアカウントページのタイトルを空白にしてみたらヘッダのタイトルタグも空白になってしまいました。

こちらの方はmetatagsの設定でどうにかなるか、今から色々とためしてみるつもりです。

bzj00220's picture

ヘッダのタイトルタグの問題はmetatagsモジュールの設定で解決出来ました。
ユーザーのページのタイトルの部分の設定を次にしたら思っていた通りになりました。

[user:name]|[user:profile-******:field-*******]の○○○|[site:name]
*****の部分はそれぞれプロファイルの名前とフィールドの名前が入ります。

やりたかったことはすべて解決しました。
ありがとうございました。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: