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

11

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.

dmk.it
la source

Réponses:

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

Consultez 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 condition, vous pouvez ajouter la condition comme suit: if ($nid == '124') { $view->field['nothing']->options['alter']['text'] = $nid}

Le moyen le plus simple consiste à créer un nouveau champ field_waga qui aura field_waga_1 comme nouveau nom si vous archivez la vue, puis vous pouvez modifier 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';
}
harshal
la source
Cette solution change chaque champ en «Mon texte personnalisé», je ne vois pas d'option pour modifier uniquement les champs choisis et pour modifier un lien (si le champ est modifié pour s'afficher en tant que lien) de cette façon. Malheureusement, je ne peux pas utiliser une fonction preprocess_views_view_fields (), qui est mentionnée dans le lien que vous avez fourni, car pour une raison inconnue (pour moi;)), cette fonction n'est pas déclenchée pour cette vue spécifique.
dmk.it
vous pouvez ajouter une condition comme suit: if ($ nid == '124') {$ view-> field ['nothing'] -> options ['alter'] ['text'] = $ nid}
harshal
vérifier la réponse mise à jour
harshal
Condition ajoutée de cette manière: if ($ view-> result [0] -> field_waga [0] ['raw'] ['value'] == '10') {$ view-> field ['nothing'] - > options ['alter'] ['text'] = 'ALTER'; } Si a a une valeur '10' dans la première ligne que tous les champs 'rien' a la valeur 'ALTER'. Pas seulement en premier, mais sur toutes les lignes, malheureusement. Je pense que c'est un changement global et qu'il ne peut pas être utilisé pour les lignes choisies.
dmk.it
1
Non, ajoutez simplement un field_waga que vous avez déjà à nouveau en utilisant le champ add, puis utilisez ce champ comme champ personnalisé pour saisir vos valeurs personnalisées
harshal
0

En tant que mise à jour de 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;
  }
}
Tyler Fahey
la source