Estoy tratando de usar l()
para obtener algo como <a href='#' ...>
, para fines de llamadas ajax. /programming/1698453/drupal-creating-anchor-only-link-with-l está muy cerca de lo correcto: use una opción en me l()
gusta 'fragment' => 'foo'
para producir un enlace como <a href='#foo'...>
, pero estoy tratando de obtener un '#' limpio. ¿Hay alguna forma de hacer esto, o debería simplemente poner algo como parte del fragmento y no preocuparme?
fuente
javascript:void(0)
javascript:
yjavascript:void(0)
son lo mismo. La única diferencia es "void (0)" :)¡Tiempo de prueba pop de tipografía PHP! (Divulgación completa: no gané en nuestra oficina).
Como ya se señaló, este es el código
l()
que nos preocupa:Así que aquí está la pregunta: ¿Qué valor se convierte en una cadena vacía pero pasa lo siguiente?
La respuesta es
FALSE
:!Entonces, podríamos intentar esto:
Lo que nos da:
Afortunadamente, podemos eliminar esa barra diagonal al pasar
external => TRUE
:Lo que nos da:
Auge. Lo que hacemos para evitar concatenar cadenas html manualmente, ¿eh?
Posdata:
No estoy seguro de que recomendaría imprimir un enlace como este desde PHP en circunstancias normales. Sin su javascript, todo ese enlace lo hará saltar a su usuario a la parte superior de la página ( que, para mi sorpresa, es un comportamiento específico ). Probablemente debería apuntar a algún lugar que funcione sin javascript.
Si el enlace realmente solo tiene sentido con javascript (como los controles para una presentación de diapositivas solo js o algo así), creo que es mejor agregar el enlace a la página con javascript. Alternativamente, si realmente desea ponerlo en su fuente, asegúrese de que sea
display:none
'd' por defecto. Drupal tiene la.js
clase en el html para luego mostrarla cuando javascript está disponible.fuente
Desafortunadamente, la
url()
función (quel()
llama internamente) prácticamente elimina cualquier posibilidad de un fragmento vacío con las siguientes líneas:Comprueba para asegurarse de que el fragmento no sea una cadena vacía, que es lo que necesita pasar para obtener la limpieza
#
. Creo que la solución más fácil sería elegir la identificación de un elemento adecuado en algún lugar de la página y usarla para el fragmento (ojavascript:void
como Sithu ha mencionado).Sin embargo ... la forma más accesible (y posteriormente, en muchos países, de manera legal; piense en la sección 508 en los Estados Unidos, el DDA en el Reino Unido, etc.) sería proporcionar el contenido que se carga / ajusta mediante su enlace en una página separada, y use la URL de esa página como href del enlace en su lugar. Luego usaría javascript para evitar que el evento en el enlace redirija realmente la página para aquellos navegadores que lo tienen habilitado.
De esta forma, tiene contenido de respaldo para usuarios sin javascript, se mantiene legal y mantiene contentos a todos y a sus perros :)
fuente
print drupal_json_output($output)
en mi página de llamadas ajax.No puedes usar clean
#
.Pero es posible agregar
space symbol
después de#
:fuente
Simplemente tuve el mismo problema, pero ninguna de las soluciones fue satisfactoria, así que se me ocurrió la mía:
Esto produce una limpieza
#
fuente
<a href="# ">link</a>
para mí.En su lugar, usaría el tipo de representación html_tag porque creo que el enlace de representación recibe atención especial de Drupal. La desventaja es que no hay una función de atajo, por lo que tendremos que usar una matriz de renderizado:
fuente
Esta es básicamente la misma respuesta que publiqué aquí ... La configuración
fragment
en un solo espacio se convertirá en a#
, y$current_path
se incluye porque de lo contrario, el enlace se establecerá enwww.example.com/#
lugar dewww.example.com/current-page#
:fuente