Je voudrais ajouter une classe de corps en D6 si vous êtes sur une ou des pages spécifiques actuellement dans mon template.php
J'ai:
if url('the/path') {
add the body class...
}
mais cette fonction ne semble pas fonctionner pour moi.
Je voudrais ajouter une classe de corps en D6 si vous êtes sur une ou des pages spécifiques actuellement dans mon template.php
J'ai:
if url('the/path') {
add the body class...
}
mais cette fonction ne semble pas fonctionner pour moi.
Réponses:
Vous devez utiliser le code suivant, as url()
renvoie l'URL du chemin passé en argument; par conséquent, il renvoie une valeur que l'instruction IF considérerait comme équivalente TRUE
(sauf dans le cas où la chaîne est "0"
ou est une chaîne vide).
if ($_GET['q'] == 'the/internal/Drupal/path') {
// Do stuff
}
Drupal's Alias est ce que vous cherchez
<?php
$path = drupal_get_path_alias($_GET['q']);
if ($path == 'the/path') {
// do stuff
}
?>
D'autres ci-dessous:
URL complète
<?php
global $base_root;
$base_root . request_uri()
?>
URL "interne" de Drupal
<?php
$arg = arg();
// Path of 'node/234' -> $arg[0] == 'node' && $arg[1] == 234
?>
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 (procédural)
// 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 (POO)
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) {
}
}
}
Source: arg () est obsolète et sera supprimé sur Drupal.org
Avez-vous essayé request_uri ()?
http://api.drupal.org/api/drupal/includes--bootstrap.inc/function/request_uri/6
Vous voudrez utiliser la fonction arg (). Vous pouvez l'utiliser de deux manières,
$args = arg();
Ce qui vous donnera essentiellement un tableau avec chaque argument url étant une autre valeur, ou vous pouvez vérifier des arguments spécifiques comme ceci:
$arg = arg(0);
Donc pour votre exemple, vous pourriez faire:
if(!is_null(arg(1)) && arg(0) == 'the' && arg(1) == 'path') { Do something }
ou je recommanderais ceci:
$args = arg();
if(!empty($args[1]) && $args[0] == 'the' && $args[1] == 'path') { Do something }
$arg = implode('/',arg());
Si vous ne souhaitez pas avoir un modèle de page différent pour les pages avec une URL spécifique, vous pouvez vérifier l'URL actuelle à l'aide du code suivant.
if (arg(0) == 'the' && arg(1) == 'path') {
// Add the extra CSS class.
}
url () n'est pas la fonction qui renvoie l'URL de la page actuelle; si vous appelez url()
sans fournir de paramètres, vous obtiendrez (au moins sur Drupal 7, et sans aucun module implémentant hook_ulr_outbound_alter()
) l'URL de base de l'installation Drupal.
L'appel url('the/path')
vous renverra simplement "the/path"
si aucun module ne modifie la valeur renvoyée par la fonction; cela signifie que le code que vous avez affiché sera toujours exécuté et la classe CSS toujours ajoutée.
Si vous recherchez le chemin canonique pour lequel Drupal sert une demande, vous pouvez appuyer sur $ _GET ['q'], qui devrait se traduire même si Drupal utilise des URL propres.
Drupal 8:
Arg () alternative car elle ne fonctionne plus:
$path_args = explode('/', current_path());
print $path_args[1];
En savoir plus: https://www.drupal.org/node/2274705