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.
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>'
);
}
}
}
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/
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';
}
}