web-dev-qa-db-fra.com

Comment modifier une seule valeur de champ personnalisé dans les vues?

J'ai une vue avec le champ Global: Texte personnalisé, qui est modifié en tant que lien. Je souhaite modifier les jetons de remplacement pour générer ce lien, en fonction d'une valeur d'un autre champ.

J'ai essayé de modifier cela dans hook_views_pre_render mais je ne trouve pas de moyen de le faire.

Dans hook_views_post_render, il y a deux tableaux:

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

qui contient des liens générés pour chaque ligne, mais ils ne sont pas présents dans pre_render, et les modifier dans post_render ne fonctionne pas.

J'ai également essayé de le faire dans template_preprocess_views_view_fields mais pour cette vue spécifique, cette fonction ne se déclenche pas (pour d'autres vues, elle le fait), et je ne sais pas pourquoi.

11
dmk.i-t
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;
  }
}

Vérifiez le lien pour plus de détails Comment insérer des valeurs dans le champ de texte personnalisé global des vues par programme?

ajoutez nid comme champ dans la vue et utilisez ce champ pour la condition, vous pouvez ajouter la condition comme suit: if ($nid == '124') { $view->field['nothing']->options['alter']['text'] = $nid}

Le moyen le plus simple est de créer un nouveau champ field_waga qui aura field_waga_1 comme nouveau nom si vous archivez la vue, puis vous pouvez changer l'étiquette et remplacer ce champ par votre valeur personnalisée

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';
}
16
harshal

Pour mettre à jour la réponse ci-dessus, j'ai dû définir 'alter_text' sur TRUE pour que cela fonctionne, par exemple:

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