वर्तमान URL का पता कैसे लगाएं?


10

यदि आप मेरे वर्तमान में एक विशिष्ट पृष्ठ पर हैं तो मैं D6 में एक बॉडी क्लास जोड़ना चाहूंगा template.php:

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

लेकिन वह कार्य मेरे लिए काम नहीं करता है।


जवाबों:


6

आपको निम्न कोड का उपयोग करना चाहिए, url()क्योंकि तर्क के रूप में पारित पथ के लिए URL लौटाता है; इसलिए, यह मान देता है कि IF-statement समतुल्य होगा TRUE(सिवाय इसके कि स्ट्रिंग स्ट्रिंग है "0"या रिक्त स्ट्रिंग है)।

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

स्रोत / गंतव्य पथ उपनामों की जाँच के लिए आपको drupal_get_path_alias ($ _ GET ['q']) की आवश्यकता हो सकती है।
कैम 001००१

12

द्रुपाल के उपनाम की तलाश है

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

नीचे अन्य:

पूर्ण URL

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

Drupal का "आंतरिक" URL

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

आर्ग (); मेरे लिए एक है। चीयर्स;)
दाती

4

द्रुपाल al

// 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()कोई पैरामीटर प्रदान किए बिना कॉल करते हैं, तो आपको hook_ulr_outbound_alter()ड्रुपल इंस्टॉलेशन का आधार URL (कम से कम Drupal 7 पर, और किसी भी मॉड्यूल को लागू किए बिना ) मिलेगा ।
कॉलिंग url('the/path')बस आपको वापस कर देगी "the/path", अगर कोई मॉड्यूल फ़ंक्शन से लौटाए गए मान को बदल नहीं रहा है; इसका मतलब है कि आपके द्वारा दिखाए गए कोड को हमेशा निष्पादित किया जाएगा, और सीएसएस वर्ग हमेशा जोड़ा जाता है।


0

यदि आप उस विवादास्पद मार्ग की तलाश कर रहे हैं, जिसके लिए Drupal ने अनुरोध किया है, तो आप $ _GET ['q'] को हिट कर सकते हैं, जो कि Drupal के स्वच्छ URL का उपयोग करने पर भी अनुवाद करना चाहिए।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.