Wie erkenne ich die aktuelle URL?

10

Ich möchte eine Körperklasse in D6 hinzufügen, wenn Sie sich auf einer bestimmten Seite befinden, die sich derzeit in meinem template.phpIch habe:

if url('the/path') {
 add the body class...
}

aber diese Funktion scheint für mich nicht zu funktionieren.

hollywood3224
quelle

Antworten:

6

Sie sollten den folgenden Code verwenden, da er url()die URL für den als Argument übergebenen Pfad zurückgibt. Daher wird ein Wert zurückgegeben, dem die IF-Anweisung entspricht TRUE(außer in dem Fall, dass die Zeichenfolge "0"eine leere Zeichenfolge ist oder ist).

if ($_GET['q'] == 'the/internal/Drupal/path') {
  // Do stuff
}
Dave Reid
quelle
Möglicherweise benötigen Sie auch drupal_get_path_alias ($ _ GET ['q']), um nach Quell- / Zielpfad-Aliasnamen zu suchen.
Cam8001
12

Drupals Alias ​​ist das, wonach Sie suchen

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

Andere unten:

Vollständige URL

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

Drupals "interne" URL

<?php
$arg = arg();
// Path of 'node/234' -> $arg[0] == 'node' && $arg[1] == 234
?>
mikeytown2
quelle
arg (); ist der für mich. Prost;)
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 (prozedural)

// 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 (OOP)

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) {
    }
  }
}

Quelle: arg () ist veraltet und wird auf Drupal.org entfernt

Kenorb
quelle
2

Sie möchten die Funktion arg () verwenden. Sie können es auf zwei Arten verwenden:

$args = arg();

Dies gibt Ihnen im Grunde ein Array, wobei jedes URL-Argument ein anderer Wert ist, oder Sie können bestimmte Argumente wie folgt überprüfen:

$arg = arg(0);

Für Ihr Beispiel könnten Sie also Folgendes tun:

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

oder ich würde dies empfehlen:

$args = arg();
if(!empty($args[1]) && $args[0] == 'the' && $args[1] == 'path') { Do something  }
Mike L.
quelle
Sie können auch verwenden$arg = implode('/',arg());
tim.plunkett
1

Wenn Sie keine andere Seitenvorlage für Seiten mit einer bestimmten URL haben möchten, können Sie die aktuelle URL mit dem folgenden Code überprüfen.

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

url () ist nicht die Funktion, die die URL der aktuellen Seite zurückgibt. Wenn Sie url()ohne Angabe von Parametern aufrufen , erhalten Sie (zumindest unter Drupal 7 und ohne Implementierung von Modulen hook_ulr_outbound_alter()) die Basis-URL der Drupal-Installation.
Der Aufruf url('the/path')gibt Sie nur zurück "the/path", wenn kein Modul den von der Funktion zurückgegebenen Wert ändert. Das bedeutet, dass der von Ihnen angezeigte Code immer ausgeführt und die CSS-Klasse immer hinzugefügt wird.

kiamlaluno
quelle
0

Wenn Sie nach dem kanonischen Pfad suchen, für den Drupal eine Anfrage bearbeitet, können Sie $ _GET ['q'] drücken, was auch dann übersetzt werden sollte, wenn Drupal saubere URLs verwendet.


quelle
0

Drupal 8:

arg () Alternative, da es nicht mehr funktioniert:

$path_args = explode('/', current_path());
print $path_args[1];

Lesen Sie mehr: https://www.drupal.org/node/2274705

Pouya Sanooei
quelle