読者です 読者をやめる 読者になる 読者になる

ひとりまとめ

もろもろのメモ

Drupal7でProfile2の編集画面のテンプレートをなんとかしたい!

Drupalで画面をごにょごにょする場合、「xxx.tpl.php」というパスに合わせたファイル名のテンプレートでなんとかします。

ところが、便利モジュールである「Profile2(Profile 2 | Drupal.org)」の編集画面には、そのルールが通用しません。/editというパスで表示されるものの、そういう名前のテンプレートを配置しても読み込んでいるわけではなさそうです。

なーんかやりようはあるっぽいのですけど・・・さくっとやっちゃいたい!

 

ということで、完全お手軽・手抜きな「Profile2の編集画面を弄る方法」を思いついたので、忘れないようにメモ。

 

こういう作戦でいきます。

1)空のViews画面を用意

2)Viewsのテンプレートを作成

3)テンプレートの中で、Profiile2のフォームをレンダリング

4)保存ボタン押した後を調整

 

1)空のViews画面を用意

Viewsとはこちらのモジュール(Views | Drupal.org)。ノードなどをあれこれ選んで表示するのがラクになるものです。

これでとりあえず showするのをUsersとして適当に作ります。適当なのですが、1つでも要素がないとエラーが出ちゃうようなので、なんか出しておきます。あとで非表示にするので、本当になんでもいいです。

 

2)Viewsのテンプレートを作成

Viewsモジュールのをベースにして、今回の画面用のテンプレートを作ります。

元にするのはこのファイル。

/sites/all/modules/views/theme/views-view.tpl.php

これを自分が使用しているテーマのtemplates以下においてリネームします。

views-view--(表示されるパス)--.tpl.php

パスの「/」をハイフン2つの「--」で置き換えるところが、地味にはまりポイントかも。

 

3)テンプレートの中で、Profiile2のフォームをレンダリング

今作ったテンプレートの中で、次のように記述します。

// フォームの情報を取得
module_load_include('inc','profile2_page','profile2_page');

global $user;

$profile2 = profile2_by_uid_load($user->uid,'該当Profile2のMachine name');

$entity_form = entity_ui_get_form('profile2', $profile2, 'edit');

// レンダリング

print drupal_render($entity_form);

 

 

なお、空のページで残ってしまっていた要素は、テンプレートの中の「$rows」をprintしないことで表示回避することができました。

 

4)保存ボタン押した後を調整

このままだとSaveボタンを押したらデフォルトのProfile2画面へ行ってしまうので、それじゃあ都合が悪いという場合に、Rules(Rules | Drupal.org)を使って遷移先を変更します。

ひとまずEventsで「After updating an existing profile」とし、Conditionsは「Execute custom PHP code」でURLをみて判定。Actionsで「Page redirect」で任意の場所を指定することで、回避することはできました。

 

 

 いろんなページをViewsで作るんなら、もういっそ・・・ということで、強引回避な方法でした。