it-swarm.com.de

Wie ändere ich Feldwerte auf einer Anzeigeseite?

Ich versuche, Feldwerte in einer Seitenanzeige zu ändern. Ich kann die Feldwerte leicht mit field_get_items () abrufen, aber abhängig von den Werten anderer Felder muss ich möglicherweise den Text und/oder die Anzeige basierend auf einer PHP - Logik in meinem ändern Vorlagendatei. Ich versuche es entweder mit hook_page_alter () oder hook_preprocess_HOOK () .

Ich kann den Text nicht ändern, wenn die Seite mit hook_page_alter() oder hook_preprocess_HOOK() angezeigt wird. Ich kann bestätigen, dass diese beiden Funktionen funktionieren und dass ich die Werte aus der Datenbank abrufen kann ($page['content']), Aber ich kann die Variable nicht überschreiben, um sie festzulegen. Zum Beispiel:

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

Irgendwelche Ideen, warum meine Änderung dieses field_title_nickname Textfeldwerts nicht akzeptiert und angezeigt wird? Es wird immer wieder auf das zurückgegriffen, was ursprünglich in der Datenbank enthalten war.

5
user785179

Wenn ich den Text und/oder die Anzeige basierend auf einer PHP Logik) bearbeiten muss, würde ich dies mit hook_node_view () in einem benutzerdefinierten Modul tun, nicht in einer Vorlage Datei.

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

Sie können dies tun, indem Sie template_preprocess_field (& $ variables, $ hook) in Ihrer template.php implementieren

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

Überprüfen Sie hier: http://tassaf.moriamedia.com/change-field-value-in-node-view/

3
Tareq Assaf

Wenn Sie Display Suite verwenden, implementieren Sie hook_ds_pre_render_alter () , um das Entity-Rendering-Array zu ändern.

Beispiel:

/**
 * 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