[Tutorial] Wie füge ich dem Menü einen Button hinzu? (Version 1.0.x)

Started by Horseman, April 02, 2005, 03:52:43 AM

Previous topic - Next topic

Horseman

Wir fügen dem oberen Menü einen neuen Button hinzu. Hier ein Beispiel für einen Button namens Chat.
Drei Dinge sind dafür erforderlich:
1. Eine Grafik welche in den Grafik Ordner des Themes übertragen wird
2. Ein Eintrag in die gewünschten Sprachdateien für den Alt Tag der Grafik
3. Das bearbeiten der index.template.php mit einem geeigneten Editor.

Wenn du ein grafisches Menü eingestellt hast fertige dir einen/einige neue/n Button/s für dein Theme / deine Themes.
Dann öffne die vorhandenen Sprachdateien und füge diesen eine Zeile für den Alt Tag der Grafik hinzu.
SMF/Themes/default/languages/index.german.php
Nehme entweder noch eine freie Zahl z.B. zwischen 36 und 40 oder einen freien Begriff. In diesem Beispiel nehmen wir einen eindeutigen Begriff und fügen folgendes hinzu:
$txt[chat] = 'Zum Chat';

Dann öffne die Datei index.template.php im Theme Ordner:
Suche nach:

// Show the menu up top.  Something like [home] [help] [profile] [logout]...

Unterhalb dieser Zeile beginnt die Funktion für die Darstellung der Menübuttons, abhängig davon ob der Besucher eingelogt ist oder nicht.
Du must entscheiden wer den Button zu sehen bekommen soll.
Alle Besucher deines Forums oder nur Besucher die sich eingelogt haben.

Sollen alle Besucher den Button sehen können empfiehlt sich ein Einbau bei:

// Show the [home] and [help] buttons.


Sollen nur eingelogte Besucher den Button sehen empfiehlt sich ein Einbau vor dem Logout Button:

<a href="', $scripturl, '?action=logout;sesc=', $context['session_id'], '">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/logout.gif" alt="' . $txt[108] . '" style="margin: 2px 0;" border="0" />' : $txt[108]), '</a>';


Hier nun die Beispielzeile für den neuen Button der zum Chat führen soll:

<a href="zum_chat.php">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/chat.gif" alt="' . $txt[38] . '" style="margin: 2px 0;" border="0" />' : $txt[chat]), '</a>', $context['menu_separator'], '


Beachte dabei folgendes:
Die Ausgabe beginnt immer mit:

echo '

Am Ende des Echo Befehls muss ein ; stehen.

Obige Beispiel Zeile endet mit , ' ist keine den Befehl abschliessende Zeile sonder könnte so zum Beispiel vor den logout Button eingefügt werden.
Soll er dahinter erscheinen musst du hinter der Zeile für den Logout Button das ; entfernen und hinter die Beispielzeile setzen.
Gruß Horseman
______________________________________________________

PhpOpenChat Support Portal: http://www.phpopenchat.de

Ripper

Hat dich das so genervt von mir, dass du jetzt erstma ne Anleitung unters FAQ machen musstest oder was ??  ;D

Daniel D.

Quote from: Ripper on April 02, 2005, 04:50:21 AM
Hat dich das so genervt von mir, dass du jetzt erstma ne Anleitung unters FAQ machen musstest oder was ??  ;D
Das ist so bei FAQs. Damit sollen "nervige" (eigentlich: häufig gestellte) Fragen vermindert werden. Leider liest kaum einer die FAQ Sektion. Naja, hoffe dir konnte endlich geholfen werden. :)

Dennisronja

#3
und wie kann ich die adresse ändern.also wo es hingehen soll wenn man auf den button klickt?
..und mein alt text erscheint auch nicht


Quote$txt[34] = 'Login';
$txt[35] = 'Username';
$txt[36] = 'Password';
   $txt['chat'] = 'Zum Chat';
$txt[40] = 'That username does not exist.';

Quote
                                <a href="', $scripturl, '">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/home.gif" alt="' . $txt[103] . '" style="margin: 2px 0;" border="0" />' : $txt[103]), '</a>', $context['menu_separator'], '
                                <a href="zum_chat.php">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/chat.gif" alt="' . $txt[38] . '" style="margin: 2px 0;" border="0" />' : $txt['chat']), '</a>', $context['menu_separator'], '

                                <a href="', $scripturl, '?action=help" target="_blank">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/help.gif" alt="' . $txt[119] . '" style="margin: 2px 0;" border="0" />' : $txt[119]), '</a>', $context['menu_separator'];

so hab ichs gemacht...

*edit by Neakro*
Code berichtigt...

dieter4

Bei deinem rot eingefärbten geht es, indem du zum_chat.php durch die Zieladresse ersetzt.

Den Alt-Text hast du wahrscheinlich in die falsche Sprachdatei geschrieben.

Bobby1983

Hat leider nicht funktioniert. Die Fehlermeldung bleibt immer noch bestehen.

Blackbeard

Quote from: Neakro on May 20, 2006, 08:53:53 AM
Bei deinem rot eingefärbten geht es, indem du zum_chat.php durch die Zieladresse ersetzt.

Den Alt-Text hast du wahrscheinlich in die falsche Sprachdatei geschrieben.

Hallo. Ich bin zwar noch nicht ganz durchgestiegen bei eurem Forum, find es aber trotzdem super. Hab auch einiges geschafft umzuschreiben. (index.template). Mich würde jetzt mall interessieren, ob ich auch ein butten z.B. (chat-button) gesondert zentrieren kann...

MfG: Blackbeard

J!ass

So, bin einer, der das FAQ gelesen hat ;)
Hätte da aber noch mal ne Frage dazu.
Und zwar hab ich den Button funktionierend eingebunden und klappt auch alles, aber ich hätte es gerne so, dass nur eine bestimmte Benutzergruppe (Bei mir trusted members) den Button sehen kann.
Gibts eine Möglichkeit, abzufragen, in welcher Gruppe der Member ist und den Button nur im Falle eines trusted members einzublenden?

Gruß
J!ass

Edit:
Ich nutze 1.1 RC3

xduugu

if (in_array(Gruppenid$user_info['groups')) vor dem Button-Code sollte helfen. Gruppenid muss natürlich durch die ID der entsprechenden Gruppe ersetzt werden.

J!ass

Ne, klappt leider nicht :(

Bei mir sieht das Ganze so aus:
if (in_array(1, $user_info['groups'])) {
                echo '
                        <a href="../coppermine/index.php" target=_blank>', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/galerie.gif" alt="' . $txt['Galerie'] . '" style="margin: 2px 0;" border="0" />' : $txt['Galerie']), '</a>', $context['menu_separator'];
            }


Aber egal, welche Usergruppe ich einsetzte, klappt nicht.
Die Gruppe, die normalerweise genommen werden soll wäre 9, Admin wäre ja 1, aber auch das klappt nicht.
Ich hab mal testweise ne andere Bedingung eingefügt und zwar:
if ($context['allow_admin']) {
                echo '
                        <a href="../coppermine/index.php" target=_blank>', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/galerie.gif" alt="' . $txt['Galerie'] . '" style="margin: 2px 0;" border="0" />' : $txt['Galerie']), '</a>', $context['menu_separator'];
            }


Das heißt ja, dass nur die Admins den Link sehen können und das klappt auch wunderbar...

Wie gesagt, ich nutze die Version 1.1RC3

xduugu

Öhm... ja. Die Variable $user_info ist glaub ich nicht in den Templates verfügbar. Du musstest ein Element zum Array context in der Load.php hinzufügen. Also z.B.

$context['groupxy'] = in_array(Gruppenid$user_info['groups'); und dann im Template den Wert von $context['groupxy'] überprüfen.

J!ass

Aalso:
In der Load.php hab ich oben folgende Zeile eingefügt:
$context['grouptrusted'] = in_array(9, $user_info['groups']);

Und in der index.template.php folgende:
if ($context['grouptrusted']) {
           echo '
                        <a href="../coppermine/index.php" target=_blank>', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/galerie.gif" alt="' . $txt['Galerie'] . '" style="margin: 2px 0;" border="0" />' : $txt['Galerie']), '</a>', $context['menu_separator'];
            }


Das müsste doch eigentlich passen, oder?
Wird aber nicht mehr angezeigt, der Button.

xduugu

Du kannst die Zeile nicht irgendwo beliebig in die Load.php schreiben.

J!ass


xduugu

Ich hatte gestern keine Datei da, aber jetzt hab ich mal nachgeschaut.

Nach der Zeile
$context['user']['name'] = &$user_info['name'];

könntest du es z.B. einfügen.

J!ass

Also ich weiß auch nicht...
Es will und will nicht klappen.
Hab die Codezeile genau an der von dir angegebenen Stelle eingefügt und auch mal testweise die Variable $context['grouptrusted'] statt des Buttons ausgeben lassen.
Die Variable ist immer leer, daher wird dann der Button auch nicht angezeigt.

xduugu

Hast du die Zeile direkt von mir kopiert?

$context['groupxy'] = in_array(Gruppenid$user_info['groups'); ist natürlich falsch und sollte $context['groupxy'] = in_array(Gruppenid$user_info['groups']); heißen, wobei eigentlich ein Syntaxerror kommen sollte.

edit: Bei mir gehts 1a.

J!ass

Ich hatte es eben auch mal zwischenzeitlich, hab dann aber was probiert.
Und zwar ist die Gruppe, die den Link nicht sehen soll die mit der ID14.
Was muss ich denn anpassen, damit genau diese Gruppe den Link nicht sieht, alle anderen aber schon.

Es geht nämlich darum, dass ich als Admin, da ich nicht die primäre Gruppe "Trusted Member" mit ID9 habe, sondern Admin mit ID1, den Link dann nicht sehe...
Deshalb würde ich es gerne so anpassen, dass alle Gruppen den Link sehen, nur eben die Member der Gruppe mit der ID14 nicht.

xduugu

Entweder stellst du dann bei dir als sekundäre Gruppe Trusted Member ein oder du tauschsts die Zeile $context['groupxy'] = in_array(9$user_info['groups']); durch $context['groupxy'] = !in_array(14$user_info['groups']); aus. Dadurch sehen aber auch alle, die als sekundäre Gruppe die Gruppe 14 eingestellt haben, den Link nicht.

J!ass

Also bei mir siehts derzeit so aus:
Load.php:
else
$context['user']['name'] = &$user_info['name'];
        $context['grouptrusted'] = !in_array(14, $user_info['groups']);


und index.template.php:
if ($context['grouptrusted']) {
                echo '
                        <a href="../coppermine/index.php" target=_blank>', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/galerie.gif" alt="' . $txt['Galerie'] . '" style="margin: 2px 0;" border="0" />' : $txt['Galerie']), '</a>', $context['menu_separator'];
            } else { echo "Test"; }


Ich hab mal zum Test das echo ausgegeben und er springt immer ins else.
Hab ich irgendwo noch nen Fehler?

Btw: Vielen Dank für deine Geduld :)

Advertisement: