¿Cómo puedo construir un bloque en Drupal que es capaz de mostrar el ID de nodo de la vista de la página el bloque actualmente está sentado en?

Estoy usando vistas a construir un gran pedazo de mi sitio, pero tengo que ser capaz de hacer «inteligente» de los bloques en el modo PHP que va a tener contenido dinámico dependiendo de lo que la vista está mostrando.

¿Cómo puedo encontrar el $nid que una vista se está mostrando actualmente?

Estoy un poco confundido con respecto a lo que entendemos por ‘ver’ aquí – se refiere a las vistas desde el módulo de vistas? Si es así, ¿por qué sólo tienen un ID de nodo? (La mayoría de las opiniones son colecciones de nodos, pero tal vez usted tiene un especial escenario de uso)
Hiya – tienes razón – estoy usando el módulo de vistas a buscar nodos y, a continuación, el formato correctamente. Toda la información sobre estos puntos de vista se refiere a un nodo, aunque – sólo tengo que conseguir que el NID.

OriginalEl autor MrFidge | 2009-11-03

6 Comentarios

  1. 14

    Aquí es más robusto forma de obtener el ID de nodo:

    <?php
        //Check that the current URL is for a specific node:
        if(arg(0) == 'node' && is_numeric(arg(1))) {
            return arg(1); //Return the NID
        }
        else { //Whatever it is we're looking at, it's not a node
          return NULL; //Return an invalid NID
        }
    ?>

    Este método funciona incluso si usted tiene una ruta de acceso personalizada para el nodo con el path y/o pathauto módulos.

    Apenas para la referencia, si usted no encender el path módulo, el valor predeterminado Url que Drupal genera se denomina «sistema de rutas» en la documentación. Si usted hacer encender el path módulo, usted es capaz de personalizar los caminos por los que se llaman de «alias» en la documentación.

    Ya que siempre tengo la path módulo de encendido, una cosa que me confundió al principio fue si era posible para el arg función para devolver parte de un alias en lugar de ser parte de la ruta de acceso del sistema.

    Como resulta, el arg función siempre devuelve un sistema de camino porque el arg función se basa en $_GET['p']… Después de un poco de investigación, parece que $_GET['q'] siempre devolverá una ruta de acceso del sistema.

    Si quieres obtener la ruta de acceso de la página actual solicitud, usted necesita utilizar $_REQUEST['q']. Si el path módulo está habilitado, $_REQUEST['q'] puede devolver un alias o una ruta de acceso del sistema.

    En una nota relacionada, la habilitación de la path módulo le dará acceso a una función llamada drupal_lookup_path, que usted puede utilizar para encontrar una ruta de acceso del sistema a partir de un alias y vice-versa. Ver el drupal_lookup_path documentación para obtener más información: <api.drupal.org/api/function/drupal_lookup_path/6>
    También, una vez que usted tiene un ID de nodo, puede utilizar el node_load función para obtener toda la información acerca de ese nodo: <api.drupal.org/api/function/node_load/6>
    Dependiendo el contexto en el que se está pegando el código en el return declaraciones no siempre se puede hacer sentido… es posible que desee reemplazar con $displayed_node = si usted necesita devolver algo más, pero usted necesita para obtener el NID para algo.
    Una bonita Marca – que va a ser una gran ayuda!
    Me alegra poder ayudar!

    OriginalEl autor

  2. 2

    Al final de este fragmento hizo el trabajo, sólo es despojado de la limpieza URL e informó que el último argumento.

    <?php
        $refer= $_SERVER ['REQUEST_URI'];
        $nid = explode("/", $refer);
        $nid = $nid[3];
    ?>

    Dado la respuesta a los comentarios, lo anterior fue probablemente reduce a esto, el uso de Drupal arg() función para obtener una parte de la ruta de solicitud:

    <?php
        $nid = arg(3);
    ?>
    Usted debe echar un vistazo a la arg() función para extraer los argumentos de un drupal ruta – véase: api.drupal.org/api/function/arg/6
    Henrik – eso es perfecto! Trabajó un sueño.
    +1 para la contabilización de seguimiento con la solución encontrada.
    He editado tu respuesta al punto a la ‘arg()’ uso de función, como sería la forma recomendada. Ajustar o deshacer, si eso no es ACEPTAR.
    No se muy bien eso, gracias de nuevo 🙂

    OriginalEl autor MrFidge

  3. 1

    Hay un par de maneras de ir sobre esto:

    1. Usted puede hacer sus bloques con Vistas y pasar el nid a través de un argumento.

    2. Manualmente, puede pasar en el nid accediendo a la vista de $objeto, utilizando el siguiente código. Es una matriz en la vista de $->resultados. Cada fila de la vista es un objeto en la matriz, y el nid es en ese objeto para cada uno de ellos. Así que usted podría ejecutar un foreach en que y obtener toda la nid de todas las filas en la vista con bastante facilidad.

    La primera opción es mucho más fácil, así si que se adapte a sus necesidades me gustaría ir con eso. Espero que ayude!

    La opción 1 no funciona me temo que podría recoger el argumento, pero el argumento era el formato correcto para lo que yo necesitaba – lo siguieron usando el alias en lugar de la nodeID
    Usted puede marcar la opción bajo el argumento de que pase el ID de nodo de la URL, si no hay ningún argumento está presente. O usted puede comprobar el código de PHP opción y, de entrada, algo como: $url = explode(‘/’,$_GET[‘p’]); return $url[1];

    OriginalEl autor theunraveler

  4. 1

    Debe considder los paneles del módulo. Es un gran módulo y requiere un poco de trabajo antes de que usted realmente puede aprovechar su potencial. De modo que tome en considderation.

    Se puede utilizar para la instalación de una página que contiene varias vistas/bloques que se pueden colocar en diferentes regiones. Se utiliza un concepto llamado contexto que puede ser cualquier cosa relacionada con lo que está viendo. Usted puede utilizar el contexto para determinar el nodo que se está viendo y no sólo bloques de cambio, sino también el diseño. También es un poco más limpio ya que puede mover el código PHP de distancia desde la interfaz de administración.

    En una nota de lado, también escrita por los puntos de vista del autor.

    He mirado en los paneles de antes, no se realmente se metió en ella, tal vez este podría haber sido el momento ^^

    OriginalEl autor googletorp

  5. 0

    Este tema es bastante antiguo que yo veo. Sólo para refrescar un poco con algo nuevo acerca de Drupal 7 la manera correcta para obtener el id del nodo es usar la función menu_get_object();

    examp:

    $node = menu_get_object();
    $contentType = node_type_get_name( $node );

    Drupal 8 tiene otro método.
    Compruebe esto hacia fuera

    arg() está en desuso

    Espero que ayude!

    OriginalEl autor Fabrizio Sabato

Dejar respuesta

Please enter your comment!
Please enter your name here