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 http://www.bregapop.com/forum
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.
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 ;)
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?
AHHHHHHHHHH :P
Percebi mal, desculpa...
O que tu queres é ordenar os posts pelo título do tópico?
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.
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
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
Devias actualizar para 1.1.4...
Ou então anexa-me o teu MessageIndex. Mas devias mesmo era actualizar...
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.....
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
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...............
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?
;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
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
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']);
}
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
// 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
Muito bom amigo Margarett, obrigado pela disponibilidade, isto é realmente excelente para acabar com os indices 8)
Cump
petervmaster
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']])))
Ok amigo, vou testar depois deixo o feedback
Cump
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
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...
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
Faltava-me um ")"
Experimenta agora?
Continua a não dar, já não dá o erro mas não ordena quadro nenhum!
Cump
petervmaster
Tá dificil :P
Tenta agora. Nota que alterei em 2 posts ;)
:D Foi desta amigo, está tudo a funcionar na perfeição
Vou alterar no live ;)
Cump
petervmaster
Lá está... A diferença entre um "AND" e um "OR"... :P
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!
Margarett se poderes ajuda-me lá!!!
Eu sei que tens muita gente para ajudar!!!
Um abraço!
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
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!
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...
Já está em code ;D
Eu ainda tenho mais quadros :D para os indices são cerca de 80 quadros
Cump
petervmaster
Xiiiiiiiiiii...
Vou ver se meto isso num array então. Pelo menos fica muito mais legível...
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 ;)
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!
É 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...
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...