Block in Drupal – druckt nichts, was stimmt mit meinem Skript nicht?
-
17-09-2020 - |
Frage
Ich habe einen Block, in dem ich Schaltflächen zum Bearbeiten und Löschen für Benutzer mit Zugriff und andere Schaltflächen für den Rest der Benutzer anzeigen möchte.Dies ist das Skript, das ich für die Benutzer mit Update-Berechtigung verwende:
<?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>';
}}
?>
Dies ist das gleiche Skript, das ich für die Blocksichtbarkeit in anderen Blöcken verwendet habe, und es funktioniert.Warum funktioniert es hier nicht?
Lösung
Ich habe Ihren Code auf einer Drupal 6-Site getestet und er scheint gut zu funktionieren, bis auf die Link-URLs, die er erstellt.Ich sehe zwei Links mit den Namen „Bearbeiten“ und „Löschen“.Sind Sie sicher, dass Sie den Block in einer Region aktiviert haben und dass die Region in page.tpl.php angezeigt wird?(Sie können dies überprüfen, indem Sie einen anderen Block in derselben Region platzieren und prüfen, ob er angezeigt wird.)
Um die richtigen Links zu erhalten, empfehle ich die Verwendung von Drupal l()
funktionieren so:
<?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");
}
}
?>
Beachten Sie, dass ich auch die verwende t()
Funktion um „bearbeiten“ und „löschen“ übersetzbar zu machen.
Andere Tipps
Ein Block sollte nicht print
Aber return
.Und es sollte ein Array zurückgeben:
return array(
'subject' => t('i am an optional title'),
'content' => 'i am the content');