Definir la URL en Drupal en la que se encuentra el usuario
Hace algún tiempo escribí unos mini-tutoriales para el desarrollo de módulos en Drupal. Ahora escribo este otro con una pequeña función a la que no le he encontrado equivalente en el core de Drupal, aunque tampoco es que haya buscado mucho.
La idea de esta función es poder definir la URL en Drupal en la que se encuentra un usuario, comparando la URL actual con una URL específica.
Supongamos que quiero saber si el usuario está en un nodo de tipo page.
Antes yo hubiera escrito algo así en PHP:
<?php
$args = arg();
if ($args[0] == 'node' && is_numeric($args[1]) && count($args) == 2) { // El usuario está viendo un nodo
$node = node_load($args[1]);
if ($node->type == 'page') {
// INSERTE AQUÍ SU CÓDIGO
}
}
?>Ahora con la nueva función lo que hago es:
<?php
if (papaya_utils_check_url('node/%d')) {
$node = node_load(arg(1));
if ($node->type == 'page') {
// INSERTE AQUÍ SU CÓDIGO
}
}
?>Como pueden ver, es una función mucho más limpia y fácil de entender en el código.
Ahora, aquí les dejo la función papaya_utils_check_url():
<?php
function papaya_utils_check_url($pattern, $strict = FALSE) {
$args = arg();
$url = explode('/', $pattern);
$match = TRUE;
if (count($url) > count($args)) {
$match = FALSE;
}
elseif ($strict && (count($args) != count($url))) {
$match = FALSE;
}
else {
foreach ($url as $key => $value) {
switch ($value) {
case '%d':
$match &= is_numeric($args[$key]);
break;
case '%s':
break;
default:
$match &= ($args[$key] == $value);
break;
}
}
}
return $match;
}
?>La función recibe 2 argumentos:
- $pattern: Es el formato de la url que debe revisar. Vale la pena recordar que se envía la url sin alias. Si se quiere definir la URL en Drupal de un nodo, por ejemplo que el usuario está viendo el nodo 27, entonces $pattern sería 'node/27'. Pero algunas veces queremos saber si el usuario está en un nodo cualquiera, hay un comodín que se puede usar, %d, lo que indica que ahí debe ir un número. Así $pattern quedaría 'node/%d' simplemente para saber si se está en un nodo.
- $strict: Define si url debe ser estrictamente igual, o simplemente debe empezar de esa forma. Su valor por defecto es FALSE. Entonces papaya_utils_check_url('node/%d') retornará TRUE siempre que el usuario esté viendo o editando un nodo, pues la url de edición de nodos es 'node/27/edit' (para el caso del nodo 27), pero si envia papaya_utils_check_url('node/%d', TRUE), la función devolverá TRUE al estar viendo el nodo, pero devolverá FALSE al estar editándolo.
Los 2 comodines que se pueden usar son:
- %d: Para indicar que allí debe ir un número.
- %s: Para indicar que allí puede ir cualquier texto. Los números son textos válidos, entonces usar 'node/%s' retornará TRUE cuando se están viendo nodos ('node/27'), pero también cuando se están creando ('node/add/page').
Si creen que este módulo puede ayudarles en el desarrollo de sus propios módulos, aquí está disponible para que lo descarguen.
Si tienen dudas acerca del funcionamiento del módulo o ideas de nuevas funciones que drupal debería tener pero no existen, dejen un mensaje y vamos mejorando papaya_utils entre todos.
Enviar un comentario nuevo