أود إضافة فئة الجسم في D6 إذا كنت على صفحة (صفحات) معينة حاليًا في template.php
لدي:
if url('the/path') {
add the body class...
}
لكن هذه الوظيفة لا تبدو مفيدة بالنسبة لي.
يجب عليك استخدام الكود التالي ، حيث أن url()
تُرجع عنوان URL للمسار الذي تم تمريره كوسيطة ؛ لذلك ، تقوم بإرجاع قيمة تعتبرها عبارة IF تعادل TRUE
(باستثناء الحالة التي تكون فيها السلسلة "0"
أو سلسلة فارغة).
if ($_GET['q'] == 'the/internal/Drupal/path') {
// Do stuff
}
الاسم المستعار دروبال هو ما تبحث عنه
<?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
?>
دروبال 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.
}
دروبال 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) {
}
دروبال 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
هل حاولت request_uri ()؟
http://api.drupal.org/api/drupal/includes--bootstrap.inc/function/request_uri/6
ستحتاج إلى استخدام الدالة 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 }
إذا كنت لا تريد أن يكون لديك قالب صفحة مختلف للصفحات ذات عنوان URL معين ، يمكنك التحقق من عنوان URL الحالي باستخدام التعليمات البرمجية التالية.
if (arg(0) == 'the' && arg(1) == 'path') {
// Add the extra CSS class.
}
rl () ليست الوظيفة التي تُرجع عنوان URL للصفحة الحالية ؛ إذا اتصلت بـ url()
بدون تقديم أي معلمات ، فستحصل على (على الأقل Drupal 7 ، وبدون أي وحدات تنفيذ hook_ulr_outbound_alter()
)) عنوان URL الأساسي لـ Drupal التثبيت.
استدعاء url('the/path')
سيعيد لك "the/path"
فقط ، إذا لم تغير أي وحدة القيمة التي تم إرجاعها من الوظيفة ؛ وهذا يعني أنه سيتم دائمًا تنفيذ الرمز الذي عرضته ، وإضافة فئة CSS دائمًا.
دروبال 8:
arg () البديل لأنه لم يعد يعمل:
$path_args = explode('/', current_path());
print $path_args[1];
اقرأ المزيد: https://www.drupal.org/node/2274705
إذا كنت تبحث عن المسار المتعارف عليه الذي يقدمه Drupal لطلبًا ، فيمكنك النقر على $ _GET ['q'] ، والذي يجب ترجمته حتى إذا كان Drupal يستخدم عناوين URL نظيفة.