Comment détecter l'URL actuelle?


Réponses:


6

Vous devez utiliser le code suivant, as url()renvoie l'URL du chemin passé en argument; par conséquent, il renvoie une valeur que l'instruction IF considérerait comme équivalente TRUE(sauf dans le cas où la chaîne est "0"ou est une chaîne vide).

if ($_GET['q'] == 'the/internal/Drupal/path') {
  // Do stuff
}

Vous pouvez également avoir besoin de drupal_get_path_alias ($ _ GET ['q']) pour vérifier les alias de chemin source / destination.
cam8001

12

Drupal's Alias ​​est ce que vous cherchez

<?php
$path = drupal_get_path_alias($_GET['q']);
if ($path == 'the/path') {
  // do stuff
}
?>

D'autres ci-dessous:

URL complète

<?php
global $base_root;
$base_root . request_uri()
?>

URL "interne" de Drupal

<?php
$arg = arg();
// Path of 'node/234' -> $arg[0] == 'node' && $arg[1] == 234
?>

arg (); est celui pour moi. cheers;)
Daithí

4

Drupal 7

// Retrieve an array which contains the path pieces.
$path_args = arg();

// Check if the current page is admin.
if (arg(0) == 'admin') {
  // This is wrong even in D7. path_is_admin() should be used instead.
}

// Conditionally add css or js in certain page.
function mymodule_page_build(&$page) {
  if (arg(0) == 'sth' && arg(1) == 'else') {
    drupal_add_css(drupal_get_path('module', 'mymodule') . '/css/my.css');
  }
}

// Load the current node.
if (arg(0) == 'node' && is_numeric(arg(1))) {
  // This is wrong even in D7. menu_get_object() should be used instead.
}

Drupal 8 (procédural)

// Retrieve an array which contains the path pieces.
$path_args = explode('/', current_path());

// Check if the current page is admin.
if (\Drupal::service('router.admin_context')->isAdminRoute(\Drupal::routeMatch()->getRouteObject())) {
}

// Conditionally add css or js in certain page.
function mymodule_page_build(&$page) {
  if (\Drupal::routeMatch()->getRouteName() == 'my.route') {
    $page['#attached']['css'][] = drupal_get_path('module', 'mymodule') . '/css/my.css';
  }
}

// Load the current node.
$node = \Drupal::routeMatch()->getParameter('node');
if ($node) {
}

Drupal 8 (POO)

use Symfony\Component\HttpFoundation\Request;
use Drupal\Core\Routing\AdminContext;
use Drupal\Core\Routing\RouteMatchInterface;
class myClass {
  public function __construct(Request $request, AdminContext $admin_context, RouteMatchInterface $route_match) {
    $this->request = $request;
    $this->adminContext = $admin_context;
    $this->routeMatch = $route_match;
  }

  public function test() {
    // This might change in https://drupal.org/node/2239009
    $current_path = $this->request->attributes->get('_system_path');
    // Retrieve an array which contains the path pieces.
    $path_args = explode('/', $current_path);

    // Check if the current page is admin.
    if ($this->adminContext->isAdminRoute($this->routeMatch->getRouteObject())) {
    }

    // Load the current node.
    $node = $this->routeMatch->getParameter('node');
    if ($node) {
    }
  }
}

Source: arg () est obsolète et sera supprimé sur Drupal.org



2

Vous voudrez utiliser la fonction arg (). Vous pouvez l'utiliser de deux manières,

$args = arg();

Ce qui vous donnera essentiellement un tableau avec chaque argument url étant une autre valeur, ou vous pouvez vérifier des arguments spécifiques comme ceci:

$arg = arg(0);

Donc pour votre exemple, vous pourriez faire:

if(!is_null(arg(1)) && arg(0) == 'the' && arg(1) == 'path') { Do something  }

ou je recommanderais ceci:

$args = arg();
if(!empty($args[1]) && $args[0] == 'the' && $args[1] == 'path') { Do something  }

Vous pouvez également utiliser$arg = implode('/',arg());
tim.plunkett

1

Si vous ne souhaitez pas avoir un modèle de page différent pour les pages avec une URL spécifique, vous pouvez vérifier l'URL actuelle à l'aide du code suivant.

if (arg(0) == 'the' && arg(1) == 'path') {
  // Add the extra CSS class.
}

url () n'est pas la fonction qui renvoie l'URL de la page actuelle; si vous appelez url()sans fournir de paramètres, vous obtiendrez (au moins sur Drupal 7, et sans aucun module implémentant hook_ulr_outbound_alter()) l'URL de base de l'installation Drupal.
L'appel url('the/path')vous renverra simplement "the/path"si aucun module ne modifie la valeur renvoyée par la fonction; cela signifie que le code que vous avez affiché sera toujours exécuté et la classe CSS toujours ajoutée.


0

Si vous recherchez le chemin canonique pour lequel Drupal sert une demande, vous pouvez appuyer sur $ _GET ['q'], qui devrait se traduire même si Drupal utilise des URL propres.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.