Bloco em drupal - imprime nada, o que há de errado com o meu script?
-
17-09-2020 - |
Pergunta
Eu tenho um bloco que eu quero mostrar botões editar e apagar para os usuários com acesso, e outros botões para o resto dos usuários.Este é o script que estou usando para os usuários com permissão de atualização:
<?php
if(arg(0) == 'node' && is_numeric(arg(1))){
//load $node object
$node = node_load(arg(1));
//check for node update access
if (node_access("update", $node)){
print '<p><a href=\"./edit\">edit</a> <a href=\"./delete\">delete</a></p>';
}}
?>
Este é o mesmo script que eu usei para bloquear a visibilidade em outros blocos, e ele funciona.Por que não está trabalhando aqui?
Solução
Eu testei o seu código em um site Drupal 6 e parece funcionar bem, exceto para os urls do link que ele cria.Eu vejo dois links chamado "editar" e "excluir".Tem certeza de que você ativou o bloco em uma região, e que a região é apresentada no page.tpl.php?(Você pode verificar que, ao colocar o bloco na mesma região e ver se ele mostra para cima.)
Para obter os links corretos, eu recomendo usar o Drupal é l()
função como esta:
<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
//load $node object
$node = node_load(arg(1));
//check for node update access
if (node_access("update", $node)){
$nid = $node->nid
print l(t('edit'), "node/$nid/edit") .' '. l(t('delete'), "node/$nid/delete");
}
}
?>
Note que eu também estou usando o t()
função para fazer a "editar" e "excluir" traduzível.
Outras dicas
Um bloco não deve print
mas return
.E ele deve retornar um array:
return array(
'subject' => t('i am an optional title'),
'content' => 'i am the content');