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で作るんなら、もういっそ・・・ということで、強引回避な方法でした。