パネライザーコンテンツ、つまりノードページ内で使用されているいくつかのフィールドの出力を変更しようとしていますが、hook_preprocess_page(&$ vars)はレンダリングされた#markupとして出力を表示しており、自分のコンテンツ?何か助けてください?
Template_preprocess_panels_paneがあります
/**
* Implements preprocess_panels_pane().
*/
function YOURTHEME_preprocess_panels_pane(&$vars) {
}
あなたが持っているフィールドの出力を変更したい場合:
/**
* Implements hook_panels_pane_content_alter().
*/
function YOUR_MODULE_panels_pane_content_alter($content, $pane, $args, $contexts) {
$content ...
}
私はそれが古い質問であることを知っていますが、まだこれに対する答えを探している人は誰でもいます。 panel.moduleファイルの関数template_preprocess_panels_paneを見てください。
$vars['content'] = !empty($content->content) ? $content->content : '';
$ contentはオブジェクトではなくなりました。
私はニースの解決策を見ました ここ 。これによれば、hook_themeを使用して、オーバーライド前処理関数をtrueに設定するだけです。この方法で、元の関数をコピーして貼り付け、オーバーライドする方法として使用できます。これについてさらにサポートが必要な場合は、お知らせください。
Hook_panels_pane_content_alter()がパネライザフィールド(hook_node_viewまたはhook_ctools_render_alterでは変更できなかった)で動作することを確認できます。
$ contextsを使用してコンテンツタイプとrawフィールド値を決定し、$ contentを変更してレンダリングされた出力を変更します。ここでは、異なるカスタムフィールドから3文字の通貨コードを取得する通貨モジュールAPIを使用して、レンダリングされた価格のフォーマットを変更します。
/**
* Implements hook_panels_pane_content_alter().
*/
function custom_example_panels_pane_content_alter($content, $pane, $args, $contexts) {
if(isset($contexts['panelizer']->data->type) && $contexts['panelizer']->data->type = "your_content_type") {
if ($content->subtype == 'node:field_your_content_type_price' && isset($content->content[0]['#markup']) && isset($contexts['panelizer']->data->field_roomshare_price['und'][0]['value']) && is_numeric($contexts['panelizer']->data->field_your_content_type_price['und'][0]['value']) && isset($contexts['panelizer']->data->field_your_content_type_currency_type['und'][0]['value']) && strlen($contexts['panelizer']->data->field_your_content_type_currency_type['und'][0]['value']) == 3) {
$currency = currency_load($contexts['panelizer']->data->field_roomshare_currency_type['und'][0]['value']);
if ($currency) {
$amount = $contexts['panelizer']->data->field_your_content_type_price['und'][0]['value'];
$formatted = $currency->format($amount);
$content->content[0]['#markup'] = $formatted;
}
}
}
}