News:

SMF 2.1.2 has been released! Take it for a spin! Read more.

Main Menu

Como acrescentar botões ao menu 2.0

Started by Costa, July 16, 2009, 08:21:42 PM

Previous topic - Next topic

Costa

Neste tutorial você vai aprender a adicionar "Abas" ao menu do SMF 2.0. Ao contrário do SMF 1.0.x e 1.1.x o menu foi movido das templates para um dos arquivos fonte do SMF, assim pode ser partilhado entre vários temas.
Isto facilita a tarefa de adicionar "Abas" a todos os temas de uma vez e significa menos trabalho quando tem que instalar manualmente um mod em outro tema.

Primeiro você precisa de abrir o arquivo ./Sources/Subs.php

Pesquise por:
   // All the buttons we can possible want and then some, try pulling the final list of buttons from cache first.

É aqui que as abas estão.

Cada aba é uma entrada com uma grande array. Aqui está a primeira aba:
         'home' => array(
            'title' => $txt['home'],
            'href' => $scripturl,
            'show' => true,
            'sub_buttons' => array(
            ),
         ),


Para adicionar uma aba copie e cole este código entre as abas onde quer que esta aba apareça.
Mude o 'home' para algo simples e único
Mude o $txt['home'] para o nome da sua aba entre apóstrofes
Mude o $scripturl para a localização da sua aba entre apóstrofes
Mude o show to true (você pode fazer coisas mais avançadas com isto, que será explicado mais à frente neste tutorial)
Ignore os sub-buttons por agora. Isto pode criar um menu drop-down, que será explicado mais à frente neste tutorial

O meu exemplo será algo como isto, entre a aba Início e Ajuda:
         'home' => array(
            'title' => $txt['home'],
            'href' => $scripturl,
            'show' => true,
            'sub_buttons' => array(
            ),
         ),
         'arcade' => array(
            'title' => 'Google',
            'href' => 'http://www.google.com',
            'show' => true,
            'sub_buttons' => array(
            ),
         ),
         'help' => array(
            'title' => $txt['help'],
            'href' => $scripturl . '?action=help',
            'show' => true,
            'sub_buttons' => array(
            ),
         ),


Agora você só precisa salvar o arquivo e fazer o upload no FTP, se necessário. Você pode querer ler O que é FTP / Como usar o FTP
Finalmente, se você usar a cache do SMF você precisa limpá-la, indo a Admin > Manutenção do Fórum > Limpar Cache

Se você quer apenas um simples botão você pode parar de ler agora, caso contrário, continue a ler!

Note que se você deseja adicionar um botão no final do menu, deve ser colocado após o botão de logout e você precisa mudar o valor is_last para false no login e registo:

            'is_last' => true,

Você também precisa adicioná-lo à sua aba após:
            'sub_buttons' => array(
            ),

         
Que ficaria algo assim:
         'arcade' => array(
            'title' => 'Google',
            'href' => 'http://www.google.com',
            'show' => true,
            'sub_buttons' => array(
            ),
            'is_last' => true,

         ),

      



Adicionando abas em um fórum de vários idiomas
Ao adicionar uma aba eu sugeri que você substitua $txt['home'] com o nome que você quiser para a aba. Isso funciona bem até ter um fórum com mais de um idioma. Então você precisa usar os arquivos de linguagem para que o texto possa ser traduzido.

Em vez de fazer isso:
            'title' => 'Google',

Você precisa fazer algo como:
            'title' => $txt['aba_google'],

Certifique-se que usa um nome bastante original, com isso vai garantir que não é o mesmo que algum texto que o SMF já está usando. Então você terá que abrir cada arquivo index.linguagem.php em Themes/default/languages (obviamente substituir a linguagem com o nome de seu idioma). Na parte inferior do arquivo adicione:
$txt['aba_google'] = 'Google';

Certifique-se de fazer o mesmo no arquivo de cada idioma.

Mostrando botões apenas para utilizadores registados
Você pode desejar ter um botão que é exibido apenas para utilizadores registados. Você pode fazer isso alterando:
            'show' => true,

Se você quiser que um botão só é exibido para visitante, mude para:
            'show' => $user_info['is_guest'],

Se você quiser que um botão que é exibido apenas para utilizadores registados:
            'show' => !$user_info['is_guest'],
   
Se você quiser que um botão que é exibido apenas para os administradores:
            'show' => $context['user']['is_admin']

Os usuários avançados também podem olhar para o allowedTo() para restringir com base nas permissões

Sub-abas
Por favor note que nem todos os temas suportam Sub-abas.

Você pode definir Sub-abas que seram exibidas no menu drop-down. Dê uma olhada no código utilizado para o menu de calendário:
         'calendar' => array(
            'title' => $txt['calendar'],
            'href' => $scripturl . '?action=calendar',
            'show' => $context['allow_calendar'],
            'sub_buttons' => array(
               'view' => array(
                  'title' => $txt['calendar_menu'],
                  'href' => $scripturl . '?action=calendar',
                  'show' => allowedTo('calendar_post'),
               ),
               'post' => array(
                  'title' => $txt['calendar_post_event'],
                  'href' => $scripturl . '?action=calendar;sa=post',
                  'show' => allowedTo('calendar_post'),
               ),
            ),
         ),


Tudo que você precisa fazer é copiar o sub-código da aba no 'sub_buttons' => array( e então editar o nome, título, href e show. Por exemplo, para adicionar uma sub-botão para o Google:
         'google' => array(
            'title' => 'Google',
            'href' => 'http://www.google.com',
            'show' => true,
            'sub_buttons' => array(
               'gmail' => array(
                  'title' => 'Gmail',
                  'href' => 'http://gmail.com',
                  'show' => true,
               ),
            ),
         ),


Hugo "Costa" Fernandes - PT SMF
Todas as MP's a pedir ajuda são sujeitas a radioactividade, microondas, queimadas e atiradas borda fora.

"At least someone appreciates the fact that I am doing and not thinking..."
"Laziness is counter-revolutionary."

CesarManara

Legal, e se eu quiser Adicionar uma action com texto apenas. Como fazer?

Exemplo, colocar um botão que vai redirecionar para uma action, onde neste action tenha um tutorial explicando como funciona o Advanced Karma System?

Costa

Subs.php

                'help' => array(
                'title' => $txt['karma'],
                'href' => $scripturl . '?action=ação',
                'show' => true,
                'sub_buttons' => array(
                ),

index.[idioma].php

$txt['karma'] = 'Advanced Karma System';

O ação substituis pelo link
Hugo "Costa" Fernandes - PT SMF
Todas as MP's a pedir ajuda são sujeitas a radioactividade, microondas, queimadas e atiradas borda fora.

"At least someone appreciates the fact that I am doing and not thinking..."
"Laziness is counter-revolutionary."

CesarManara

Quote from: Costa on July 24, 2009, 09:42:10 PM
Subs.php

                'help' => array(
                'title' => $txt['karma'],
                'href' => $scripturl . '?action=ação',
                'show' => true,
                'sub_buttons' => array(
                ),

index.[idioma].php

$txt['karma'] = 'Advanced Karma System';

O ação substituis pelo link

Acho que não fui claro na pergunta hehe.
Eu queria saber como criar a action, porque o '?action=karma' não existe, como cria-lo?

Costa

#4
index.php encontra:

'activate' => array('Register.php', 'Activate'),

adiciona a seguir:

'karmadescript' => array('karmadescript.php', 'KarmaDescript'),

Então cria o  'karmadescript.php' assim:
<?php
if (!defined('SMF'))
die(
'Hacking attempt...');

function 
karmadescript() {
global 
$context;
$context['page_title'] = 'Descrição do Karma!';
// This is gonna be needed...
loadTemplate('karmadescript');
}
?>
Coloca o karmadescript.php em /Sources/

Agora crias o  Themes/default/karmadescript.template.php, algo deste tipo:

<?php

function template_main()
{
global 
$context$settings$options$txt$scripturl;

echo 
'


<table width="100%" border="0" cellspacing="0" cellpadding="3" >
<tr>
<td>'
theme_linktree(), '</td>
</tr>
</table>

<table width="100%" border="0" cellspacing="0" cellpadding="4" align="center" class="tborder">
<tr class="titlebg">
<td align="center" >Descrição do Karma</td>
</tr><tr>
<td class="windowbg">'
;
 
echo 
'<table border="0" cellpadding="0" cellspacing="3" width="100%">
         <tr>
           <td width="100%" valign="top">
O Meu Karma é porreiro pá!!
   </td></tr></table>'
;
echo 
'
</td>
</tr>
</table><br /><br />
'
;
}

?>


então faz isto http://www.meusite.com/forum/index.php?action=karmadescript

Podees mudar os nomes e meter como quiseres
Hugo "Costa" Fernandes - PT SMF
Todas as MP's a pedir ajuda são sujeitas a radioactividade, microondas, queimadas e atiradas borda fora.

"At least someone appreciates the fact that I am doing and not thinking..."
"Laziness is counter-revolutionary."

CesarManara

#5
consegui, com as seguintes modificações:

'karmadescript' => array('karmadescript.php', 'KarmaDescript'),

function karmadescript() {

Porque se não ficava action=downloads.

Abs e thx pelo help.

Costa

ups, é que fiz isso pra mim mas para uma página de downs :P
De nada fera, tamo aí

Farebem
- Costa
Hugo "Costa" Fernandes - PT SMF
Todas as MP's a pedir ajuda são sujeitas a radioactividade, microondas, queimadas e atiradas borda fora.

"At least someone appreciates the fact that I am doing and not thinking..."
"Laziness is counter-revolutionary."

Carlos Faria

Aproveito esse tópico para perguntar uma coisinha  :-\

O logo do meu fórum redirecciona-me para http://meuforum.net/index.php como faço para que ele redireccione-me para outro link?

ex: http://meuforum.net/index.php?forum=MeuForum

Costa

salvo erro pelo index.template.php
Ou então mete o código a seguir onde metes o logo(não sei se assim vai funcionar)

<a href="http://meuforum.net/index.php?forum=MeuForum" ><img src="logo" /></a>
Hugo "Costa" Fernandes - PT SMF
Todas as MP's a pedir ajuda são sujeitas a radioactividade, microondas, queimadas e atiradas borda fora.

"At least someone appreciates the fact that I am doing and not thinking..."
"Laziness is counter-revolutionary."

Carlos Faria

Quote from: Costa on July 31, 2009, 04:58:39 PM
salvo erro pelo index.template.php
Ou então mete o código a seguir onde metes o logo(não sei se assim vai funcionar)

<a href="http://meuforum.net/index.php?forum=MeuForum" ><img src="logo" /></a>

Não encontro... a única coisa que encontro é:

<div id="header" class="wrapper">
<div id="logo">
<a href="'.$scripturl.'" title=""></a>
</div>



Costa

<div id="header" class="wrapper">
         <a href="http://meuforum.net/index.php?forum=MeuForum" >
         <img src="logo" />
         </a>
</div>
Hugo "Costa" Fernandes - PT SMF
Todas as MP's a pedir ajuda são sujeitas a radioactividade, microondas, queimadas e atiradas borda fora.

"At least someone appreciates the fact that I am doing and not thinking..."
"Laziness is counter-revolutionary."

Carlos Faria

Coloquei isso e não deu.. modifiquei e deu..

Correcção:

<div id="header" class="wrapper">
<div id="logo">
<a href="http://meuforum.net/index.php?forum=MeuForum"></a>
</div>


P.S: Não reparei no href que estava-la :P




Seria possível mudar o logo se for para outra página?

Costa

que raio tem isso a ver com este tópico? :P
Hugo "Costa" Fernandes - PT SMF
Todas as MP's a pedir ajuda são sujeitas a radioactividade, microondas, queimadas e atiradas borda fora.

"At least someone appreciates the fact that I am doing and not thinking..."
"Laziness is counter-revolutionary."

Darkness_Black


Translator - Brazilian

Não respondo MP de ajuda, Poste sua duvida no forum!!! Se alguém te Ajudou Agradeça!!!

Carlos Faria

Como crio um botão só para os Grupos Normais (Administrador, Moderador, Moderador Global e etc..)??

Costa

Para quem pode moderar


'admin' => array(
'title' => $txt['texto'],
'href' => $scripturl . '?action=',
'show' => $context['can_moderate'],
'sub_buttons' => array(
),
Hugo "Costa" Fernandes - PT SMF
Todas as MP's a pedir ajuda são sujeitas a radioactividade, microondas, queimadas e atiradas borda fora.

"At least someone appreciates the fact that I am doing and not thinking..."
"Laziness is counter-revolutionary."

Carlos Faria

Eu fiz:

'admin' => array(
             'title' => $txt['staff_boton'],
             'href' => 'http://meuforum.net/index.php?forum=Staff',
             'show' => $context['can_moderate'],
             'sub_buttons' => array(
        ),
),


e não resulta.. não vejo nada... nem nenhum moderador e etc...

Costa

tenta assim...

'admin' => array(
             'title' => $txt['staff_boton'],
             'href' => 'http://meuforum.net/index.php?forum=Staff',
             'show' => $context['can_mod'],
             'sub_buttons' => array(
        ),
),
Hugo "Costa" Fernandes - PT SMF
Todas as MP's a pedir ajuda são sujeitas a radioactividade, microondas, queimadas e atiradas borda fora.

"At least someone appreciates the fact that I am doing and not thinking..."
"Laziness is counter-revolutionary."

Carlos Faria

Quote from: Costa on August 07, 2009, 02:08:26 PM
tenta assim...

'admin' => array(
             'title' => $txt['staff_boton'],
             'href' => 'http://meuforum.net/index.php?forum=Staff',
             'show' => $context['can_mod'],
             'sub_buttons' => array(
        ),
),


Não dá.. o que aparece é o botão para ir para painel de administração...

Costa

tá, depois vejo isso, ou então procura tu a variável de quem pode moderar, tou com preguiça e a fazer tudo na base do ao calhas :P
Hugo "Costa" Fernandes - PT SMF
Todas as MP's a pedir ajuda são sujeitas a radioactividade, microondas, queimadas e atiradas borda fora.

"At least someone appreciates the fact that I am doing and not thinking..."
"Laziness is counter-revolutionary."

Advertisement: