Domanda

Come posso costruire un blocco in Drupal, che è in grado di mostrare l'ID del nodo della pagina di visualizzazione il blocco è attualmente seduto su?

Sono utilizzando le visualizzazioni per costruire un grande pezzo del mio sito, ma ho bisogno di essere in grado di fare blocchi "intelligenti" in modalità PHP che avranno il contenuto dinamico a seconda di ciò che la vista sta visualizzando.

Come faccio a trovare il $ nid che una vista è visualizzato?

È stato utile?

Soluzione

Ecco un modo più robusti di ottenere l'ID del 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
    }
?>

Questo metodo funziona anche se si dispone di un percorso personalizzato per il nodo con i moduli path e / o pathauto.

Solo per riferimento, se non accendere il modulo path, gli URL predefiniti che Drupal genera sono chiamati "percorsi di sistema" nella documentazione. Se do accendere il modulo path, si è in grado di impostare percorsi personalizzati che sono chiamati "alias" nella documentazione.

Dal momento che ho sempre il modulo path acceso, una cosa che mi ha confuso in un primo momento era se fosse mai possibile per la funzione arg per restituire parte di un alias piuttosto che parte del percorso di sistema.

Come si è visto, la funzione arg restituirà sempre un percorso di sistema perché il arg funzione si basa su $_GET['q'] ... Dopo un po 'di ricerca sembra che $_GET['q'] restituisce sempre un percorso di sistema.

Se si desidera ottenere il percorso dalla richiesta di una pagina reale, è necessario utilizzare $_REQUEST['q']. Se il modulo path è abilitato, $_REQUEST['q'] può restituire un alias o un percorso di sistema.

Altri suggerimenti

Per una soluzione, in particolare uno che coinvolge un argomento vista nel bel mezzo di un percorso come department/%/list, vedi il post sul blog ID Nodo come View argomento da SEO-friendly sentiero URL .

Alla fine questo frammento di fatto il lavoro - è solo spogliato le URL e segnalati eseguire l'ultimo argomento.

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

Dato il commento di risposta, quanto sopra è stato probabilmente ridotto a questo, utilizzando il Drupal arg() funzione per ottenere una parte del percorso di richiesta:

<?php
    $nid = arg(3);
?>

Si dovrebbe considder il modulo di pannelli. Si tratta di un grande modulo e richiede un po 'di lavoro prima che realmente può attingere il suo potenziale. Quindi prendere in considderation.

Si può usare per impostare una pagina che contiene diverse viste / blocchi che possono essere posizionate in diverse regioni. Esso utilizza un concetto chiamato contesto che può essere qualsiasi cosa che riguarda ciò che si sta visualizzando. È possibile utilizzare tale contesto per determinare quale nodo viene visualizzato e non solo cambia blocchi ma anche la layout. E 'anche un po' più pulito in quanto è possibile spostare il codice PHP da interfaccia di amministrazione.

Una nota a parte, è anche scritto dalla vista dell'autore.

Ci sono un paio di modi per andare su questo:

  1. È possibile rendere i blocchi con Vista e passare il nid attraverso una discussione.

  2. È possibile passare manualmente nel nid accedendo l'oggetto $view usando il codice seguente. Si tratta di un allineamento a $view->result. Ogni riga nella visualizzazione è un oggetto in tale matrice, e la nid è in quell'oggetto per ciascuno. Così si potrebbe eseguire un foreach su questo e ottenere tutte le nid di tutte le righe nella vista abbastanza facilmente.

La prima opzione è molto più facile, quindi se questo risponde alle tue esigenze vorrei andare con quello.

Nuovo di Drupal 7: Il modo corretto per ottenere il nodo id utilizza la funzione menu_get_object ();

Esempio:

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

Drupal 8 ha un altro metodo. Check this out:

arg () è deprecato

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top