ビューで単一のカスタムフィールド値を変更する方法は?


11

フィールドGlobal:Custom Textのビューがあり、リンクとして変更されています。他のフィールドの値に応じて、このリンクを生成するための置換トークンを変更したい。

これをhook_views_pre_renderで変更しようとしましたが、これを行う方法が見つかりません。

hook_views_post_renderには2つの配列があります。

$view->style_plugin->render_tokens
$view->style_plugin->row_tokens

これには、すべての行に対して生成されたリンクが含まれていますが、それらはpre_renderには存在せず、post_renderでの変更は機能しません。

また、template_preprocess_views_view_fieldsでこれを実行しようとしましたが、その特定のビューでは、この関数は起動しません(他のビューでは起動します)。その理由はわかりません。

回答:


16
function hook_views_pre_render(&$view) {

  switch ($view->name) {
    case 'YOUR_VIEW_NAME':
      //  override the global custom text field value
      $view->field['nothing']->options['alter']['text'] = 'My custom text';
    break;
  }
}

詳細についてはリンクを確認してください プログラムでビューのグローバルカスタムテキストフィールドに値を挿入する方法

ビューのフィールドとしてnidを追加し、そのフィールドを条件に使用して、次のように条件を追加できます。 if ($nid == '124') { $view->field['nothing']->options['alter']['text'] = $nid}

簡単な方法は、ビューにチェックインした場合に新しい名前としてfield_waga_1を持つ新しいフィールドfield_wagaを作成し、ラベルを変更してそのフィールドをカスタム値で上書きすることです

if($view->result[0]->field_waga[0]['raw']['value'] == '10') {
//here you can create the field to act as custom text field and enter the custom //value
$view->result[0]->field_waga_1[0]['#markup'] = 'alter';
}

このソリューションは、すべてのフィールドを「カスタムテキスト」に変更します。選択したフィールドのみを変更するオプションが表示されず、リンクを変更できます(フィールドがリンクとして表示されるように変更されている場合)。残念ながら、提供されたリンクに記載されているpreprocess_views_view_fields()関数を使用できません。理由は不明です(私にとっては;))この特定のビューに対してこの関数が呼び出されないためです。
dmk.it 2013

次のように条件を追加できます。if($ nid == '124'){$ view-> field ['nothing']-> options ['alter'] ['text'] = $ nid}
harshal

更新された回答をチェック
13:11

このように条件を追加しました:if($ view-> result [0]-> field_waga [0] ['raw'] ['value'] == '10'){$ view-> field ['nothing']- > options ['alter'] ['text'] = 'ALTER'; 最初の行の値が「10」の場合、すべてのフィールドの「nothing」の値は「ALTER」になります。最初だけでなく、すべての行、残念ながら。これはグローバルな変更であり、選択された行には使用できないと思います。
dmk.it 2013

1
追加フィールドを使用してすでに持っているfield_wagaを追加し、そのフィールドをカスタムフィールドとして使用してカスタム値を入力するだけではありません
harshal

0

上記の回答の更新として、これを機能させるために 'alter_text'をTRUEに設定する必要がありました。例:

function hook_views_pre_render(&$view) {

  switch ($view->name) {
    case 'YOUR_VIEW_NAME':
    //  override the global custom text field value
    $view->field['nothing']->options['alter']['text'] = 'My custom text';
    $view->field['nothing']->options['alter']['alter_text'] = TRUE;

    break;
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.