Làm cách nào để phát hiện URL hiện tại?


Câu trả lời:


6

Bạn nên sử dụng mã sau đây, vì url()trả về URL cho đường dẫn được truyền dưới dạng đối số; do đó, nó trả về một giá trị mà câu lệnh IF sẽ xem xét tương đương với TRUE(ngoại trừ trong trường hợp chuỗi là "0"hoặc là một chuỗi rỗng).

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

Bạn cũng có thể cần drupal_get_path_alias ($ _ GET ['q']) để kiểm tra các bí danh đường dẫn nguồn / đích.
cam8001

12

Bí danh của Drupal là những gì bạn đang tìm kiếm

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

Những người khác dưới đây:

URL đầy đủ

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

URL "Nội bộ" của Drupal

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

arg (); là một trong những cho tôi. chúc mừng;)
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 (thủ tục)

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

Nguồn: arg () không được dùng nữa và sẽ bị xóa tại Drupal.org



2

Bạn sẽ muốn sử dụng hàm arg (). Bạn có thể sử dụng nó theo một trong hai cách,

$args = arg();

Về cơ bản sẽ cung cấp cho bạn một mảng với mỗi đối số url là một giá trị khác hoặc bạn có thể kiểm tra các đối số cụ thể như vậy:

$arg = arg(0);

Vì vậy, ví dụ của bạn, bạn có thể làm:

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

hoặc tôi muốn giới thiệu điều này:

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

Bạn cũng có thể sử dụng$arg = implode('/',arg());
tim.plunkett 17/03/2016

1

Nếu bạn không muốn có một mẫu trang khác cho các trang có URL cụ thể, bạn có thể kiểm tra URL hiện tại bằng mã sau.

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

url () không phải là hàm trả về URL của trang hiện tại; nếu bạn gọi url()mà không cung cấp bất kỳ tham số nào, bạn sẽ nhận được (ít nhất là trên Drupal 7 và không có bất kỳ mô-đun nào triển khai hook_ulr_outbound_alter()) URL cơ sở của cài đặt Drupal.
Gọi url('the/path')sẽ trả về cho bạn "the/path", nếu không có mô-đun nào thay đổi giá trị được trả về từ hàm; điều đó có nghĩa là mã bạn đã hiển thị sẽ luôn được thực thi và lớp CSS luôn được thêm vào.


0

Nếu bạn đang tìm kiếm đường dẫn chính tắc mà Drupal đang phục vụ yêu cầu, bạn có thể nhấn $ _GET ['q'], dịch này sẽ dịch ngay cả khi Drupal sử dụng URL sạch.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.