Eu gostaria de adicionar uma classe de corpo no D6 se você estiver em uma (s) página (s) específica (s) atualmente no meu template.php
.
if url('the/path') {
add the body class...
}
mas essa função não parece estar funcionando para mim.
Eu gostaria de adicionar uma classe de corpo no D6 se você estiver em uma (s) página (s) específica (s) atualmente no meu template.php
.
if url('the/path') {
add the body class...
}
mas essa função não parece estar funcionando para mim.
Respostas:
Você deve usar o código a seguir, pois url()
retorna a URL do caminho passado como argumento; portanto, ele retorna um valor que a instrução IF consideraria equivalente TRUE
(exceto no caso de a cadeia ser "0"
ou ser uma cadeia vazia).
if ($_GET['q'] == 'the/internal/Drupal/path') {
// Do stuff
}
O Alias do Drupal é o que você está procurando
<?php
$path = drupal_get_path_alias($_GET['q']);
if ($path == 'the/path') {
// do stuff
}
?>
Outros abaixo:
URL completo
<?php
global $base_root;
$base_root . request_uri()
?>
URL "interno" 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 (processual)
// 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) {
}
}
}
Fonte: arg () está obsoleta e será removida no Drupal.org
Você já tentou request_uri ()?
http://api.drupal.org/api/drupal/includes--bootstrap.inc/function/request_uri/6
Você deseja usar a função arg (). Você pode usá-lo de duas maneiras,
$args = arg();
O que basicamente fornecerá uma matriz com cada argumento de URL sendo outro valor, ou você pode verificar argumentos específicos como:
$arg = arg(0);
Então, para o seu exemplo, você pode fazer:
if(!is_null(arg(1)) && arg(0) == 'the' && arg(1) == 'path') { Do something }
ou eu recomendo isso:
$args = arg();
if(!empty($args[1]) && $args[0] == 'the' && $args[1] == 'path') { Do something }
$arg = implode('/',arg());
Se você não deseja ter um modelo de página diferente para páginas com um URL específico, verifique o URL atual usando o código a seguir.
if (arg(0) == 'the' && arg(1) == 'path') {
// Add the extra CSS class.
}
url () não é a função que retorna a URL da página atual; se você telefonar url()
sem fornecer nenhum parâmetro, obteria (pelo menos no Drupal 7 e sem a implementação de nenhum módulo hook_ulr_outbound_alter()
) o URL base da instalação do Drupal.
A chamada url('the/path')
apenas retornará você "the/path"
, se nenhum módulo estiver alterando o valor retornado da função; isso significa que o código que você mostrou sempre será executado e a classe CSS sempre adicionada.
Se você está procurando o caminho canônico pelo qual o Drupal está atendendo a uma solicitação, você pode pressionar $ _GET ['q'], que deve ser traduzido mesmo se o Drupal estiver usando URLs limpos.
Drupal 8:
alternativa arg (), pois não funciona mais:
$path_args = explode('/', current_path());
print $path_args[1];
Leia mais: https://www.drupal.org/node/2274705