[gelöst] Node-edit Link zeitgesteuert ausblenden
Eingetragen von slowflyer (83)
am 26.06.2011 - 20:56 Uhr in
am 26.06.2011 - 20:56 Uhr in
Hallo,
Ich hab einen Node-Typ, den alle eingeloggten User erstellen dürfen, jedoch nur bis zu einem festgelegten Datum. Solange dieses Datum noch nicht erreicht ist, darf der Inhalt bearbeitet und gelöscht werden. Nach Ablauf der Zeit soll der "Bearbeiten" Link (Tab) in der Seitenansicht des Inhaltes nicht mehr angezeigt werden.
Wie bekommt man das hin?
Vielen Dank,
ullrich
- Anmelden oder Registrieren um Kommentare zu schreiben
Es gibt da sicherlich einige
am 26.06.2011 - 21:18 Uhr
Es gibt da sicherlich einige Wege, mir fällt folgender ein:
Du könntest eine page-pfadtyp.tpl.php in Deinem Theme einbauen und anpassen und
<?php print $tabs; ?>
darin entfernen (PATHAUTO wird benötigt um den Nodes einen Pfad zuzuweisen, der dann in der page-pfadtyp.tpl.php auftaucht).Mit dem VIEWS und DATE Modul fertigst Du eine Ansicht an, die zeitgesteuert den "Bearbeiten" & "Ansicht" Link zur Verfügung stellt und integrierst diese Ansicht in eine erstellte node-deintyp.tpl.php, anstelle der ursprünglichen TABs.
Drupal 7 Screencasts in deutsch!
Du weißt aber, daß man mit
am 26.06.2011 - 21:26 Uhr
Du weißt aber, daß man mit node/###/edit direkt auf das Edit-Formular springen kann? Das ist mit dem Ausblenden des Links nicht verhindert. Um das auch noch auszuschließen wirst Du wohl ein eigenes Modul schreiben müssen ausgehend von einem existierenden Access-Modul. Ich wüßte im Moment keines, das eine zeitgesteuerte Restriktion liefert.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
wla schrieb Das ist mit dem
am 26.06.2011 - 21:46 Uhr
Das ist mit dem Ausblenden des Links nicht verhindert. Um das auch noch auszuschließen wirst Du wohl ein eigenes Modul schreiben müssen
Stimmt natürlich. Ist dann doch komplizierter, wenn der Pfad unbrauchbar werden soll.
Mehr zum Thema TABs entfernen -> http://drupal.org/node/68792
Drupal 7 Screencasts in deutsch!
Hi,wie wärs mit Rules? Rules
am 26.06.2011 - 23:56 Uhr
Hi,
wie wärs mit Rules? Rules kann auch Content Access Rechte entziehen.
Also ist es doch am einfachsten, wenn z.B. mittels Rules die Rechte zum Bearbeiten, etc. entfernt werden. Alternativ könnte man auch umständlicher mit z.B. Node Convert Template den Node konvertieren. Und zwar in einen Typen, wo die User keine Rechte mehr haben. Lässt sich auch mit Rules erledigen.
Muss aber leider zugeben, dass ich mit Scheduling da noch nich viel gemacht hab. In einer normalen Reaktiven Regel lassen scih die Bedingungen eifnach hinzufügen. Beim Regelset musst man die Argumente ja vorher festlegen.
Hab mich leider mit der zeitsteuerung von Regeln noch nich weiter befasst.
Ka ob das alles beim normalen Rules für D6 dabei ist. Ich seh die Bedingungen hier unter D6 mit folgenden Modulen:
- Content Access
- Node Convert
- Views Bulk Operations
Denke das einfachste ist doch, die Rechte zu entziehen. Sei es gezielt durch Content Access oder z.B. durch eine Konvertierung, was auf das gleiche hinaus liefe. Alternativ lässt sich ja auch der Author via Rules ändern. Denke da sollte doch was jetzt dabei sein, oder?
Edit: weis nicht, ob die Content Access Rechte global oder nur für den Node Type dann geändert werdne. Kanns leider grad nich testen. Mein Produktivsystem möcthe ich ungern zerschiessen
mfg Crusher
PS: Ohne die Rechte, verschwindet ja auch der Edit-Link ganz automatisch. Bzw. führt ein manueller Aufruf zu einer Fehlermeldung....
Die Lösung über Content Access
am 27.06.2011 - 15:13 Uhr
Am Ende hat sich dann, dank der Ideen und Hinweise eine Lösung finden lassen, die nicht nur den Edit-Link verschwinden läßt, sondern auch die Rechte zum Editiern nimmt.
Dazu hab ich Content Access installiert und die Funktion:
function node_access_acquire_grants($node) {
$grants = module_invoke_all('node_access_records', $node);
if (empty($grants)) {
$grants[] = array(
'realm' => 'all',
'gid' => 0,
'grant_view' => 1,
'grant_update' => 0,
'grant_delete' => 0,
);
}
else {
// retain grants by highest priority
$grant_by_priority = array();
foreach ($grants as $g) {
$grant_by_priority[intval($g['priority'])][] = $g;
}
krsort($grant_by_priority);
$grants = array_shift($grant_by_priority);
}
node_access_write_grants($node, $grants);
}
?>
so umgestrickt, dass sie meinen Anforderungen genügt hat:
function my_access_acquire_grants($node,$val) {
$grants = module_invoke_all('node_access_records', $node);
if (empty($grants)) {
$grants[] = array(
'realm' => 'all',
'gid' => 0,
'grant_view' => 1,
'grant_update' => 0,
'grant_delete' => 0,
);
}
else {
// retain grants by highest priority
$grant_by_priority = array();
foreach ($grants as $g) {
if ( $g['realm'] = 'content_access_author') {
$g['gid'] = $node->uid;
$g['grant_view'] = 1;
$g['grant_update'] = $val;
$g['grant_delete'] = $val;
}
$grant_by_priority[intval($g['priority'])][] = $g;
}
$grant_by_priority[intval($g['priority'])][] = array(
'realm' => 'all',
'gid' => 0,
'grant_view' => 1,
'grant_update' => 0,
'grant_delete' => 0,
);
krsort($grant_by_priority);
$grants = array_shift($grant_by_priority);
}
node_access_write_grants($node, $grants);
}
Die Funktion wird von meinem Modul im hook_nodeapi -> 'load' aufgerufen, wenn es etwas zu tun gibt.
Jetzt können die Rechte über ein Datum/Zeit gesteuert genommen werden. Und wenn jemand im Nachhinein die Zeitspanne verlängert, kommen die Rechte auch zurück.
Vielen Dank ALLEN!
crowd-creation | Die Spezialisten für Ihre eigene Community basierend auf der Community-Box mit Drupal Commons