Tabs entfernen in Drupal

Bild von tobiasb

Nervt Ihnen nicht auch die „Anzeigen“ Tabs bei Nodes oder bei den Benutzerkonten und am liebsten würden Sie sie entfernen, aber wissen nicht wie?

Kein Problem!

Diese Codesnippsel müssen in die template.php ihres Themes, falls nicht vorhanden neue erstellen. Diese Codesnippsel sind mit Drupal5 und Garland getestet worden.

Zur Verdeutlichung habe ich die template.php von Garland (Drupal5) als Anhang, wenn Sie diese ersetzen mit der vorhandenen dann werden alle „Anzeigen“-Tabs bei Nodes und den Benutzerkonten entfernt. Siehe Kommentare innerhalb der template.php.

!!Falls ihr Themes bereits diese Funktion verwendet jedoch nicht die IF-Abfrage, dann kopieren Sie sich die jeweilige IF-Abfrage ansonsten nur den Funktionsaufruf.!!

Der erste Codeblock, welches die Funktion zum Entfernen der Tabs bereitstellt, kann gleich am Anfang unterhalb von // $Id: template.php,v 1.4.2.1 ... eingefügt werden.(ohne die <?php?>)

  1. function phptemplate_remove_tab($label, &$vars) {
  2.   $tabs = explode("\n", $vars['tabs']);
  3.   $vars['tabs'] = '';
  4.  
  5.   foreach($tabs as $tab) {
  6.     if(strpos($tab, '>'. $label .'<') === FALSE) {
  7.       $vars['tabs'] .= $tab . "\n";
  8.     }
  9.   }
  10. }

Diese Funktion muss auch in ihre template.php Datei ihres Themes! Wenn Sie diesen Code verwenden, werden alle Tabs die „Anzeigen“ heißen entfernt.

  1. function _phptemplate_variables($hook, $vars = array()) {
  2.   if ($hook == 'page') {
  3.     phptemplate_remove_tab(t('View'), &$vars);//Funktionsaufruf
  4.   }//ende if page
  5. }

Dieser Code entfernt nur auf Benutzerkonten das „Anzeigen“ Tab.

  1. function _phptemplate_variables($hook, $vars = array()) {
  2.   if ($hook == 'page') {
  3.     if (arg(0) == 'user' && is_numeric(arg(1)) && arg(2) == '') {
  4.         phptemplate_remove_tab(t('View'), &$vars);//Funktionsaufruf
  5.       }//ende if user
  6.   }//ende if page
  7. }

Dieser Code entfernt den Tab bei allen Nodes.

  1. function _phptemplate_variables($hook, $vars = array()) {
  2.   if ($hook == 'page') {
  3.     //gilt für alle Nodes
  4.     if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == '') {
  5.         phptemplate_remove_tab(t('View'), &$vars);//Funktionsaufruf
  6.     }//ende if node
  7.     //gilt nur für Nodes des Typs story
  8.     if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == '') {
  9.       $node = node_load(arg(1));
  10.       if ($node->type == 'story' )  {
  11.         phptemplate_remove_tab(t('View'), &$vars);//Funktionsaufruf
  12.       }
  13.     }//ende if node
  14.   }//ende if page
  15. }

Wer wissen will was es alles im $node/$user Objekt gibt, sollte sich mal das Modul devel installieren.

HINWEIS!
Das entfernen der Tabs bedeutet nicht, dass man kein Zugriff mehr auf diese Seite hat.
AnhangGröße
template.php-garland-drupal51.26 KB

Re: Tabs entfernen in Drupal

Was muss ich machen, wenn ich ein Tab vom Profile entfernen möchte. Ich möchte, grundsätzlich das dieser Tab (/user/1/edit/Rechtliche+Rahmenbedingung) nicht mehr im Benutzerkonto erscheint. Der Formularname heißt "profile_rechtliche_rahmenbedingungen".

Diese Feldoption wurde geschaffen um den Rechtlichen Rahmenbedingung bei der Registrierung zuzustimmen.

Danke für die Rückantwort im Voraus.

Re: Tabs entfernen in Drupal

Nach dem die Funktion definiert wurde, braucht man nur den Namen vom Tab.

phptemplate_remove_tab(t('Rechtliche Rahmenbedingung'), &$vars);

Wenn Du das ganze noch in

Wenn Du das ganze noch in t(Strings) setzt, dann wird es auch in anderen Sprachen nicht mehr angezeigt.

also:

  1. function _phptemplate_variables($hook, $vars = array()) {
  2.   if ($hook == 'page') {
  3.     if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == '') {
  4.         phptemplate_remove_tab(t('View'), &$vars);
  5.       }
  6.   }
  7. }

Re: Wenn Du das ganze noch in

hm immer wenn ich das einsetze kommt es zu einer fehlermeldung?`woran kann das denn liegen?

Bild von tobiasb

Re: Wenn Du das ganze noch in

Die Codesnippsel gelten für Drupal5 bzw. wurden nur unter Drupal 5 getestet. Habe es oben ergänzt, falls es unter D6 zur Geltung kommen soll.

Re: Wenn Du das ganze noch in

hallo, ich nutze drupal 5.

ich habe exakt erstmal obrigen code in die template.php eingefügt und dabei erscheint dann diese fehlermeldung.

Parse error: syntax error, unexpected '<' in /themes/garland/template.php on line 4

Re: Wenn Du das ganze noch in

hm welchen gesamtode müsste ich denn einfügen wenn ich die "eigene beiträge" tabs in den profilen entfernen will? irgendwie haut das nicht hin ... nun hab ich den ersten code zwar eingefügt bekommen, weil ich das öffende php weggelassen hab, aber weiter komm ich trotzdem noch nicht wirklich

Bild von tobiasb

Re: Wenn Du das ganze noch in

bei der template.php darf nur am Anfang ein öffnendes (PHP)_Tag sein also  ansonsten nirgends.  

Re: Wenn Du das ganze noch in

grins, nun hab ich gesehen das du hier ja die datei zum download anbietest, die hab ich nun einfach mal genommen und hochgeladen, nun ist zumindest das ansehen auch weg, das sollte eh weg, aber nun sollte noch das "eigene beiträge" weg, kannst du mir evt sagen wie ich das noch einfügen kann?

Bild von tobiasb

Re: Wenn Du das ganze noch in

langsam wirds enge hier :D . Ja hab den Artikel mal gepimpt. Dann einfach anstatt View-> Track eintragen.

Du musst einfach schauen, wie der Tab in Englisch heißt und noch einmal die Funktion phptemplate_remove_tab(t('View'), &$vars); aufrufen und zwischen der t() -Funktion die Bezeichnung da eintragen. Aber auf die IF-Abfrage achten. In diesem Fall dürfte der erneute Aufruf nicht innerhalb von if (arg(0) == 'node' eintragen werden.

Re: Wenn Du das ganze noch in

`manno nun dachte ich wäre mal ganz clever um das zu testen und hab einfach alle views mit track ersetzt, aber nun sind nicht nur die anzeigen buttons wieder da, ne die eigene beiträge sind auch nicht weg ... das geht bei mir nicht bzw ich bin zu doof *grmpf*

Bild von tobiasb

Re: Wenn Du das ganze noch in

Track groß schreiben. phptemplate_remove_tab(t('Track'), &$vars); einfach unter phptemplate_remove_tab(t('View'), &$vars); hinzufügen.

Re: Wenn Du das ganze noch in

hm wenn ich das mache ... die beiträge sind dann zwar weg, aber wenn ich mich dann auslogge, erscheint eine weiße seite *grübel* und mit deiner datei geht das ausloggen aber einwandfrei, ich hab jetzt einfach nur die Views mit Track ersetzt, die beiträge sind auch weg, die views wieder da (logisch) das das ausloggen geht nimmer ... wäre es dir möglich mir diese datei mal zu erstellen bzw hier zum download anzubieten? würde nur gerne verstehen wo mein fehler lag ...

Bild von tobiasb

Re: Wenn Du das ganze noch in

Du musst nix weiteres verändern außer Datei runterladen, mit z.B Nodepad++ (oder ein anderen UTF-8 fähigen Editor) öffnen und das nur so ändern, dass es so aussieht und mit deiner template.php von Garland ersetzen:

  1. //hier bei Nodes und Benutzerkonten- aktiv
  2.       //phptemplate_remove_tab(t('Track'), &$vars);
  3.        //phptemplate_remove_tab(t('View'), &$vars);

Und schon biste fertig. Alles andere hat sonst hiermit nix zutun.

Re: Wenn Du das ganze noch in

es klappt nicht *Seufz* könnte ich dir unter umständen mal meine template.php schicken und du änderst mir das, wäre das möglich? *Seufz*

Bild von tobiasb

Re: Wenn Du das ganze noch in

Nein, warum nur um 1 Zeile hinzuzufügen. Du weißt was zutun ist, Datei runterladen und o.g. 1 Zeile "Code" hinzufügen, vorher // wech machen, fertig.

Re: Wenn Du das ganze noch in

der witz ist das ich sehr wohl weiß was ich tun sollte, hab ich auch oft genug, aber genau dieser befehl zieht ne fehlermeldung nach sich, denn immer beim aus- bzw einloggen erscheint ne weiße seite und das muss damit im zusammenhang stehen, denn normalerweise geht es ja, aber sobald ich das ersetze gehts nicht mehr, aber nur bei der track zeile, bei views funktioniert es einwandfrei,d eswegen hatte ich gefragt ob du mal drüber schaust, nicht weil ich zu faul zum bearbeiten bin ;-) danke trotz alledem für deine mühe

Bild von tobiasb

Re: Wenn Du das ganze noch in

Hier http://drupalbin.com/3322 , ich hab es so gemacht, dass bei Nodes/Benutzerkonten das Anzeigen/Beiträge-Tab verschwindet und ich hab die Funktion eingedeutscht.

Re: Wenn Du das ganze noch in

und genau das funktioniert (bei mir ja auch) ... aber leider nicht bei track, warum auch immer *seufz*

Bild von tobiasb

Re: Wenn Du das ganze noch in

Dann hast du irgendwas anderes falsch gemacht, weil bei mir funkz das.

Re: Wenn Du das ganze noch in

hm hab aber doch die datei ansonsten nie angefasst ...

Re: Wenn Du das ganze noch in

da kommt eben ne weiße seite beim ausloggen bzw auch einloggen und dann kommt ne wahrnung wegen header session.inc, hab den genauen wortlaut nicht im kopf ....

Re: Wenn Du das ganze noch in

* warning: Cannot modify header information - headers already sent by (output started at /var/www/ud10_15/html/community/themes/garland/template.php:1) in /var/www/ud10_15/html/community/includes/session.inc on line 100.
* warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in /var/www/..../includes/session.inc on line 103.

Bild von tobiasb

Re: Wenn Du das ganze noch in

Packe (zip/rar etc.) mal dein garland und lade es irgendwo hoch.

Re: Wenn Du das ganze noch in

danke ...

Bild von tobiasb

Re: Wenn Du das ganze noch in

Zeile 52

return '<div class="breadcrumb">'. implode(' › ', $breadcrumb) .'</div>';

in

return '<div class="breadcrumb">'. implode(' > ', $breadcrumb) .'</div>';

ändern.

Bitte drauf achten, wie du die Datei speicherst "UTF-8 ohne BOM" bzw. mit welchen Editor du solche Dateien bearbeitest.Notepad++ http://notepad-plus.sourceforge.net/de/download.php?lang=de

Re: Wenn Du das ganze noch in

du bist mein held *grins* dankeschön nun gehts!! *freu*

Re: Wenn Du das ganze noch in

hab jetzt mal noch ne frage, weiß aber nicht inwieweit das möglich ist ... ich hab verschiedene rollen und würde wollen das der testuser sein konto nicht bearbeiten kann ... aber alle anderen sollen es können, dies kann man nicht irgendwie noch einstellen oder?