Pasar al contenido principal

Obtener IDs usando preprocess function Drupal 7/8/9

Descripción

A partir de Drupal 8, con la orientación a objetos se efectuaron grandes cambios...

Debido a que las propiedades del objeto de nodo están protegidas, no podremos acceder a ellas directamente de la forma en que lo hizo en el código de Drupal 7.

Por esta razón, si deseas usarlas en funciones de preproceso, deberás usar las funciones de obtención relevantes para acceder a ellas.

A continuación, se muestran algunos ejemplos en los que deberá cambiar la forma en que accede a las propiedades:

Instrucciones

Para utilizar una preprocess_function:

  1. Necesitarás tener instalado un subtheme a partir de un Tema base (Nunca modifiques archivos directamente en el tema base)
     
  2. Busca el archivo "nombre_subtheme.theme".
     
  3. Copia una de las opciones que está debajo para aplicarlas en tu Drupal.
Código
//Drupal 7 template_preprocess_node

function mytheme_preprocess_node(&$vars) {
  // Get the node ID.
  $nid = $vars['node']->nid;

  // Get the author ID.
  $uid = $vars['node']->uid;
}

//Drupal 8 template_preprocess_node

function mytheme_preprocess_node(&$vars) {
  // Get the node ID.
  $nid = $vars['node']->id();

  // Get the author ID.
  $uid = $vars['node']->getOwnerId();
}

//Desde otros lugares en el flujo de preproceso, deberá hacer un poco más si desea obtener el objeto de nodo, por ejemplo:

//Drupal 7 template_preprocess_html
function mytheme_preprocess_html(&$vars) {
  $menu_object = menu_get_object();
  if (is_object($menu_object) && property_exists($menu_object, 'nid')) {
    $nid = $menu_object->nid;
  }
}

//Drupal 8 template_preprocess_html
function mytheme_preprocess_html(&$vars) {
  $node = \Drupal::request()->attributes->get('node');
  $nid = $node->id();
}