web-dev-qa-db-fra.com

Comment modifier les valeurs des champs sur une page d'affichage?

J'essaie de modifier les valeurs de champ dans un affichage de page. Je peux obtenir les valeurs des champs facilement en utilisant field_get_items () , mais en fonction des valeurs des autres champs, je devrai peut-être manipuler le texte et/ou l'affichage en fonction d'une logique PHP dans mon fichier modèle. J'essaie de le faire en utilisant hook_page_alter () ou hook_preprocess_HOOK () .

Je ne parviens pas à modifier le texte lorsque la page est affichée à l'aide de hook_page_alter() ou hook_preprocess_HOOK(). Je peux confirmer que ces 2 fonctions fonctionnent et que je peux extraire les valeurs de la base de données ($page['content']), Mais je ne peux pas remplacer la variable pour les définir. Par exemple:

function standard_submission_page_alter(&$page) {
    $node = menu_get_object();
    $page['content']['system_main']['nodes'][$node->nid]['field_title_nickname']['#items'][0]['value'] = 'A new nickname title!';
}

function standard_submission_preprocess_page(&$vars) {
    $vars['node']->field_title_nickname['und'][0]['value'] = 'A new nickname title 2x';
}

Avez-vous des idées sur la raison pour laquelle ma modification de la valeur de ce champ de texte field_title_nickname N'est pas acceptée et affichée? Il revient toujours à ce qui est à l'origine dans la base de données.

5
user785179

Si j'ai besoin de manipuler le texte et/ou l'affichage en fonction d'une logique PHP, je le ferais en utilisant hook_node_view () dans un module personnalisé, pas dans un modèle fichier.

function MYMODULE_node_view($node, $view_mode = 'full', $langcode = NULL) {
    if( $view_mode == 'full' ){
        if( some conditions here ){
            $node->content['field_title_nickname'] = array(
                '#markup' => '<div>A new nickname title 2x</div>'
            );
        }
    }
}
9
Sithu

Vous pouvez le faire en implémentant template_preprocess_field (& $ variables, $ hook) dans votre template.php

function THEMENAME_preprocess_field(&$variables, $hook) {
  if ($node = menu_get_object()) {
    if ($node->type == 'car') {
      if($variables['element']['#field_name'] == 'field_price') {
        $variables['items']['0']['#markup'] = $new_value; //new value;
      }
    }
  }
}

Vérifiez ici: http://tassaf.moriamedia.com/change-field-value-in-node-view/

3
Tareq Assaf

Si utilisez Display Suite implémentez hook_ds_pre_render_alter () pour modifier le tableau de rendu d'entité.

Exemple:

/**
 * Implements hook_ds_pre_render_alter().
 */
function MYMODULE_ds_pre_render_alter(&$layout_render_array, $context, &$vars) {
  $entity_type = $context['entity_type'];
  if ($entity_type == 'node') {
    $layout_render_array['ds_content']['Foo']['#markup'] = 'Bar';
  }
}
2
milkovsky