• Welcome to Simple Machines Community Forum. Please login or sign up.

[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

May 19, 2006, 06:43:04 PM #3 Last Edit: November 26, 2006, 08:14:17 AM by Neakro
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 :)

xduugu

Das kann eigentlich nur sein, wenn du doch irgendwo als sekundäre oder primäre Gruppe die Gruppe 14 drinnen hast.
Was zeigt er denn an, wenn du im Template irgendwo print_r($user_info['groups']); reinschreibst?

J!ass

Also ich habs jetzt so gemacht, dass ich den beiden Admins, also mir selbst und meinem Bekannten, einfach als sekundäre Gruppe "Trusted Members" gegeben habe.
Keine Lust mehr, noch länger rumzuprobieren und so gehts auch, wenn es auch nicht ganz so elegant ist ;)

Danke dir noch mal für die Hilfe, klappt jetzt wunderbar!

ronizzel

Besteht denn auch irgendeine Möglichkeit, für alle Themes (und Sprachen) einen Menüeintrag hinzuzufügen?

MrPM

Hallo!

Ich habe da ein Problem mit Joomla und SMF.

Habe wie nach Anleitung gearbeitet und es funktioniert auch - aber nicht perfekt.

Wenn ich im Standalone-Forum bin, dann kann ich mit einem Klick auf das "Forum vergr.", das Forum vergrößern.

http://www.styria-mobile.at/portal/forum/index.php

Eigentlich ist das Forum mit der Orstio SMF-Bridge gewrappt. (Joomla)

Und da ist der Haken. Das gewrappte Forum:

http://www.styria-mobile.at/portal/index.php?option=com_smf&Itemid=45

Wenn ich hier auf das "Forum vergr." klicke, dann verändert sich nichts - Wenn man in der Browser Statuszeile schaut, ist bei der vorhin genannten Grafik die gleiche Adresse. Also http://www.styria-mobile.at/portal/index.php?option=com_smf&Itemid=45

Sehr Eigenartig!

Ich möchte, dass sich das Forum auf den ganzen Bildschirm ausdehnt.

Denn ich habe die Adresse im index.template.php (babylon-theme) richtig verlinkt (http://www.styria-mobile.at/portal/forum/index.php)


Gibt es da Probleme mit Joomla? Evt. mit der Bridge?

MrPM

Text upgedatet, da verändert.

Bitte um Hilfe.


// Show the [home] and [help] buttons.
echo '
<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="http://www.styria-mobile.at/portal/index.php">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/portal.gif" alt="' . $txt[38] . '" style="margin: 2px 0;" border="0" />' : $txt['portal']), '</a>', $context['menu_separator'], '

<a href="http://www.styria-mobile.at/portal/forum/index.php">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/forum.gif" alt="' . $txt[38] . '" style="margin: 2px 0;" border="0" />' : $txt['forum']), '</a>', $context['menu_separator'], '

<a href="', $scripturl, '?action=help">', ($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'];



Michael

second

Hallo!


Habe folgendes Problem (links neben Portal ist ein heller Balken), welches aber nur dann auftaucht wenn man auf das "Forum" Button geht be anderen verschwindet es wieder...  Fummele schon sehr lange rum, komme nicht auf mein Denkfehler... Kann mir jemand helfen?



index.template:

// Show the start of the tab section.
echo '
<table cellpadding="0" cellspacing="0" border="0" style="margin-left: 10px;">
<tr>
<td class="maintab_' , $first , '">&nbsp;</td>';

// Show the [Portal] button.
echo ($current_action=='home' || $context['browser']['is_ie4']) ? '<td class="maintab_active_' . $first . '">&nbsp;</td>' : '' , '
<td valign="top" class="maintab_' , $current_action == 'Portal' ? 'active_back' : 'back' , '">
<a href="http://www.+++++.de/" target="_top">' , $txt[37] , '</a>
</td>' , $current_action == 'Portal' ? '<td class="maintab_active_' . $last . '">&nbsp;</td>' : '';


// Show the [home] button.
echo ($current_action=='home' || $context['browser']['is_ie4']) ? '<td class="maintab_active_' . $first . '">&nbsp;</td>' : '' , '
<td valign="top" class="maintab_' , $current_action == 'home' ? 'active_back' : 'back' , '">
<a href="', $scripturl, '">' , $txt[103] , '</a>
</td>' , $current_action == 'home' ? '<td class="maintab_active_' . $last . '">&nbsp;</td>' : '';





second

 :) habs - da stand "home" anstatt Portal!

MrPM

Hello!

Habe nach dem Home Button einen neuen für mein Portal eingefügt. Funktionieren tut es, jedoch kommen da immer unzählige Fehlermeldungen.  ???


// Show the [home] [portal] and [help] buttons.
echo '
<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="http://www.styria-mobile.at/home/index.php">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/portal.gif" alt="' . $txt[38] . '" style="margin: 2px 0;" border="0" />' : $txt['portal']), '</a>', $context['menu_separator'], '

<a href="', $scripturl, '?action=help">', ($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'];


Fehlermeldungen:


default/Errors.template.php (main_above sub template - eval?)


default/Admin.template.php (main_above sub template - eval?)
Zeile: 476


babylon/BoardIndex.template.php (main_above sub template - eval?)
Zeile: 476


Zeile 476 (Rot) im Boardindex.template.php vom Babylon Theme welches ich verwende:


// Show the login bar. (it's only true if they are logged out anyway.)
if ($context['show_login_bar'])
{
echo '
<tr>
<td class="catbg" colspan="2">', $txt[34], ' <a href="', $scripturl, '?action=reminder" class="smalltext">(' . $txt[315] . ')</a></td>
</tr>
<tr>
<td class="windowbg" width="20" align="center">
<a href="', $scripturl, '?action=login">
<img src="', $settings['images_url'], '/icons/login.gif" alt="', $txt[34], '" border="0" /></a>
</td>
<td class="windowbg2" valign="middle">
<[color=red]form action="', $scripturl, '?action=login2" method="post" style="margin: 0;" accept-charset="', $context['character_set'], '">[/color]
<table border="0" cellpadding="2" cellspacing="0" width="100%"><tr>
<td valign="middle" align="left">
<label for="user"><b>', $txt[35], ':</b><br /><input type="text" name="user" id="user" size="15" /></label>
</td>



Bitte um Hilfe


Michael

MrPM

Das wichtigste habe ich vergessen.

Use of undefined constant portal - assumed 'portal'

Wie muss der Code ausschauen, damit keine Fehlermeldung kommt?

lexi_be

ich möchte, das bei Klick auf Chat in meinem Menü der Chat in einem seperatem Fenster geöffnet wird. Aber wo fürge ich das ein?

So schauts jetzt aus

if ($_GET['action']=='chat') {
echo '<div style="float:left;height:22px;background:transparent url('.$settings["images_url"].'/img/menu_hl.gif);">';
} else {
echo '<div style="float:left;">';
}
echo '&nbsp;<a href="', $scripturl, '?action=chat">'.$txt[800]. '</a>&nbsp;</div>';


wisst ihr was ich meine?

lexi_be

Bin schon drauf gekommen target="blank" ist das "Geheimnis gewesen.... stand nur einwenig auf der Leitung

dieter4

Quote from: lexi_be on July 12, 2007, 07:19:09 AM
Bin schon drauf gekommen target="blank" ist das "Geheimnis gewesen.... stand nur einwenig auf der Leitung

target="_blank" wenn du genau nach Standard gehe möchtest ;)

lexi_be

ja, Danke... so hatte ich es auch im Code eingetragen. Nur hier falsch getippelt  ;)

a.k.

Wie sieht es den aus, wenn man ein Template hat welches diesen Pfad nciht hat

Themes/"NameMeinesTheme"/languages/index.german.php

Die Anleitung ist ja für 1.0.x ich habe 1.8.

Jorin

Quote from: a.k. on February 25, 2009, 05:16:48 AM
Wie sieht es den aus, wenn man ein Template hat welches diesen Pfad nciht hat

Themes/"NameMeinesTheme"/languages/index.german.php

Dann gilt:

Themes/Default/languages/index.german.php

a.k.

Wenn ich das bei default ändere, ändert sich das dann auch bei meinem Theme?

Jorin

Wenn es eine Datei in deinem Theme-Verzeichnis (und den darunter liegenden) nicht gibt, wird automatisch die entsprechende Datei des Default-Theme genutzt.

Umgekehrt also, wenn dein Theme die index.german.php nicht hat, siehst du in deinem Theme auch die Änderungen die du in der index.german.php des Default-Theme vornimmst.

Advertisement: