Saltar al contenido

Drupal – Cómo obtener la ID del nodo en jQuery/JavaScript

Necesitamos tu ayuda para compartir nuestros tutoriales referente a las ciencias informáticas.

Solución:

Como se mencionó anteriormente, el núcleo de Drupal no tiene ningún uso para el ID de nodo en el lado del cliente, por lo que no lo pasa. si desea acceder a él, deberá agregarlo manualmente:

function MYMODULE_node_view($node, $view_mode, $langcode) 
  if ($view_mode == 'full') 
    $setting = array('MYMODULE' => array('currentNid' => $node->nid));
    $node->content['#attached']['js'][] = array(
      'data' => $setting,
      'type' => 'setting',
    );
  
 

Luego, en el lado del cliente, tendrá acceso a él a través de Drupal.settings:

var currentNid = Drupal.settings.MYMODULE.currentNid;

Como mencionó MPD en su respuesta, trabajar con las clases css predeterminadas que Drupal genera para el elemento es una solución fácil que funciona sin código PHP personalizado.

Aquí está nuestra implementación:

(function($) 

  /**
   * Find Drupal Node ID based on  element classes.
   *
   * @return Node ID or false
   **/
  function getCurrentNodeId() 
    var $body = $('body.page-node');
    if ( ! $body.length )
      return false;
    var bodyClasses = $body.attr('class').split(/s+/);
    for ( i in bodyClasses ) 
      var c = bodyClasses[i];
      if ( c.length > 10 && c.substring(0, 10) === "page-node-" )
        return parseInt(c.substring(10), 10);
    
    return false;
  


  /**
   * Example usage...
   *
   **/
  Drupal.behaviors.yourModuleNameHere = 
    var nodeId = getCurrentNodeId();
    if ( nodeId ) 
      // Node ID found.
      // ...do something with it.
     else 
      // Node ID not found. Guess we are not on a node page
      // ...handle this case with care too. 
    
  

(jQuery);

El valor por defecto template_preprocess_html() tiene este bit de código en

if ($suggestions = theme_get_suggestions(arg(), 'page', '-')) 
  foreach ($suggestions as $suggestion) 
    if ($suggestion != 'page-front') 
      // Add current suggestion to page classes to make it possible to theme
      // the page depending on the current page type (e.g. node, admin, user,
      // etc.) as well as more specific data like node-12 or node-edit.
      $variables['classes_array'][] = drupal_html_class($suggestion);
    
  

Esto se pegará en las clases a la línea de elemento page-node-123. Si no desea usar su propio código en un módulo personalizado, puede obtener las clases a través de jQuery, busque la que coincida page-node-y luego analice el nid.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *