Sub-forum em ordem alfabética

Started by JoseRoberto, October 02, 2007, 08:59:05 AM

Previous topic - Next topic

JoseRoberto

Por padrão a ordenação dos fóruns é pelo mais recente. Existe como eu ordenar alfabeticamente somente os sub-fóruns?

Estou usando o SMF em hxxp:www.bregapop.com/forum [nonactive]

No Fórum de notícias gostaria que ficasse ordenado no padrão, mas nos Fóruns de Letras de músicas e Cifras que ficasse em ordenação alfabética.

margarett

Mas tu podes definir a ordem dos sub-quadros... No "manage boards" (na tua admin) tens lá a opção para mover os quadros, e dar-lhes a ordenação que quiseres ;)
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

JoseRoberto

Eu sei............. aí eu consigo ordenar do jeito que eu quero, mas não é na ordenação dos sub-quadros ou sub-fóruns, mas é a ordenação dos tópicos dentro de cada sub-fórum, pois cada vez que um tópico é criado, automaticamente ele é o primeiro que aparece. Ok?

margarett

AHHHHHHHHHH :P

Percebi mal, desculpa...

O que tu queres é ordenar os posts pelo título do tópico?
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

JoseRoberto

Sim...... pois, por exemplo, estou usando alguns fóruns para que os próprios usuários cadastrados possam adicionar as letras e cifras de bandas e cantores no padrão nome do artista - nome da música e se o fórum ordenar alfabeticamente pelo título do tópico ficará bem mais organizado.

margarett

Ora bem... A malta anda aqui a partir a carola...

No Sources/MessageIndex.php encontramos:

// Default sort methods.
$sort_methods = array(
'subject' => 'mf.subject',
'starter' => 'IFNULL(memf.realName, mf.posterName)',
'last_poster' => 'IFNULL(meml.realName, ml.posterName)',
'replies' => 't.numReplies',
'views' => 't.numViews',
'first_post' => 't.ID_TOPIC',
'last_post' => 't.ID_LAST_MSG'
);

// They didn't pick one, default to by last post descending.
if (!isset($_REQUEST['sort']) || !isset($sort_methods[$_REQUEST['sort']]))
{
$context['sort_by'] = 'last_post';
$_REQUEST['sort'] = 'ID_LAST_MSG';
$ascending = isset($_REQUEST['asc']);
}
// Otherwise default to ascending.
else
{
$context['sort_by'] = $_REQUEST['sort'];
$_REQUEST['sort'] = $sort_methods[$_REQUEST['sort']];
$ascending = !isset($_REQUEST['desc']);
}


Podemos tentar adaptar este "if" para o que nos interessa... Penso eu...

Então vamos a ver... O 1º "if"
// They didn't pick one, default to by last post descending.
if (!isset($_REQUEST['sort']) || !isset($sort_methods[$_REQUEST['sort']]))

Este é o default... Vamos deixar o default para todos os quadros que não o que queres... Deve ficar qualquer coisa assim:
// They didn't pick one, default to by last post descending.
if (($board != xx) && (!isset($_REQUEST['sort']) || !isset($sort_methods[$_REQUEST['sort']])))

No $board != xx tens de substituir o "xx" pelo ID do quadro...

Agora vamos adaptar para o nosso quadro.
// Otherwise default to ascending.
else
{
$context['sort_by'] = $_REQUEST['sort'];
$_REQUEST['sort'] = $sort_methods[$_REQUEST['sort']];
$ascending = !isset($_REQUEST['desc']);
}

Vai ficar:
// Otherwise default to ascending.
elseif ($board != xx)
{
$context['sort_by'] = $_REQUEST['sort'];
$_REQUEST['sort'] = $sort_methods[$_REQUEST['sort']];
$ascending = !isset($_REQUEST['desc']);
}
          //finalmente, se for para ordenar no quadro "xx"
        else
        {
$context['sort_by'] = 'subject';
$_REQUEST['sort'] = 'mf.subject';
$ascending = isset($_REQUEST['asc']);
       }


Não tenho a certeza que seja bem isto... Não te esqueças de trocar os "xx" pelo ID do quadro em questão, faz backup do teu MessageIndex.php e coloca lá estas alterações...
Avisa se resultou ou não. Isto é mesmo do alto da minha invenção :P
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

JoseRoberto

Caro Bruno, na versão do SMF que estou usando (1.1.2) não existem as linhas citadas por você no arquivo  Sources/MessageIndex.php

margarett

Devias actualizar para 1.1.4...

Ou então anexa-me o teu MessageIndex. Mas devias mesmo era actualizar...
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

JoseRoberto

Ok... concordo......... irei tentar... vou tentar fazer o backup, desinstalar o SMF 1.1.2, instalar o SMF 1.1.4 e recuperar o backup..... vamos aguardar.....

O Cobra

Quote from: JoseRoberto on October 05, 2007, 05:02:56 PM
Ok... concordo......... irei tentar... vou tentar fazer o backup, desinstalar o SMF 1.1.2, instalar o SMF 1.1.4 e recuperar o backup..... vamos aguardar.....
Amigo não é preciso desinstalar a versão 1.1.2, apenas fazer o Large upgrade para a versão 1.1.4, mas gostaria de informar que vai perder todos MOD's

O Cobra

No fórum aonde pertenço ainda continua em 1.1.2 e pelo o que diz o administrador do mesmo, não vai fazer actualizar para 1..1.4

Vamos nós perceber porque...............

JoseRoberto

Tirando uma dúvida: eu posso então aplicar este Large upgrade do 1.1.4 sobre o SMF 1.1.2 instalado no meu domínio?

O Cobra

 ;D É claro que pode e deve o fazer, caso contrário, teria que fazer uma nova instalação do SMF, isto se apagar o 1.1.2

petervmaster

Boas a todos

@margarett, fiz como está e funcionou perfeitamente, isto é excelente para acabar com os indices!
Só uma pequena questão, não dá para inverter a ordem?! É que está a ordenar de Z para A e gostaria era que fosse ao contrário ou seja de A para Z.

Cump
petervmaster

margarett

Vê assim:

// Otherwise default to ascending.
elseif ($board != xx)
{
$context['sort_by'] = $_REQUEST['sort'];
$_REQUEST['sort'] = $sort_methods[$_REQUEST['sort']];
$ascending = !isset($_REQUEST['desc']);
}
          //finalmente, se for para ordenar no quadro "xx"
        else
        {
$context['sort_by'] = 'subject';
$_REQUEST['sort'] = 'mf.subject';
$ascending = !isset($_REQUEST['desc']);
       }
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

petervmaster

Quote from: margarett on October 08, 2007, 06:54:12 PM
Vê assim:

// Otherwise default to ascending.
elseif ($board != xx)
{
$context['sort_by'] = $_REQUEST['sort'];
$_REQUEST['sort'] = $sort_methods[$_REQUEST['sort']];
$ascending = !isset($_REQUEST['desc']);
}
          //finalmente, se for para ordenar no quadro "xx"
        else
        {
$context['sort_by'] = 'subject';
$_REQUEST['sort'] = 'mf.subject';
$ascending = !isset($_REQUEST['desc']);
       }


Amigo margarett, funcionou perfeitamente, só lhe queria colocar mais uma questão.
Dá para vários quadros?
Já tentei adicionar com , e ; e acaba por dar erro!

Cump
petervmaster

margarett

#16

// Otherwise default to ascending.
elseif ($board != xx)


Passa a:

// Otherwise default to ascending.
elseif (($board != xx) && ($board != yy) && ($board != zz))


;)

Vou passar este ao indice
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

petervmaster

Muito bom amigo Margarett, obrigado pela disponibilidade, isto é realmente excelente para acabar com os indices  8)

Cump
petervmaster

margarett

#18
E enganei-me :P

Tem de ser em 2 sitios...

É o que indiquei, e este:

// They didn't pick one, default to by last post descending.
if ((($board != xx) && ($board != yy) && ($board != zz)) && (!isset($_REQUEST['sort']) || isset($sort_methods[$_REQUEST['sort']])))
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

petervmaster

Ok amigo, vou testar depois deixo o feedback

Cump
petervmaster

petervmaster

Boas
Infelizmente não dá???
Amigo margarett não será necessário editar também esta parte:

//finalmente, se for para ordenar no quadro.....

Cump
petervmaster

margarett

Experimenta como tá agora...

Não é aí. Se vires, é feito ao contrário... Ou seja, faz-se o "normal" a não ser que seja um desses quadros. Por isso esse ultimo "else" é o restinho das operações. Aí não deve ser preciso mexer em nada...
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

petervmaster

Não amigo agora aparece-me este erro:

Parse error: syntax error, unexpected '{' in /home/ptforumn/public_html/teste/Sources/MessageIndex.php on line 394


margarett

Faltava-me um ")"

Experimenta agora?
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

petervmaster

Continua a não dar, já não dá o erro mas não ordena quadro nenhum!

Cump
petervmaster

margarett

Tá dificil :P

Tenta agora. Nota que alterei em 2 posts ;)
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

petervmaster

 :D Foi desta amigo, está tudo a funcionar na perfeição

Vou alterar no live  ;)

Cump
petervmaster

margarett

Lá está... A diferença entre um "AND" e um "OR"... :P
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

pass25

Olá,

Eu não conssigo!  :(

Não sei onde é que meti àgua!

// Default sort methods.
$sort_methods = array(
'subject' => 'mf.subject',
'starter' => 'IFNULL(memf.realName, mf.posterName)',
'last_poster' => 'IFNULL(meml.realName, ml.posterName)',
'replies' => 't.numReplies',
'views' => 't.numViews',
'first_post' => 't.ID_TOPIC',
'last_post' => 't.ID_LAST_MSG'
);

// They didn't pick one, default to by last post descending.
if ((($board !=5.0) && ($board !=26.0) && ($board !=30.0) && ($board !=31.0) && ($board !=71.0) && ($board !=100.0) && ($board !=32.0) && ($board !=33.0) && ($board !=34.0) && ($board !=36.0) && ($board !=37.0) && ($board !=38.0) && ($board !=39.0) && ($board !=41.0) && ($board !=42.0) && ($board !=44.0) && ($board !=45.0) && ($board !=46.0) && ($board !=48.0) && ($board !=49.0) && ($board !=51.0) && ($board !=52.0) && ($board !=72.0) && ($board !=54.0) && ($board !=55.0) && ($board !=56.0) && ($board !=57.0) && ($board !=59.0) && ($board !=60.0) && ($board !=61.0) && ($board !=62.0) && ($board !=84.0) && ($board !=64.0) && ($board !=69.0) && ($board !=67.0) && ($board !=68.0) ) && ($board !=73.0) && ($board !=99.0) && (!isset($_REQUEST['sort']) || isset($sort_methods[$_REQUEST['sort']])))
{&&
$context['sort_by'] = 'last_post';
$_REQUEST['sort'] = 'ID_LAST_MSG';
$ascending = isset($_REQUEST['asc']);
}

// Otherwise default to ascending.
elseif (($board !=5.0) && ($board !=26.0) && ($board !=30.0) && ($board !=31.0) && ($board !=71.0) && ($board !=100.0) && ($board !=32.0) && ($board !=33.0) && ($board !=34.0) && ($board !=36.0) && ($board !=37.0) && ($board !=38.0) && ($board !=39.0) && ($board !=41.0) && ($board !=42.0) && ($board !=44.0) && ($board !=45.0) && ($board !=46.0) && ($board !=48.0) && ($board !=49.0) && ($board !=51.0) && ($board !=52.0) && ($board !=72.0) && ($board !=54.0) && ($board !=55.0) && ($board !=56.0) && ($board !=57.0) && ($board !=59.0) && ($board !=60.0) && ($board !=61.0) && ($board !=62.0) && ($board !=84.0) && ($board !=64.0) && ($board !=69.0) && ($board !=67.0) && ($board !=68.0) ) && ($board !=73.0) && ($board !=99.0))
{
$context['sort_by'] = $_REQUEST['sort'];
$_REQUEST['sort'] = $sort_methods[$_REQUEST['sort']];
$ascending = !isset($_REQUEST['desc']);
}
          //finalmente, se for para ordenar no quadro "xx"
        else
        {
$context['sort_by'] = 'subject';
$_REQUEST['sort'] = 'mf.subject';
$ascending = !isset($_REQUEST['desc']);
       }

$context['sort_direction'] = $ascending ? 'up' : 'down';



Se alguém me pudesse ajudar agradecia!

Um abraço!

pass25

Margarett se poderes ajuda-me lá!!!

Eu sei que tens muita gente para ajudar!!!

Um abraço!

petervmaster

#30
Boas amigo
Tem de ficar assim:

// Default sort methods.
$sort_methods = array(
'subject' => 'mf.subject',
'starter' => 'IFNULL(memf.realName, mf.posterName)',
'last_poster' => 'IFNULL(meml.realName, ml.posterName)',
'replies' => 't.numReplies',
'views' => 't.numViews',
'first_post' => 't.ID_TOPIC',
'last_post' => 't.ID_LAST_MSG'
);

// They didn't pick one, default to by last post descending.
if ((($board != 5.0) && ($board != 26.0) && ($board != 30.0) && ($board != 31.0) && ($board != 71.0) && ($board != 100.0) && ($board != 32.0) && ($board != 33.0) && ($board != 41.0) && ($board != 42.0) && ($board != 44.0) && ($board != 45.0) && ($board != 46.0) && ($board != 48.0) && ($board != 49.0) && ($board != 51.0) && ($board != 52.0) && ($board != 72.0) && ($board != 54.0) && ($board != 55.0) && ($board != 56.0) && ($board != 57.0) && ($board != 59.0) && ($board != 60.0) && ($board != 61.0) && ($board != 62.0) && ($board != 84.0) && ($board != 64.0) && ($board != 69.0) && ($board != 67.0) && ($board != 68.0) && ($board != 73.0) && ($board != 99.0)) && (!isset($_REQUEST['sort']) || isset($sort_methods[$_REQUEST['sort']])))
{
$context['sort_by'] = 'last_post';
$_REQUEST['sort'] = 'ID_LAST_MSG';
$ascending = isset($_REQUEST['asc']);

}
// Otherwise default to ascending.
elseif (($board != 5.0) && ($board != 26.0) && ($board != 30.0) && ($board != 31.0) && ($board != 71.0) && ($board != 100.0) && ($board != 32.0) && ($board != 33.0) && ($board != 41.0) && ($board != 42.0) && ($board != 44.0) && ($board != 45.0) && ($board != 46.0) && ($board != 48.0) && ($board != 49.0) && ($board != 51.0) && ($board != 52.0) && ($board != 72.0) && ($board != 54.0) && ($board != 55.0) && ($board != 56.0) && ($board != 57.0) && ($board != 59.0) && ($board != 60.0) && ($board != 61.0) && ($board != 62.0) && ($board != 84.0) && ($board != 64.0) && ($board != 69.0) && ($board != 67.0) && ($board != 68.0) && ($board != 73.0) && ($board != 99.0))
{
$context['sort_by'] = $_REQUEST['sort'];
$_REQUEST['sort'] = $sort_methods[$_REQUEST['sort']];
$ascending = !isset($_REQUEST['desc']);
}
          //finalmente, se for para ordenar no quadro "xx"
        else
        {
$context['sort_by'] = 'subject';
$_REQUEST['sort'] = 'mf.subject';
$ascending = !isset($_REQUEST['desc']);
       }

$context['sort_direction'] = $ascending ? 'up' : 'down';


Copia e cola no teu MessageIndex.php

Cump
petervmaster

pass25

Olá,

Obrigado amigo!

Já deu, foi há segunda vez mas deu logo!
A 1ª vez, deu este erro "Nota: Parece que a sua base de dados precisa de ser actualizada. Os ficheiros estão na versão SMF 1.1.4, enquanto a sua base de dados está na versão1.1.2. Recomenda-se que seja executada a actualização para a última versão.", não sei porquê!

Mas voltei a fazer e deu logo!

Obrigado! Um abraço!

margarett

#32
Não precisam do "5.0", etc... O "5" chega perfeitamente ;)

Agora é que tou a ver... Vocês usam mesmo MUITOS quadros :P

Isso deveria ser possível meter num array, sempre era mais fácil de perceber o código... Mas não sei trabalhar com arrays :P

edit: @peter: mete isso dentro de code em vez de quote. fica mais legível...
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

petervmaster

Já está em code  ;D

Eu ainda tenho mais quadros  :D para os indices são cerca de 80 quadros

Cump
petervmaster

margarett

Xiiiiiiiiiii...

Vou ver se meto isso num array então. Pelo menos fica muito mais legível...
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

margarett

Lá está:
http://www.simplemachines.org/community/index.php?topic=201922.0

Podem então tentar facilitar a leitura do código e usar um array se quiserem ;)
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

pass25

Olá amigo,

Não sei se percebi bem! Então substituimos onde está if ((($board != 5.0) && ($board != 26.0) && ($board != 30.0) && ($board != 31.0) && ($board != 71.0) && ($board != 100.0) && ($board != 32.0) && ($board != 33.0) && ($board != 41.0) && ($board != 42.0) && ($board != 44.0) && ($board != 45.0) && ($board != 46.0) && ($board != 48.0) && ($board != 49.0) && ($board != 51.0) && ($board != 52.0) && ($board != 72.0) && ($board != 54.0) && ($board != 55.0) && ($board != 56.0) && ($board != 57.0) && ($board != 59.0) && ($board != 60.0) && ($board != 61.0) && ($board != 62.0) && ($board != 84.0) && ($board != 64.0) && ($board != 69.0) && ($board != 67.0) && ($board != 68.0) && ($board != 73.0) && ($board != 99.0)) && (!isset($_REQUEST['sort']) || isset($sort_methods[$_REQUEST['sort']])))

pelo array? É isso?

Existe maneira de meter apenas os novos tópicos a aparecerem em 1º lugar há mesma e depois de vistos voltarem para a ordem?

Um abraço!

margarett

É mais ou menos isso, eu depois adapto. Agora são 2 da matina :P

Essa segunda alteração já não consigo... Deve dar eventualmente, digo eu...
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

margarett

Ora isto é outra vez sem testar, mas de certeza que os amigos vão testar :P
A ideia é substituir aquele ENORME "if" pelo conteudo de um array.

Antes de mais, vamos criar o nosso array com os quadros que nos interessam:
$myarray = array(1, 2, 3, 4, 5, 6, 7);
Aqui adicionam a quantidade que quiserem (em PCs acho que não há limite de tamanho para os arrays).
Devem colocar o vosso array antes de:
// They didn't pick one, default to by last post descending.

Então, pegando na ideia acima de colocar mais que uma board:

// They didn't pick one, default to by last post descending.
if ((($board != xx) && ($board != yy) && ($board != zz)) && (!isset($_REQUEST['sort']) || isset($sort_methods[$_REQUEST['sort']])))

Passa a:

// They didn't pick one, default to by last post descending.
if ((!in_array($board, $myarray)) && (!isset($_REQUEST['sort']) || isset($sort_methods[$_REQUEST['sort']])))


E:

// Otherwise default to ascending.
elseif (($board != xx) && ($board != yy) && ($board != zz))


Passa a:

// Otherwise default to ascending.
elseif (!in_array($board, $myarray))


E acredito que seja isto... Mais uma vez não testado...
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

Advertisement: