Drupal 7で Panels を使用して Profile2 プロファイルページを上書きするにはどうすればよいですか?
オーバーライドしようとしているページは、新しいprofile2ページの1つに対する編集です。次にURLの例を示します。 http://example.com/profile-user_settings/%uid/edit
ページマネージャーの既存のページ( 推奨Letharion )および hook_men ()の使用に関する回避策があります。
プロファイル2はメニュールーターにプロファイルページを登録しないようなので、hook_menu()が必要でした。これにより、ページマネージャーの既存のページがページを傍受できなくなりました。
function MYMODULE_menu() {
$items['profile-example'] = array(
'page callback' => '_profile2_form',
'page arguments' => array(),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
return $items;
}
function _profile2_form() {
global $user;
module_load_include('inc', 'profile2_page', 'profile2_page');
$profile2 = profile2_by_uid_load($user->uid, 'profile2_profile_system_name_goes_here');
$entity_form = entity_ui_get_form('profile2', $profile2, 'edit');
return $entity_form;
}
これは Page Manager Existing Pages によってインターセプトされ、 Panels モジュールによって適切に表示されるようになりました。
「ページマネージャーの既存のページを使用した回避策」に関しては、'access callback' => TRUE,
は、匿名ユーザー(つまり、uid = 0)にはプロファイルがないため、メニューフック内にあり、これによりダウンストリームエラーが発生します。追加できると思います
'access arguments' => array( 'edit own main profile')、
代わりに、Profile2の既存の権限を模倣するためにアレイに追加します。
上記のCitricguyに対応して、あなたの素晴らしいヒントを何度か試してみましたが、最終的に機能したのは、システムの各プロファイルのprofile2パスを効果的にハードコードすることでした。例:
$items['user/%user/edit/consumer_profile'] = array(
'page callback' => '_profile2_form',
'page arguments' => array(),
'access callback' => TRUE,
'title' => 'My Profile',
'type' => MENU_LOCAL_TASK,
);
return $items;
残りの例は真実のままでした。そうは言っても、おそらく「consumer_profile」ビットをエンティティフェッチャーヘルパーに渡すことができます。
これは 既知の問題 で、Panels2のようです。オーバーライドは、デフォルトのDrupalテンプレートエンジンで実行できます。
PanelsとProfile2の間に不足している接着剤を提供するパッチがここにあります。
Node Block モジュールを使用してブロックで計画することができます。これは、ノードのコンテンツをプロファイルページの構成可能なブロックに取り込むのに役立ちます。
レイアウトに関するページのカスタマイズを検討している場合は、page-profile.tpl.phpにフォーカスすることもできます。例えば新しいリージョンの配置など.
私はこれを見てきませんでしたが、推測では、Profile2は、フォームがPanels UIの他のものと同様にアクセス可能になるためにctoolsの「タスク」を実装する必要があると言っています。
ただし、単純な使用例では、既存のページをラップする ページマネージャの既存のページ を試すことができます。これは、現在の使用例では十分です。