web-dev-qa-db-ja.com

パネルまたはパネライザコンテンツの前処理

パネライザーコンテンツ、つまりノードページ内で使用されているいくつかのフィールドの出力を変更しようとしていますが、hook_preprocess_page(&$ vars)はレンダリングされた#markupとして出力を表示しており、自分のコンテンツ?何か助けてください?

3
Naveed Khan

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 ...
}
3
alzz

私はそれが古い質問であることを知っていますが、まだこれに対する答えを探している人は誰でもいます。 panel.moduleファイルの関数template_preprocess_panels_paneを見てください。

$vars['content'] = !empty($content->content) ? $content->content : '';

$ contentはオブジェクトではなくなりました。

私はニースの解決策を見ました ここ 。これによれば、hook_themeを使用して、オーバーライド前処理関数をtrueに設定するだけです。この方法で、元の関数をコピーして貼り付け、オーバーライドする方法として使用できます。これについてさらにサポートが必要な場合は、お知らせください。

1
Sumit Monga

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;
            }
            }
    }
}
0