it-swarm.com.de

So verstecken Sie Edit | Tabs anzeigen?

Kann ich das verstecken?

Bearbeiten | Aussicht

registerkarten über jedem Knoten?

Ich habe in den Themeneinstellungen nach dieser Option gesucht (sowohl globales als auch Standardthema, konnte sie jedoch nicht finden).

Ich möchte meinem Kunden weiterhin die Möglichkeit geben, Inhalte zu bearbeiten/zu verwalten, sodass ich die Berechtigung dafür nicht einfach entfernen kann.

vielen Dank

24
aneuryzm

Dies ist wirklich eine Präsentationssache, keine Funktionssache, also sollte dies auf der Themenebene geschehen. 

Das Problem beim Überschreiben von theme_menu_local_tasks() ist, dass Sie die gesamte lokale Task-Anzeige mit einem Bindestrich überschreiben/übernehmen, wenn Sie wirklich nur mit einem Skalpell dorthin gelangen möchten, um zwei bestimmte lokale Aufgaben zu entfernen. Sie müssen also etwas genauer werden.

theme_menu_local_tasks() ruft die lokalen Aufgaben der aktuellen Seite ab und übergibt sie an menu_local_tasks() . Hier werden zwei Themenfunktionen verwendet:

  1. theme_menu_item_link() , die das Link-Markup für die Aufgabe erhält
  2. theme_menu_local_task() , die das <li>-Element für die Aufgabe erhält.

So können Sie die lokalen Aufgaben View und Edit auf eine sehr robuste Weise loswerden, indem Sie theme_menu_item_link() und theme_menu_local_task() überschreiben, um Ihre Überprüfung für diese Aufgaben zu berücksichtigen:

function mytheme_menu_item_link($link) {
  // Local tasks for view and edit nodes shouldn't be displayed.
  if ($link['type'] & MENU_LOCAL_TASK && ($link['path'] === 'node/%/edit' || $link['path'] === 'node/%/view')) {
    return '';
  }
  else {
    if (empty($link['localized_options'])) {
      $link['localized_options'] = array();
    }

    return l($link['title'], $link['href'], $link['localized_options']);
  }
}

function mytheme_menu_local_task($link, $active = FALSE) {
  // Don't return a <li> element if $link is empty
  if ($link === '') {
    return '';
  }
  else {
    return '<li '. ($active ? 'class="active" ' : '') .'>'. $link ."</li>\n";  
  }
}

Auf diese Weise verlassen Sie sich auf den Menü-Router-Pfad, ändern nicht den Menü-Router-Eintrag und erzielen das gewünschte Ergebnis mit minimalen Änderungen der Kernfunktionen oder des Themings.

16
user113292

hier ist eine sehr einfache Lösung für Sie. (Drupal 7)

  • Öffnen Sie Ihre page.tpl.php in Ihrer aktuellen Vorlage und suchen Sie nach der $ tabs -Variable.

  • Entfernen Sie den Rendercode, wenn Sie ihn vollständig ausblenden möchten.

  • Wenn Sie ihn nur Administratoren anzeigen möchten, verwenden Sie diesen Code

    <?php if ($tabs and $is_admin): ?>
    <div class="tabs">
      <?php print render($tabs); ?>
    </div>
    

    Der obige Code prüft, ob der Benutzer Administrator ist. Wenn ja, werden die Registerkarten gerendert. Wenn nicht, werden sie nicht gerendert.

18
ANDiTKO

es gibt ein Modul für das: Tab Tamer erlaubt das Ausblenden oder Deaktivieren von Tabs und das Umbenennen.

9
uwe

Auf der Modulseite können Sie etwas tun, um den Menüeintrag von Edit von den lokalen Aufgaben für den Knoten zu entkoppeln:

function custom_menu_alter(&$items) {
  $items['node/%node/edit']['type'] = MENU_CALLBACK;
}

Der Bearbeitungspfad ist immer noch vorhanden, jetzt ist er jedoch nicht mit der Registerkarte Ansicht verknüpft. Dazu gehört die Bearbeitungsseite selbst - dort keine Registerkarte Ansicht.

9
Grayside

Für alle, die bei der Suche nach einer D7-Lösung auf diese Frage gestoßen sind: Wie auf https://drupal.stackexchange.com/a/77964/15055 angegeben es ist hook_menu_local_tasks_alter()

/**
 * Implements hook_menu_local_tasks_alter() to unset unwanted tabs
 */
function MYMODULE_menu_local_tasks_alter(&$data) {
  foreach ($data['tabs'][0]['output'] as $key => $value) {
    if ($value['#link']['path'] == 'node/%/view') {
      unset($data['tabs'][0]['output'][$key]);
    }
  }
}
1
leymannx

Ich verwende das folgende in template.php nach Theme (was vielleicht ein bisschen hackig ist, ich denke, ich sollte stattdessen in Betracht ziehen, $ tabs zu deaktivieren):

function THEME_NAME_menu_local_tasks() {
  return '';
}

Oder Sie könnten aufgeben:

if ($tabs) echo $tabs;

von deiner page.tpl.php ...

1
CitrusTree

Ansicht und Bearbeiten sind funktionale Funktionen. Sie haben einen Grund, dort zu sein. 

Der beste Weg, sie zu "entfernen", besteht darin, diese Funktionalität zusammen zu "entfernen". Immerhin: Warum das interface einer Funktion entfernen, aber nicht die Funktionalität selbst? Außerdem werden die Tabs einfach nicht gedruckt, das URL-Endpunkte. Mit anderen Worten: Wenn Sie die Bearbeitungsregisterkarte nicht drucken, können die Personen trotzdem auf die Bearbeitungsseite zugreifen. 

Nochmals: Am besten entfernen Sie diese Funktionalität: Die Tatsache, dass Sie die Registerkarte edit nicht möchten, klingt so, als ob Sie die Funktion edit für bestimmte Benutzer nicht möchten. Wenn ja, entfernen Sie einfach die Berechtigung für diese Rolle. Das ist alles. Die Registerkarten werden weg sein.

Wenn Sie jedoch einfach diese Registerkarten anders anzeigen möchten, ist Drupal Ihre Freunde. Wie Sie vielleicht bemerkt haben, heißen sie lokale Aufgaben und nicht Tabs. Dies liegt daran, dass das Thema entscheidet, wie es gerendert werden soll: Das Thema ist das, was sie als Registerkarten anzeigt.

Überschreiben Sie einfach die theme_menu_local_tasks(), um Ihren eigenen HTML-Code für die "local-task" zu erstellen. Verschieben Sie in Ihrem Page-tpl einfach die Variable $tabs an einen Ort, an dem Sie sie haben möchten.

Aber nochmal: Versuchen Sie nicht, das Verhalten der App zu ändern, indem Sie die Elemente der Benutzeroberfläche entfernen. Das ist nicht das Richtige: Sie sollten das Verhalten ändern, um das Verhalten zu ändern :)

1
berkes

Die einfachste Lösung zum Ausblenden der Registerkarten besteht im Hinzufügen dieser Klasse zu Ihrer Design-CSS 

.tabs{ display:none;}
0
Fahad

D8-Lösung: Wenn Sie alle "lokale" Registerkarten auf bestimmten Seiten ausblenden möchten, denken Sie daran, dass "Registerkarten" in der Blockbibliothek aufgelistet sind: Finden Sie sie im Bereich "Inhalt" und schließen Sie sie nach Inhaltstyp aus. Seiten-URL oder Benutzerrolle.

0
William Turrell

Danke für die letzte Antwort. Aber seien Sie sich dieses Details bewusst: Wenn Sie es so versuchen, wie es ist, kann es nicht funktionieren: Literale sollten nur mit "oder" gerundet werden, nicht beide zusammen. So sollte es sein:

/**
 * Implements hook_menu_local_tasks_alter() to unset unwanted tabs
 */
function MYMODULE_menu_local_tasks_alter(&$data) {
  foreach ($data['tabs'][0]['output'] as $key => $value) {
    if ($value['#link']['path'] == "node/%/view") {
      unset($data['tabs'][0]['output'][$key]);
    }
  }
}

Einmal erledigt, klappt es :)

0
oscaral

Dies ist nicht die Antwort auf die Frage, was der Autor gefragt hat. Aber irgendwie kann es für andere Benutzer nützlich sein, die ein ähnliches Problem mit mir haben. Bitte lassen Sie mich wissen, ob dies nicht geeignet ist, um es hier einzufügen.

Ich bekomme die Antwort von @grayside und habe etwas modifiziert, um die Ansicht zu verbergen Registerkarte "Bearbeiten" vom Knoten aus basierend auf dem gewünschten Inhaltstyp. 

    function MYMODULE_menu_alter(&$items) { 
      $items['node/%node/view']['access callback'] = 'MYMODULE_disable_node_view';
      $items['node/%node/view']['access arguments'] = array(1); 
    } 

    function MYMODULE_disable_node_view($node){
      if($node->type == 'product'){
        return false;
      }
    }

produkt ist der Computername meines Inhaltstyps. Ich möchte nicht, dass jemand darauf zugreifen möchte, einschließlich root-Benutzer.

0
cww