Mensagens recentes

#11
Modificações / Este mod permite exibir um avi...
Última mensagem por candidosa2 - 22 de Abril de 2026, 03:48
Abra o ficheiro Source/Subs.php;

Encontre o seguinte:

array(
'tag' => 'url',
'type' => 'unparsed_equals',
'quoted' => 'optional',
'before' => '<a href="$1" class="bbc_link" target="_blank">',
'after' => '</a>',
'validate' => function (&$tag, &$data, $disabled)
{
$scheme = parse_url($data, PHP_URL_SCHEME);
if (empty($scheme))
$data = '//' . ltrim($data, ':/');
},
'disallow_children' => array('email', 'ftp', 'url', 'iurl'),
'disabled_after' => ' ($1)',
),
);

Substitua:

array(
'tag' => 'url',
'type' => 'unparsed_equals',
'quoted' => 'optional',
'before' => '<a href="https://portal2.smfpt.net/out.php?url=$1" class="bbc_link" target="_blank">',
'after' => '</a>',
'validate' => function (&$tag, &$data, $disabled)
{
$scheme = parse_url($data, PHP_URL_SCHEME);
if (empty($scheme))
$data = '//' . ltrim($data, ':/');
},
'disallow_children' => array('email', 'ftp', 'url', 'iurl'),
'disabled_after' => ' ($1)',
),
);

Link demo https://portal2.smfpt.net/
#12
Modificações e Pacotes / Adicionar NoFollow aos Links (...
Última mensagem por candidosa2 - 22 de Abril de 2026, 03:13
06 Dez 2017, 22:07
Nome da Modificação: NoFollow em Todos os Links
Autor: Nibogo
Tipo: Otimização para Motores de Busca
Compatibilidade: 2.1

Descrição: Adiciona o atributo nofollow aos links adicionados ao tópico. Isto impede que crie links externos, aos olhos dos motores de busca.

Link Original: http://custom.simplemachines.org/mods/index.php?mod=1236

O mod compatível com as versões Beta 2.1 está em anexo; pode descarregá-lo de lá.
#13
Modificações e Pacotes / Re: Ocultação de links e image...
Última mensagem por candidosa2 - 21 de Abril de 2026, 17:51
Utilizado para ocultar links dos visitantes. Configure as opções no painel de administração após a instalação.
Este é um mod personalizado, melhorado e visualmente melhorado.
Oculta os links dos visitantes e obriga-os a registarem-se.
Pode descarregar o ficheiro em anexo, se desejar.


Como corrigir agora no seu Subs.php (Manual)
Se quiseres resolver já sem reinstalar o mod, abre o teu ficheiro Subs.php e vai até à linha 1582. Verás isto:

// Cache the output if it took some time...
if (isset($cache_key, $cache_t) && microtime(true) - $cache_t > 0.05)
cache_put_data($cache_key, $message, 240);

Adiciona logo a seguir (depois do ; da última linha):

// Registered Links
if (($user_info['is_guest']) && (!empty($modSettings['hhyreglinks']) && $modSettings['hhyreglinks'] == 1))
{
$message = preg_replace('#<a href="(.*?)</a>#i', $txt['no_view_links'] . "\n" . '<a class="linkgizle_rep" href="' . $scripturl . '?action=signup">' . $txt['txt_reg_signup'] . '</a>&nbsp;' . $txt['txt_reg_or'] . '&nbsp;<a class="linkgizle_replikacep" href="' . $scripturl . '?action=login">' . $txt['txt_reg_login'] . '</a></span>', $message);
}
// End Registered Links
// Registered Images
if (($user_info['is_guest']) && (!empty($modSettings['hhyregimages']) && $modSettings['hhyregimages'] == 1))
{
$message = preg_replace('#<img src="(.*?)>#i', $txt['no_view_images'] . "\n" . ' <a href="' . $scripturl . '?action=signup">' . $txt['txt_reg_signup'] . '</a>&nbsp;' . $txt['txt_reg_or'] . '&nbsp;<a href="' . $scripturl . '?action=login">' . $txt['txt_reg_login'] . '</a>', $message);
}
// End Registered Images


Nota: Adicionei !empty(...) ao código manual para evitar erros de PHP "Undefined index" caso as definições ainda não tenham sido guardadas na base de dados.

Resumo do que aconteceu:
O mod Auto Embed Media Pro inseriu-se exatamente na linha que o Registered Links usava como referência. Ao mudar o xml para procurar apenas o fim da função de cache, ele voltará a funcionar independentemente de outros mods estarem lá.
#14
Modificações e Pacotes / Ocultação de links e imagens d...
Última mensagem por candidosa2 - 21 de Abril de 2026, 17:42
#15
SMF 2.1 / Bloquear Alteração de Nome no ...
Última mensagem por candidosa2 - 20 de Abril de 2026, 21:42
Se a interface não está colaborando (o que acontece às vezes no SMF 2.1 dependendo do pacote de tradução ou de modificações instaladas), a via SQL é a mais limpa e direta para um administrador com o seu perfil técnico.

No SMF, a permissão que controla a alteração do nome de exibição e outros detalhes da conta é a profile_identity_own.

Solução via Banco de Dados (SQL)
Para remover o direito dos membros comuns (e de outros grupos que não sejam moderadores) de alterarem o próprio nome, execute os seguintes comandos no seu PHPMyAdmin ou terminal MySQL:

Identificar o ID do grupo: Geralmente, membros comuns têm o id_group = 0.

Remover a permissão:

-- Remove a permissão de editar detalhes da conta (incluindo nome) para membros comuns
DELETE FROM smf_permissions
WHERE id_group = 0
AND permission = 'profile_identity_own';

Atenção: Se você tiver outros grupos de membros (como "Membros VIP" ou "Membros Antigos"), precisará repetir o comando alterando o id_group para o ID correspondente a esses grupos.
#16
Tutorial SMFPT / BoardNews Ehportal remover Pag...
Última mensagem por candidosa2 - 17 de Abril de 2026, 16:54
Bem tenho 2 boardnews mais quero que uma delas nao tenha a paginacao



1. Localize o ponto de edição
No arquivo PortalBlocks.php, vá até o final da função sp_boardNews. Você encontrará o código da paginação entre as linhas 723 e 725:

if (!empty($per_page))
echo '
<div class="sp_page_index">', $page_index, '</div>';

2. Aplique a correção por ID
Substitua essas linhas pelo código abaixo. Ele verifica se o bloco atual é o seu bloco VIP (ID 191) e, caso seja, impede a exibição das páginas:

// Ajuste Profissional: Esconde a paginação apenas para o bloco VIP ID 191
if (!empty($per_page) && $id != NUMEROIDDOBOARDNEWS)
echo '
<div class="sp_page_index">', $page_index, '</div>';

3. Por que esta solução resolve o seu problema:
Segmentação por ID: O código utiliza a variável $id (passada na linha 589 da função) para identificar especificamente o bloco que você está a configurar.

Preservação do Bloco Geral: Como o seu bloco de notícias geral possui um ID diferente de 191, ele continuará a mostrar a paginação normalmente.

Fim dos problemas de Cache/CSS: Ao remover o código diretamente no PHP, o "Páginas: [1]" deixa de existir no HTML gerado para o VIP, tornando desnecessária qualquer briga com arquivos CSS minificados ou caches de tema.

4. Procedimento pós-edição
Guarde o arquivo e envie-o para a pasta Sources/ no seu servidor.

Vá à Administração > Manutenção do Fórum > Rotina > Limpar o cache.

Agora você pode configurar o Maximum Characters do bloco VIP para 0 ou um valor alto, pois o layout não quebrará mais e a paginação terá sumido apenas deste quadro.


#17
Simpleportal / Re: Relato de bug – Problema c...
Última mensagem por candidosa2 - 12 de Abril de 2026, 23:18
Ao analisar o seu ficheiro PortalBlocks.php, vi que o seu sistema usa uma função própria chamada EhPortal_parsebbc. É logo a seguir a essa função que vamos dar o nosso "golpe de mestre".

Aqui estão os passos exatos para aplicar no ficheiro que acabou de enviar:

O Passo a Passo no PortalBlocks.php
1. Abra o seu PortalBlocks.php no editor.

2. Procure por esta linha exata (deve estar por volta da linha 527):

$row['body'] = EhPortal_parsebbc($row['body'], $row['smileys_enabled'], $row['id_msg']);
3. Pressione a tecla Enter no final dessa linha e cole este código exatamente por baixo dela:

// FIX ADELINO: Forçar resize de imagens geradas (Capas), ignorando smilies
$row['body'] = preg_replace(
'~<img(?![^>]*class="[^"]*smiley[^"]*")([^>]*)>~i',
'<img$1 style="max-height: 350px !important; max-width: 100% !important; width: auto !important; height: auto !important;">',
$row['body']
);

Como vai ficar o seu código (para ter a certeza):

$row['body'] = EhPortal_parsebbc($row['body'], $row['smileys_enabled'], $row['id_msg']);

// FIX ADELINO: Forçar resize de imagens geradas (Capas), ignorando smilies
$row['body'] = preg_replace(
'~<img(?![^>]*class="[^"]*smiley[^"]*")([^>]*)>~i',
'<img$1 style="max-height: 350px !important; max-width: 100% !important; width: auto !important; height: auto !important;">',
$row['body']
);

if (!empty($length) && $smcFunc['strlen']($row['body']) > $length && !$limited)
{


Como aumentar a imagem:
Abra novamente o PortalBlocks.php e vá ao código que acabámos de colar. Basta alterar o valor de max-height: 350px para 450px (ou 500px, dependendo do seu gosto).

Ficará exatamente assim:

// FIX ADELINO: Forçar resize de imagens geradas (Capas), ignorando smilies
$row['body'] = preg_replace(
'~<img(?![^>]*class="[^"]*smiley[^"]*")([^>]*)>~i',
'<img$1 style="max-height: 450px !important; max-width: 100% !important; width: auto !important; height: auto !important;">',
$row['body']
);
#18
Simpleportal / Relato de bug – Problema com r...
Última mensagem por Mr Ajuda - 12 de Abril de 2026, 10:02

Olá Equipa de Suporte,

Espero que se encontrem bem.

Gostaria de reportar um bug relacionado com a exibição de imagens ao utilizar o portal.

Detalhes do ambiente:

Versão do SMF: 2.1.7
Portal: EhPortal 1.40.3
Tema: Orangeline 2.1.4

Descrição do problema:
Ao ativar a opção "Resize images on portal", as imagens deixam de ser exibidas nas páginas do portal. O espaço da imagem fica vazio, embora a tag HTML da imagem (ex.: <img class="bbc_img" ...>) esteja presente no código.

Quando desativo esta opção, as imagens voltam a aparecer normalmente.

Notas adicionais:

O problema aparenta estar relacionado com CSS ou com a forma como o redimensionamento está a ser aplicado às imagens dentro dos blocos do portal.
Já testei algumas correções básicas em CSS (ex.: max-width: 100%; height: auto;), mas sem sucesso.
Este comportamento ocorre apenas no portal (EhPortal), não nos tópicos do fórum.

Poderiam, por favor, verificar esta situação ou indicar alguma solução ou alternativa?

Caso necessário, posso fornecer capturas de ecrã ou acesso para testes adicionais.

Com os melhores cumprimentos
#19
Modern / Orangeline
Última mensagem por candidosa2 - 08 de Abril de 2026, 02:33
#20
SimplePortal / Nao mostra lado direito so esq...
Última mensagem por candidosa2 - 07 de Abril de 2026, 13:18
Analisei o teu ficheiro index.template.php (versão 2.1.4/2.1.7) e o problema foi exatamente o que suspeitávamos: o código do EhPortal não existe neste ficheiro.

Quando instalaste o mod, ele provavelmente falhou a edição automática porque o teu tema é personalizado (Orangeline/SMFPT). Para resolveres isso e a coluna direita aparecer, tens de adicionar as chamadas do portal manualmente.

Faz o seguinte:

1. Ativar a Coluna Esquerda (que já vês)
Procura por esta linha (por volta da linha 477):

<div id="content_section">
<div id="main_content_section">

Adiciona ANTES dela:

// EhPortal - Lado Esquerdo
if (function_exists('template_ehportal_left'))
template_ehportal_left();

Ativar a Coluna Direita (o teu problema)
Procura por estas linhas (por volta da linha 489):

Se nao funcionar usar esta Opcao

1. Substitui a função template_body_above (Parte Superior)
Esta parte garante que a coluna esquerda apareça corretamente.

function template_body_above()
{
global $context, $settings, $scripturl, $txt, $modSettings, $maintenance;

// Wrapper div now echoes permanently for better layout options. h1 a is now target for "Go up" links.
echo '
<div id="top_section">
<div class="inner_wrap">';

// If the user is logged in, display some things that might be useful.
if ($context['user']['is_logged'])
{
// Firstly, the user's menu
echo '
<ul class="floatleft" id="top_info">
<li>
<a href="', $scripturl, '?action=profile"', !empty($context['self_profile']) ? ' class="active"' : '', ' id="profile_menu_top">';

if (!empty($context['user']['avatar']))
echo $context['user']['avatar']['image'];

echo '<span class="textmenu">', $context['user']['name'], '</span></a>
<div id="profile_menu" class="top_menu"></div>
</li>';

// Secondly, PMs if we're doing them
if ($context['allow_pm'])
echo '
<li>
<a href="', $scripturl, '?action=pm"', !empty($context['self_pm']) ? ' class="active"' : '', ' id="pm_menu_top">
<span class="main_icons inbox"></span>
<span class="textmenu">', $txt['pm_short'], '</span>', !empty($context['user']['unread_messages']) ? '
<span class="amt">' . $context['user']['unread_messages'] . '</span>' : '', '
</a>
<div id="pm_menu" class="top_menu scrollable"></div>
</li>';

// Thirdly, alerts
echo '
<li>
<a href="', $scripturl, '?action=profile;area=showalerts;u=', $context['user']['id'], '"', !empty($context['self_alerts']) ? ' class="active"' : '', ' id="alerts_menu_top">
<span class="main_icons alerts"></span>
<span class="textmenu">', $txt['alerts'], '</span>', !empty($context['user']['alerts']) ? '
<span class="amt">' . $context['user']['alerts'] . '</span>' : '', '
</a>
<div id="alerts_menu" class="top_menu scrollable"></div>
</li>';

// A logout button for people without JavaScript.
if (empty($settings['login_main_menu']))
echo '
<li id="nojs_logout">
<a href="', $scripturl, '?action=logout;', $context['session_var'], '=', $context['session_id'], '">', $txt['logout'], '</a>
<script>document.getElementById("nojs_logout").style.display = "none";</script>
</li>';

// And now we're done.
echo '
</ul>';
}
// Otherwise they're a guest. Ask them to either register or login.
elseif (empty($maintenance))
{
// Some people like to do things the old-fashioned way.
if (!empty($settings['login_main_menu']))
{
echo '
<ul class="floatleft">
<li class="welcome">', sprintf($txt[$context['can_register'] ? 'welcome_guest_register' : 'welcome_guest'], $context['forum_name_html_safe'], $scripturl . '?action=login', 'return reqOverlayDiv(this.href, ' . JavaScriptEscape($txt['login']) . ', \'login\');', $scripturl . '?action=signup'), '</li>
</ul>';
}
else
{
echo '
<ul class="floatleft" id="top_info">
<li class="welcome">
', sprintf($txt['welcome_to_forum'], $context['forum_name_html_safe']), '
</li>
<li class="button_login">
<a href="', $scripturl, '?action=login" class="', $context['current_action'] == 'login' ? 'active' : 'open','" onclick="return reqOverlayDiv(this.href, ' . JavaScriptEscape($txt['login']) . ', \'login\');">
<span class="main_icons login"></span>
<span class="textmenu">', $txt['login'], '</span>
</a>
</li>';

if ($context['can_register'])
echo '
<li class="button_signup">
<a href="', $scripturl, '?action=signup" class="', $context['current_action'] == 'signup' ? 'active' : 'open','">
<span class="main_icons regcenter"></span>
<span class="textmenu">', $txt['register'], '</span>
</a>
</li>';

echo '
</ul>';
}
}
else
// In maintenance mode, only login is allowed and don't show OverlayDiv
echo '
<ul class="floatleft welcome">
<li>', sprintf($txt['welcome_guest'], $context['forum_name_html_safe'], $scripturl . '?action=login', 'return true;'), '</li>
</ul>';

if (!empty($modSettings['userLanguage']) && !empty($context['languages']) && count($context['languages']) > 1)
{
echo '
<form id="languages_form" method="get" class="floatright">
<select id="language_select" name="language" onchange="this.form.submit()">';

foreach ($context['languages'] as $language)
echo '
<option value="', $language['filename'], '"', isset($context['user']['language']) && $context['user']['language'] == $language['filename'] ? ' selected="selected"' : '', '>', str_replace('-utf8', '', $language['name']), '</option>';

echo '
</select>
<noscript>
<input type="submit" value="', $txt['quick_mod_go'], '">
</noscript>
</form>';
}

if ($context['allow_search'])
{
echo '
<form id="search_form" class="floatright" action="', $scripturl, '?action=search2" method="post" accept-charset="', $context['character_set'], '">
<input type="search" name="search" value="">&nbsp;';

// Using the quick search dropdown?
$selected = !empty($context['current_topic']) ? 'current_topic' : (!empty($context['current_board']) ? 'current_board' : 'all');

echo '
<select name="search_selection">
<option value="all"', ($selected == 'all' ? ' selected' : ''), '>', $txt['search_entireforum'], ' </option>';

// Can't limit it to a specific topic if we are not in one
if (!empty($context['current_topic']))
echo '
<option value="topic"', ($selected == 'current_topic' ? ' selected' : ''), '>', $txt['search_thistopic'], '</option>';

// Can't limit it to a specific board if we are not in one
if (!empty($context['current_board']))
echo '
<option value="board"', ($selected == 'current_board' ? ' selected' : ''), '>', $txt['search_thisboard'], '</option>';

// Can't search for members if we can't see the memberlist
if (!empty($context['allow_memberlist']))
echo '
<option value="members"', ($selected == 'members' ? ' selected' : ''), '>', $txt['search_members'], ' </option>';

echo '
</select>';

// Search within current topic?
if (!empty($context['current_topic']))
echo '
<input type="hidden" name="sd_topic" value="', $context['current_topic'], '">';

// If we're on a certain board, limit it to this board ;).
elseif (!empty($context['current_board']))
echo '
<input type="hidden" name="sd_brd" value="', $context['current_board'], '">';

echo '
<input type="submit" name="search2" value="', $txt['search'], '" class="button">
<input type="hidden" name="advanced" value="0">
</form>';
}

echo '
</div></div>';

echo '
<div id="header">
<h1 class="forumtitle">
<a id="top" href="', $scripturl, '">', empty($context['header_logo_url_html_safe']) ? '<img src="' . $settings['images_url'] . '/logo.png" alt="' . $context['forum_name_html_safe'] . '">' : '<img src="' . $context['header_logo_url_html_safe'] . '" alt="' . $context['forum_name_html_safe'] . '">', '</a>
</h1>';

echo '
', empty($settings['site_slogan']) ? '<img id="smflogo" src="' . $settings['images_url'] . '/smflogo.svg" alt="Simple Machines Forum" title="Simple Machines Forum">' : '<div id="siteslogan">' . $settings['site_slogan'] . '</div>', '';

echo '
</div>
<div id="wrapper">
<div id="upper_section">
<div id="inner_section">
<div id="inner_wrap"', !$context['user']['is_logged'] ? ' class="hide_720"' : '', '>
<div class="user">
<time datetime="', smf_gmstrftime('%FT%TZ'), '">', $context['current_time'], '</time>';

if ($context['user']['is_logged'])
echo '
<ul class="unread_links">
<li>
<a href="', $scripturl, '?action=unread" title="', $txt['unread_since_visit'], '">', $txt['view_unread_category'], '</a>
</li>
<li>
<a href="', $scripturl, '?action=unreadreplies" title="', $txt['show_unread_replies'], '">', $txt['unread_replies'], '</a>
</li>
</ul>';

echo '
</div>';

// Show a random news item? (or you could pick one from news_lines...)
if (!empty($settings['enable_news']) && !empty($context['random_news_line']))
echo '
<div class="news">
<h2>', $txt['news'], ': </h2>
<p>', $context['random_news_line'], '</p>
</div>';

echo '
</div>';

// Show the menu here, according to the menu sub template, followed by the navigation tree.
// Load mobile menu here
echo '
<a class="mobile_user_menu">
<span class="menu_icon"></span>
<span class="text_menu">', $txt['mobile_user_menu'], '</span>
</a>
<div id="main_menu">
<div id="mobile_user_menu" class="popup_container">
<div class="popup_window description">
<div class="popup_heading">', $txt['mobile_user_menu'], '
<a href="javascript:void(0);" class="main_icons hide_popup"></a>
</div>
', template_menu(), '
</div>
</div>
</div>';

theme_linktree();

echo '
</div></div>';

// The main content should go here.
echo '
<div id="content_section">';

// EhPortal - Lado Esquerdo
if (function_exists('template_ehportal_left'))
template_ehportal_left();

echo '
<div id="main_content_section">';
}

2. Substitui a função template_body_below (Parte Inferior)
Esta parte ativa a coluna direita que está em falta.

function template_body_below()
{
global $context, $txt, $scripturl, $modSettings;

echo '
</div></div>';

// EhPortal - Lado Direito
if (function_exists('template_ehportal_right'))
template_ehportal_right();

echo '
</div></div>';

// Show the footer with copyright, terms and help links.
echo '
<div id="footer">
<div class="inner_wrap">';

// There is now a global "Go to top" link at the right.
echo '
<ul>
<li class="floatright"><a href="', $scripturl, '?action=help">', $txt['help'], '</a> ', (!empty($modSettings['requireAgreement'])) ? '| <a href="' . $scripturl . '?action=agreement">' . $txt['terms_and_rules'] . '</a>' : '', ' | <a href="#top_section">', $txt['go_up'], ' &#9650;</a></li>
<li>Original Orangeline by <a href="https://www.jpr62.com/theme/" target="_blank" class="new_win" title="Crip Zone"><span><b>Crip</a></b> Updated to v2.1.4 by <a href="https://www.jpr62.com/theme/" target="_blank" class="new_win" title="The Crip Zone Team"><span><b>The Crip Zone Team Tradução e Modificação by <a href="https://www.smfpt.net" target="_blank" class="new_win" title="SMFPT - Suporte e Manutenção de Fórum em Português"><span><b>SMFPT Team</a></b></span></li>
<li>Tradução e Modificação by <a href="https://www.smfpt.net" target="_blank" class="new_win" title="SMFPT - Suporte e Manutenção de Fórum em Português"><span><b>SMFPT Team</a></b></span></li>

<li class="copyright">', theme_copyright(), '</li>
</ul>';

// Show the load time?
if ($context['show_load_time'])
echo '
<p>', sprintf($txt['page_created_full'], $context['load_time'], $context['load_queries']), '</p>';

echo '
</div>
</div>';

}