Não alterar ordem dos tópicos & ícones dos tópicos inalteráveis

Started by duzzzstar, May 03, 2011, 04:50:06 PM

Previous topic - Next topic

duzzzstar

Olá, gostaria de saber como faço para que novos posts não levem os tópicos pra cima na página, ou seja, independentemente da data do último post o tópico permanecerá na ordem de quando foi criado.


A outra dúvida que tenho é com relação aos ícones dos tópicos, há alguma forma de não permitir que qualquer um altere os ícones dos tópicos? É que preciso que apenas a administração possa os alterar já que os ícones servirão para sinalizar o tipo de conteúdo do tópico.


Meu fórum é o http://yept.net/cac ou http://soldatx.com/cac

Spectrum..!!

Olá amigo duzzzstar,

A apresentação dos tópicos/mensagens é uma questão de personalização do perfil de cada usuário. Seu comportamento pode ser modificado em:

> Editar Perfil > Preferências do Layout > na opção "Mostrar as mensagens mais recentes no topo.". Para esta opção as mensagens são mostradas no topo ou não.

Quanto a alteração dos ícones, precisaria verificar, no painel adminstrativo do SMF, se o grupo o qual pertence o usuário tem a permissão para tal, que, no caso, retirar tal permissão.

...

Existem pessoas que deixam de buscar algo que dura a vida toda, para somente conquistar algo que dura alguns momentos...
Ser humilde; não é ser menos que alguém. É saber que não somos mais que ninguém!
SMF 2.0.4 | Meu site -->
Dell Vostro 3560 + AMD Radeon™ HD 7670M 1GB| Windows 8 Pro | Fedora 18 | IE10 | Google Chrome

Não atendo PM para pedidos de suporte/ajuda

duzzzstar

Quote from: Spectrum..!!☻ on May 04, 2011, 02:22:38 PMOlá amigo duzzzstar,

A apresentação dos tópicos/mensagens é uma questão de personalização do perfil de cada usuário. Seu comportamento pode ser modificado em:

> Editar Perfil > Preferências do Layout > na opção "Mostrar as mensagens mais recentes no topo.". Para esta opção as mensagens são mostradas no topo ou não.
Não tem como forçar essa opção pra todos os usuários?

duzzzstar

Então, parece que não entenderam ainda o que quero.

Quero só que os tópicos de um fórum fiquem ordenados pela data de criação dos mesmos e não pelas últimas respostas que os mesmos tiveram...

Spectrum..!!

Quote from: duzzzstar on May 25, 2011, 06:00:41 PM
Então, parece que não entenderam ainda o que quero.

Quero só que os tópicos de um fórum fiquem ordenados pela data de criação dos mesmos e não pelas últimas respostas que os mesmos tiveram...

Vamos ver, enquanto isso.... pode nos responder aqui? http://www.simplemachines.org/community/index.php?topic=432968

Obrigado.

Existem pessoas que deixam de buscar algo que dura a vida toda, para somente conquistar algo que dura alguns momentos...
Ser humilde; não é ser menos que alguém. É saber que não somos mais que ninguém!
SMF 2.0.4 | Meu site -->
Dell Vostro 3560 + AMD Radeon™ HD 7670M 1GB| Windows 8 Pro | Fedora 18 | IE10 | Google Chrome

Não atendo PM para pedidos de suporte/ajuda


TaijovuNeji

Quote from: duzzzstar on May 04, 2011, 06:05:30 PM
Quote from: Spectrum..!!☻ on May 04, 2011, 02:22:38 PMOlá amigo duzzzstar,

A apresentação dos tópicos/mensagens é uma questão de personalização do perfil de cada usuário. Seu comportamento pode ser modificado em:

> Editar Perfil > Preferências do Layout > na opção "Mostrar as mensagens mais recentes no topo.". Para esta opção as mensagens são mostradas no topo ou não.
Não tem como forçar essa opção pra todos os usuários?

Para deixar isso como padrão para todos os usuários, vá no painel de controle>> configurações >> Configurações de Temas e Layout >> Opção
No seu theme clique em "Restaurar as definições de todos os membros para usar este tema"  e modifique a opção que o Spectrum falou..
Hospedagem 20GB, Cpanel, Windows ou Linux, com suporte a PHP ou ASP, R$ 30,00 por mes ou 290 por ano


meu site: http://www.dungeonmakers.com.br/forum
Não atendo PM para pedidos de suporte/ajuda. Para isso existe o forum!!!

duzzzstar

Só que o que ele falou não é o que eu quero.

O que ele falou faz os novos posts de um tópico ficarem sempre em cima no tópico, o que quero é:
"Quero só que os tópicos de um fórum fiquem ordenados pela data de criação dos mesmos e não pelas últimas respostas que os mesmos tiveram..."

TaijovuNeji

Ao fazer isso que ele disse, os tópicos ficam sim ordenados pela data de criação, o mais recente é mostrado em primeiro lugar...
Hospedagem 20GB, Cpanel, Windows ou Linux, com suporte a PHP ou ASP, R$ 30,00 por mes ou 290 por ano


meu site: http://www.dungeonmakers.com.br/forum
Não atendo PM para pedidos de suporte/ajuda. Para isso existe o forum!!!

duzzzstar

Cara, acabei de testar novamente. Essa opção faz com que as mensagens dentro de um tópico sejam ordenadas pela data, ou seja, as mais novas ficam em cima, mas com relação aos tópicos passa longe do que perguntei, os tópicos continuam sendo ordenados pela data do último post e não pela data de criação dos tópicos.

Spectrum..!!

Amigo duzzzstar, é importante termos paciência, procuramos nunca abandonar um post.

Enquanto o amigo se queixa das dicas aqui, eu tenho ido a procura de sua solução, já estou vendo situações como essa --> http://custom.simplemachines.org/mods/index.php?mod=1677 e que teria de testar no RC5.....

Existem pessoas que deixam de buscar algo que dura a vida toda, para somente conquistar algo que dura alguns momentos...
Ser humilde; não é ser menos que alguém. É saber que não somos mais que ninguém!
SMF 2.0.4 | Meu site -->
Dell Vostro 3560 + AMD Radeon™ HD 7670M 1GB| Windows 8 Pro | Fedora 18 | IE10 | Google Chrome

Não atendo PM para pedidos de suporte/ajuda

TaijovuNeji

Desculpe agora que eu entendi o que você quer fazer.

bom podemos tentar alterar isso direto na query do banco de dados, abra seu arquivo MessageIndex.php dentro da pasta Sources e procure por esse código:

// For search engine effectiveness we'll link guests differently.
$context['pageindex_multiplier'] = empty($modSettings['disableCustomPerPage']) && !empty($options['messages_per_page']) && !WIRELESS ? $options['messages_per_page'] : $modSettings['defaultMaxMessages'];


$result = $smcFunc['db_query']('substring', '
         SELECT
            t.id_topic, t.num_replies, t.locked, t.num_views, t.is_sticky, t.id_poll, t.id_previous_board,
            ' . ($user_info['is_guest'] ? '0' : 'IFNULL(lt.id_msg, IFNULL(lmr.id_msg, -1)) + 1') . ' AS new_from,
            t.id_last_msg, t.approved, t.unapproved_posts, ml.poster_time AS last_poster_time,
            ml.id_msg_modified, ml.subject AS last_subject, ml.icon AS last_icon,
            ml.poster_name AS last_member_name, ml.id_member AS last_id_member,
            IFNULL(meml.real_name, ml.poster_name) AS last_display_name, t.id_first_msg,
            mf.poster_time AS first_poster_time, mf.subject AS first_subject, mf.icon AS first_icon,
            mf.poster_name AS first_member_name, mf.id_member AS first_id_member,
            IFNULL(memf.real_name, mf.poster_name) AS first_display_name, SUBSTRING(ml.body, 1, 385) AS last_body,
            SUBSTRING(mf.body, 1, 385) AS first_body, ml.smileys_enabled AS last_smileys, mf.smileys_enabled AS first_smileys
         FROM {db_prefix}topics AS t
            INNER JOIN {db_prefix}messages AS ml ON (ml.id_msg = t.id_last_msg)
            INNER JOIN {db_prefix}messages AS mf ON (mf.id_msg = t.id_first_msg)
            LEFT JOIN {db_prefix}members AS meml ON (meml.id_member = ml.id_member)
            LEFT JOIN {db_prefix}members AS memf ON (memf.id_member = mf.id_member)' . ($user_info['is_guest'] ? '' : '
            LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = t.id_topic AND lt.id_member = {int:current_member})
            LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = {int:current_board} AND lmr.id_member = {int:current_member})'). '
         WHERE ' . ($pre_query ? 't.id_topic IN ({array_int:topic_list})' : 't.id_board = {int:current_board}') . (!$modSettings['postmod_active'] || $context['can_approve_posts'] ? '' : '
            AND (t.approved = {int:is_approved}' . ($user_info['is_guest'] ? '' : ' OR t.id_member_started = {int:current_member}') . ')') . '
         ORDER BY ' . ($pre_query ? 'FIND_IN_SET(t.id_topic, {string:find_set_topics})' : (!empty($modSettings['enableStickyTopics']) ? 'is_sticky' . ($fake_ascending ? '' : ' DESC') . ', ' : '') . $_REQUEST['sort'] . ($ascending ? '' : ' DESC')) . '
         LIMIT ' . ($pre_query ? '' : '{int:start}, ') . '{int:maxindex}',
         array(
            'current_board' => $board,
            'current_member' => $user_info['id'],
            'topic_list' => $topic_ids,
            'is_approved' => 1,
            'find_set_topics' => implode(',', $topic_ids),
            'start' => $start,
            'maxindex' => $maxindex,
         )
      );


E basta trocar pelo que está destacado em negrito:

Quote
// For search engine effectiveness we'll link guests differently.
$context['pageindex_multiplier'] = empty($modSettings['disableCustomPerPage']) && !empty($options['messages_per_page']) && !WIRELESS ? $options['messages_per_page'] : $modSettings['defaultMaxMessages'];

      $result = $smcFunc['db_query']('substring', '
         SELECT
            t.id_topic, t.num_replies, t.locked, t.num_views, t.is_sticky, t.id_poll, t.id_previous_board,
            ' . ($user_info['is_guest'] ? '0' : 'IFNULL(lt.id_msg, IFNULL(lmr.id_msg, -1)) + 1') . ' AS new_from,
            t.id_last_msg, t.approved, t.unapproved_posts, ml.poster_time AS last_poster_time,
            ml.id_msg_modified, ml.subject AS last_subject, ml.icon AS last_icon,
            ml.poster_name AS last_member_name, ml.id_member AS last_id_member,
            IFNULL(meml.real_name, ml.poster_name) AS last_display_name, t.id_first_msg,
            mf.poster_time AS first_poster_time, mf.subject AS first_subject, mf.icon AS first_icon,
            mf.poster_name AS first_member_name, mf.id_member AS first_id_member,
            IFNULL(memf.real_name, mf.poster_name) AS first_display_name, SUBSTRING(ml.body, 1, 385) AS last_body,
            SUBSTRING(mf.body, 1, 385) AS first_body, ml.smileys_enabled AS last_smileys, mf.smileys_enabled AS first_smileys
         FROM {db_prefix}topics AS t
            INNER JOIN {db_prefix}messages AS ml ON (ml.id_msg = t.id_last_msg)
            INNER JOIN {db_prefix}messages AS mf ON (mf.id_msg = t.id_first_msg)
            LEFT JOIN {db_prefix}members AS meml ON (meml.id_member = ml.id_member)
            LEFT JOIN {db_prefix}members AS memf ON (memf.id_member = mf.id_member)' . ($user_info['is_guest'] ? '' : '
            LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = t.id_topic AND lt.id_member = {int:current_member})
            LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = {int:current_board} AND lmr.id_member = {int:current_member})'). '
         WHERE ' . ($pre_query ? 't.id_topic IN ({array_int:topic_list})' : 't.id_board = {int:current_board}') . (!$modSettings['postmod_active'] || $context['can_approve_posts'] ? '' : '
            AND (t.approved = {int:is_approved}' . ($user_info['is_guest'] ? '' : ' OR t.id_member_started = {int:current_member}') . ')') . '
         ORDER BY ' . ($pre_query ? 'FIND_IN_SET(t.id_topic, {string:find_set_topics})' : (!empty($modSettings['enableStickyTopics']) ? 'is_sticky' . ($fake_ascending ? '' : ' DESC') . ', ' : '') . $_REQUEST['sort'] . ($ascending ? '' : ' ASC')) . '
         LIMIT ' . ($pre_query ? '' : '{int:start}, ') . '{int:maxindex}',
         array(
            'current_board' => $board,
            'current_member' => $user_info['id'],
            'topic_list' => $topic_ids,
            'is_approved' => 1,
            'find_set_topics' => implode(',', $topic_ids),
            'start' => $start,
            'maxindex' => $maxindex,
         )
      );

Fazendo isso eu te garanto que vai mostrar os topicos mais antigos em primeiro lugar, eu testei aqui no meu forum e funcionou...
Hospedagem 20GB, Cpanel, Windows ou Linux, com suporte a PHP ou ASP, R$ 30,00 por mes ou 290 por ano


meu site: http://www.dungeonmakers.com.br/forum
Não atendo PM para pedidos de suporte/ajuda. Para isso existe o forum!!!

duzzzstar

Interessante TaijovuNeji, porém preciso só para uma área do meu fórum e não para todas :(
O mod que o Spectrum postou da falha na modificação do ManageBoards.template.php

TaijovuNeji

Isso é facil de resolver, basta colocar uma condição para fazer isso só se estiver na board que vc quer, veja:


if($_GET['board'] == 49){
      $result = $smcFunc['db_query']('substring', '
         SELECT
            t.id_topic, t.num_replies, t.locked, t.num_views, t.is_sticky, t.id_poll, t.id_previous_board,
            ' . ($user_info['is_guest'] ? '0' : 'IFNULL(lt.id_msg, IFNULL(lmr.id_msg, -1)) + 1') . ' AS new_from,
            t.id_last_msg, t.approved, t.unapproved_posts, ml.poster_time AS last_poster_time,
            ml.id_msg_modified, ml.subject AS last_subject, ml.icon AS last_icon,
            ml.poster_name AS last_member_name, ml.id_member AS last_id_member,
            IFNULL(meml.real_name, ml.poster_name) AS last_display_name, t.id_first_msg,
            mf.poster_time AS first_poster_time, mf.subject AS first_subject, mf.icon AS first_icon,
            mf.poster_name AS first_member_name, mf.id_member AS first_id_member,
            IFNULL(memf.real_name, mf.poster_name) AS first_display_name, SUBSTRING(ml.body, 1, 385) AS last_body,
            SUBSTRING(mf.body, 1, 385) AS first_body, ml.smileys_enabled AS last_smileys, mf.smileys_enabled AS first_smileys
         FROM {db_prefix}topics AS t
            INNER JOIN {db_prefix}messages AS ml ON (ml.id_msg = t.id_last_msg)
            INNER JOIN {db_prefix}messages AS mf ON (mf.id_msg = t.id_first_msg)
            LEFT JOIN {db_prefix}members AS meml ON (meml.id_member = ml.id_member)
            LEFT JOIN {db_prefix}members AS memf ON (memf.id_member = mf.id_member)' . ($user_info['is_guest'] ? '' : '
            LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = t.id_topic AND lt.id_member = {int:current_member})
            LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = {int:current_board} AND lmr.id_member = {int:current_member})'). '
         WHERE ' . ($pre_query ? 't.id_topic IN ({array_int:topic_list})' : 't.id_board = {int:current_board}') . (!$modSettings['postmod_active'] || $context['can_approve_posts'] ? '' : '
            AND (t.approved = {int:is_approved}' . ($user_info['is_guest'] ? '' : ' OR t.id_member_started = {int:current_member}') . ')') . '
         ORDER BY ' . ($pre_query ? 'FIND_IN_SET(t.id_topic, {string:find_set_topics})' : (!empty($modSettings['enableStickyTopics']) ? 'is_sticky' . ($fake_ascending ? '' : ' DESC') . ', ' : '') . $_REQUEST['sort'] . ($ascending ? '' : ' ASC')) . '
         LIMIT ' . ($pre_query ? '' : '{int:start}, ') . '{int:maxindex}',
         array(
            'current_board' => $board,
            'current_member' => $user_info['id'],
            'topic_list' => $topic_ids,
            'is_approved' => 1,
            'find_set_topics' => implode(',', $topic_ids),
            'start' => $start,
            'maxindex' => $maxindex,
         )
      );

}else{

// For search engine effectiveness we'll link guests differently.
$context['pageindex_multiplier'] = empty($modSettings['disableCustomPerPage']) && !empty($options['messages_per_page']) && !WIRELESS ? $options['messages_per_page'] : $modSettings['defaultMaxMessages'];

      $result = $smcFunc['db_query']('substring', '
         SELECT
            t.id_topic, t.num_replies, t.locked, t.num_views, t.is_sticky, t.id_poll, t.id_previous_board,
            ' . ($user_info['is_guest'] ? '0' : 'IFNULL(lt.id_msg, IFNULL(lmr.id_msg, -1)) + 1') . ' AS new_from,
            t.id_last_msg, t.approved, t.unapproved_posts, ml.poster_time AS last_poster_time,
            ml.id_msg_modified, ml.subject AS last_subject, ml.icon AS last_icon,
            ml.poster_name AS last_member_name, ml.id_member AS last_id_member,
            IFNULL(meml.real_name, ml.poster_name) AS last_display_name, t.id_first_msg,
            mf.poster_time AS first_poster_time, mf.subject AS first_subject, mf.icon AS first_icon,
            mf.poster_name AS first_member_name, mf.id_member AS first_id_member,
            IFNULL(memf.real_name, mf.poster_name) AS first_display_name, SUBSTRING(ml.body, 1, 385) AS last_body,
            SUBSTRING(mf.body, 1, 385) AS first_body, ml.smileys_enabled AS last_smileys, mf.smileys_enabled AS first_smileys
         FROM {db_prefix}topics AS t
            INNER JOIN {db_prefix}messages AS ml ON (ml.id_msg = t.id_last_msg)
            INNER JOIN {db_prefix}messages AS mf ON (mf.id_msg = t.id_first_msg)
            LEFT JOIN {db_prefix}members AS meml ON (meml.id_member = ml.id_member)
            LEFT JOIN {db_prefix}members AS memf ON (memf.id_member = mf.id_member)' . ($user_info['is_guest'] ? '' : '
            LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = t.id_topic AND lt.id_member = {int:current_member})
            LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = {int:current_board} AND lmr.id_member = {int:current_member})'). '
         WHERE ' . ($pre_query ? 't.id_topic IN ({array_int:topic_list})' : 't.id_board = {int:current_board}') . (!$modSettings['postmod_active'] || $context['can_approve_posts'] ? '' : '
            AND (t.approved = {int:is_approved}' . ($user_info['is_guest'] ? '' : ' OR t.id_member_started = {int:current_member}') . ')') . '
         ORDER BY ' . ($pre_query ? 'FIND_IN_SET(t.id_topic, {string:find_set_topics})' : (!empty($modSettings['enableStickyTopics']) ? 'is_sticky' . ($fake_ascending ? '' : ' DESC') . ', ' : '') . $_REQUEST['sort'] . ($ascending ? '' : ' DESC')) . '
         LIMIT ' . ($pre_query ? '' : '{int:start}, ') . '{int:maxindex}',
         array(
            'current_board' => $board,
            'current_member' => $user_info['id'],
            'topic_list' => $topic_ids,
            'is_approved' => 1,
            'find_set_topics' => implode(',', $topic_ids),
            'start' => $start,
            'maxindex' => $maxindex,
         )
      );

}


Onde eu coloquei:

if($_GET['board'] == 49){


Basta vc substituir o 49 pela id da board que vc quer que mostre as mensagens antigas em primeiro lugar, eu testei e funcionou. Qualquer problema é só avisar
Hospedagem 20GB, Cpanel, Windows ou Linux, com suporte a PHP ou ASP, R$ 30,00 por mes ou 290 por ano


meu site: http://www.dungeonmakers.com.br/forum
Não atendo PM para pedidos de suporte/ajuda. Para isso existe o forum!!!

duzzzstar


Darkness_Black

Acredito que basta separar os Board por vírgula

if($_GET['board'] == 49, 50 , 70, 100)

Se falei besteira pode me corrigir.

Translator - Brazilian

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

TaijovuNeji

Sim, tem como, basta alterar a condição fazendo isso:

if($_GET['board'] == 49 or $_GET['board'] == id_da_outra_board ){

Amigo Darkness, como vírgula acho que não funciona, mas não custa nada tentar ^^
Hospedagem 20GB, Cpanel, Windows ou Linux, com suporte a PHP ou ASP, R$ 30,00 por mes ou 290 por ano


meu site: http://www.dungeonmakers.com.br/forum
Não atendo PM para pedidos de suporte/ajuda. Para isso existe o forum!!!

Darkness_Black

Eu acho que da forma que vc citou possa ser que ele vai funcionar apenas em Um board OU  outro, mas posso estar enganado tb, como você mesmo disse não custa tentar, alguma delas vai dar certo e soluciona o problema do amigo que é o que importa.

Translator - Brazilian

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

Spectrum..!!

Quote from: TaijovuNeji on June 02, 2011, 09:33:59 AM
Sim, tem como, basta alterar a condição fazendo isso:

if($_GET['board'] == 49 or $_GET['board'] == id_da_outra_board ){

Amigo Darkness, como vírgula acho que não funciona, mas não custa nada tentar ^^

Ainda não olhei, mas a condição 'IF" acho que aceita mais alguma coisinha aí, não? A condição 'AND' não é suportada na situação?

Existem pessoas que deixam de buscar algo que dura a vida toda, para somente conquistar algo que dura alguns momentos...
Ser humilde; não é ser menos que alguém. É saber que não somos mais que ninguém!
SMF 2.0.4 | Meu site -->
Dell Vostro 3560 + AMD Radeon™ HD 7670M 1GB| Windows 8 Pro | Fedora 18 | IE10 | Google Chrome

Não atendo PM para pedidos de suporte/ajuda

TaijovuNeji

Com o AND daria errado pois ele não pode entrar em mais de uma board ao mesmo tempo e usando o and ele teria que estar na board tal E na outra board para entrar no código, usando o OR fica: estar na board tal OU na outra board para mostrar o código
Hospedagem 20GB, Cpanel, Windows ou Linux, com suporte a PHP ou ASP, R$ 30,00 por mes ou 290 por ano


meu site: http://www.dungeonmakers.com.br/forum
Não atendo PM para pedidos de suporte/ajuda. Para isso existe o forum!!!

Advertisement: