Estou tentando usar l()
para obter algo como <a href='#' ...>
, para fins de chamada de ajax. /programming/1698453/drupal-creating-anchor-only-link-with-l está muito perto da coisa certa - use uma opção em l()
como 'fragment' => 'foo'
produzir um link como <a href='#foo'...>
- mas eu sou tentando obter um '#' limpo. Existe alguma maneira de fazer isso, ou devo colocar algo como parte do fragmento e não me preocupar com isso?
fonte
javascript:void(0)
javascript:
ejavascript:void(0)
são os mesmos. A única diferença é "void (0)" :)PHP tipecasting tempo de teste pop! (Divulgação completa: não ganhei em nosso escritório).
Como já apontado, este é o código no
l()
qual estamos preocupados:Então, aqui está a pergunta: Qual o valor convertido em uma sequência vazia, mas passa o seguinte?
A resposta é
FALSE
:!Então, poderíamos tentar o seguinte:
O que nos dá:
Felizmente, podemos remover essa barra principal passando adiante
external => TRUE
:O que nos dá:
Estrondo. O que fazemos para evitar concatenar manualmente as strings html, não é?
Postscript:
Não tenho certeza se eu realmente recomendaria imprimir um link como este do php em circunstâncias normais. Sem o seu javascript, todo esse link fará com que ele salte para o topo da página ( que, para minha pequena surpresa, é um comportamento especificado ). Provavelmente deve apontar para algum lugar que funcione sem javascript.
Se o link realmente só faz sentido com o javascript (como os controles de uma apresentação de slides apenas com js ou algo assim), acho melhor adicionar o link à página com javascript. Como alternativa, se você realmente deseja colocá-lo em sua fonte, verifique se está disponível
display:none
por padrão. O Drupal tem a.js
classe no html para mostrá-lo quando o javascript estiver disponível.fonte
Infelizmente, a
url()
função (quel()
chama internamente) reduz a possibilidade de um fragmento vazio com as seguintes linhas:Ele verifica se o fragmento não é uma sequência vazia, que é o que você precisa passar para obter a limpeza
#
. Eu acho que a solução mais fácil seria escolher o id de um elemento adequado em algum lugar da página e usá-lo no fragmento (oujavascript:void
como Sithu mencionou).No entanto ... a maneira mais acessível (e subseqüentemente, em muitos países, a maneira legal; pense na seção 508 nos Estados Unidos, no DDA no Reino Unido etc.) seria fornecer o conteúdo que está sendo carregado / ajustado pelo seu link no uma página separada e, em vez disso, use o URL dessa página como href do link. Você usaria o javascript para impedir que o evento no link redirecionasse a página para os navegadores que a ativaram.
Dessa forma, você tem conteúdo substituto para usuários sem javascript, permanece legal e mantém todo mundo e seu cachorro felizes :)
fonte
print drupal_json_output($output)
na minha página de chamadas do ajax.Você não poderia usar limpo
#
.Mas é possível adicionar
space symbol
depois#
:fonte
Acabei de ter o mesmo problema, mas nenhuma das soluções foi satisfatória, então criei a minha:
Isso produz uma limpeza
#
fonte
<a href="# ">link</a>
para mim.Em vez disso, eu usaria o tipo de renderização html_tag porque acredito que o link de renderização receba atenção especial do Drupal. A desvantagem é que não existe uma função de atalho para isso, então teremos que usar uma matriz de renderização:
fonte
Esta é basicamente a mesma resposta que eu postei aqui ... A configuração
fragment
de um único espaço será convertida em a#
e$current_path
será incluída porque, caso contrário, o link será definido apenas emwww.example.com/#
vez dewww.example.com/current-page#
:fonte