วิธีการตรวจสอบ URL ปัจจุบัน?


10

ฉันต้องการเพิ่มคลาสร่างกายใน D6 หากคุณอยู่ในหน้าใดหน้าหนึ่งในขณะนี้ที่template.phpฉันมี:

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

แต่ฟังก์ชั่นนั้นใช้งานไม่ได้สำหรับฉัน


คำตอบ:


6

คุณควรใช้รหัสต่อไปนี้เนื่องจากurl()จะส่งคืน URL สำหรับเส้นทางที่ส่งเป็นอาร์กิวเมนต์ ดังนั้นมันจะส่งกลับค่าที่คำสั่ง IF จะพิจารณาเทียบเท่ากับTRUE(ยกเว้นในกรณีที่สตริงเป็น"0"หรือเป็นสตริงว่าง)

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

คุณอาจต้องใช้ drupal_get_path_alias ($ _ GET ['q']) เพื่อตรวจสอบชื่อแทนพา ธ ต้นทาง / ปลายทาง
cam8001

12

Alias ​​ของ Drupal คือสิ่งที่คุณมองหา

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

คนอื่น ๆ ด้านล่าง:

URL แบบเต็ม

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

URL "ภายใน" ของ Drupal

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

หาเรื่อง (); เป็นหนึ่งสำหรับฉัน ไชโย;)
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 (ขั้นตอน)

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

ที่มา: arg () เลิกใช้แล้วและจะถูกลบที่ Drupal.org



2

คุณจะต้องการใช้ฟังก์ชัน arg () คุณสามารถใช้หนึ่งในสองวิธี

$args = arg();

ซึ่งโดยทั่วไปจะให้อาร์เรย์กับอาร์กิวเมนต์ url แต่ละรายการเป็นค่าอื่นหรือคุณสามารถตรวจสอบอาร์กิวเมนต์เฉพาะดังนี้

$arg = arg(0);

ดังนั้นสำหรับตัวอย่างของคุณคุณสามารถทำได้:

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

หรือฉันจะแนะนำสิ่งนี้:

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

คุณสามารถใช้$arg = implode('/',arg());
tim.plunkett

1

หากคุณไม่ต้องการให้มีเทมเพลตหน้าอื่นสำหรับหน้าเว็บที่มี URL เฉพาะคุณสามารถตรวจสอบ URL ปัจจุบันโดยใช้รหัสต่อไปนี้

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

url ()ไม่ใช่ฟังก์ชันที่คืนค่า URL ของหน้าปัจจุบัน หากคุณโทรurl()โดยไม่ระบุพารามิเตอร์ใด ๆ คุณจะได้รับ (อย่างน้อยใน Drupal 7 และไม่มีโมดูลใดที่ใช้งานhook_ulr_outbound_alter()) URL พื้นฐานของการติดตั้ง Drupal
การโทรurl('the/path')จะส่งคืนให้คุณ"the/path"หากไม่มีโมดูลใดเปลี่ยนแปลงค่าที่ส่งคืนจากฟังก์ชัน นั่นหมายความว่ารหัสที่คุณแสดงจะถูกเรียกใช้งานเสมอและเพิ่มคลาส CSS เสมอ


0

หากคุณกำลังมองหาเส้นทางที่เป็นที่ยอมรับของ Drupal คุณสามารถกด $ _GET ['q'] ซึ่งควรแปลแม้ว่า Drupal จะใช้ URL ที่สะอาด


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.