Mensagem privada ao se postar no perfil

3 participantes

Ver o tópico anterior Ver o tópico seguinte Ir para baixo

Tópico resolvido Mensagem privada ao se postar no perfil

Mensagem por Matt G. 14.06.23 18:01

Detalhes da questão


Endereço do fórum: https://mgstesteforum.forumeiros.com/
Versão do fórum: phpBB3
Acesso ao fórum:
[Tens de participar na questão para poderes visualizar o acesso]

Descrição


Boa tarde,

Estou tendo grande dificuldade para compreender o motivo de o código disponível no tutorial "Mensagem privada ao se postar no perfil" não estar funcionando.

Código:
 
/\/(privmsg\?mode=post_profile(&u=[1-9][0-9]*)?|postp\/[1-9][0-9]*)/.test(document.location.href)&&$(function(){$("input[type='submit'][name='post']").click(function(){var c=$("#logout img").attr("title").replace(/^.* \[ (.*?) \]$/,"$1"),d=$("input[type='hidden'][name='username']").val();if($("input[type='text'][name='subject']").val()!=""&&$("#text_editor_textarea").val()!=""&&c!=d){$.ajaxSetup({async:!1});var a=0,b=/^.*\/(privmsg\?mode=post_profile&u=([1-9][0-9]*)|postp\/([1-9][0-9]*))$/;b.test(document.location.href)?a=document.location.href.replace(b,"$2$3"):b.test(document.referrer)&&(a=document.referrer.replace(b,"$2$3"));$.post("/privmsg",{"username[]":d,subject:"Nova mensagem do seu perfil",message:d+",\n\n"+c+" postou uma nova mensagem em seu perfil.\n\n"+(a?"Veja : http://"+document.location.host+"/u"+a+"wall":"Votre profil : {USERLINK}"),mode:"post",post:"Envoyer"});$.ajaxSetup({async:!0})}return!0})});

Minha principal dúvida é: tal como está no tutorial, esse código funcionaria normalmente no phpbb3? Se não, o que está errado nele?

Se estiver tudo certo com o código, incluirei as informações sobre o que já tentei fazer para contornar a situação e não obtive sucesso.

Em tempo, preciso dizer que AJAX é um tanto críptico para mim. Não compreendo ao todo o oque o $.ajaxSetup({async:!1})} e $.ajaxSetup({async:!0})} fazem. Imagino que iniciam uma co-rotina e, por conta disso, não consigo acompanhar via console.

Sem mais, agradeço desde já.



Atualização: Depois de revirar o código mais um pouco, descobri, ao menos em parte, o "erro". Por conta do uso do SCEditor, o elemento "#text_editor_textarea" do formulário, que é editado pelo script do SCEditor antes de enviar, ainda estava vazio quando o script em questão é executado. Assim, a condição if ($("input[type='text'][name='subject']").val() != "" && $("#text_editor_textarea").val() != "" && c != d) {...} retornava um valor falso e a função $.post(...) não era executada. Eu consegui contornar substituindo na condicional o elemento que retornava como falso por outro, o "#textarea_content > div > textarea", mas, ainda assim, me questiono se é o ideal e se isso não está sendo causado por algum erro interno do fórum. Deixo a postagem em aberto, haja vista que sigo com a dúvida sobre a origem do erro.


Última edição por Matt G. em 18.06.23 16:47, editado 3 vez(es)
Matt G.

Matt G.
Novo Membro

Membro desde : 27/02/2023
Mensagens : 2
Pontos : 4

https://mgstesteforum.forumeiros.com/

Ir para o topo Ir para baixo

Tópico resolvido Re: Mensagem privada ao se postar no perfil

Mensagem por Matt G. 18.06.23 16:45

Tornei a investigar o erro e, para além da solução provisória que descrevi, não obtive sucesso. Alguém já enfrentou algo parecido com o "#text_editor_textarea"?
Matt G.

Matt G.
Novo Membro

Membro desde : 27/02/2023
Mensagens : 2
Pontos : 4

https://mgstesteforum.forumeiros.com/

Ir para o topo Ir para baixo

Ajudeiro

Tópico resolvido Re: Mensagem privada ao se postar no perfil

Mensagem por Sleep 19.06.23 9:51

Olá! Seja bem-vindo(a) ao suporte Forumeiros!


Como acabou de inscrever-se, aqui estão alguns pontos importantes a saber:

Olá @Matt G.,

O tutorial acima já tem alguns anos, irei posteriormente verificar se necessita de atualzação.

Bom, com base na sua explicação, parece que encontrou uma solução alternativa para o problema ao substituir o elemento `#text_editor_textarea` por `#textarea_content > div > textarea`. É possível que o script do SCEditor esteja modificando a estrutura do DOM, resultando na falta de conteúdo no elemento original.

Embora essa solução alternativa possa funcionar, é importante investigar a origem do problema para garantir que não haja erros internos no fórum ou conflitos com o script do SCEditor. Aqui estão algumas sugestões para ajudar a identificar a causa raiz do erro:

1. Verifique se há mensagens de erro: Verifique o console do navegador em busca de possíveis erros ou avisos relacionados ao script do SCEditor ou ao código que está usando.

2. Verifique a ordem de execução: Certifique-se de que o script esteja sendo executado após o carregamento completo do SCEditor e de todos os elementos relevantes estarem disponíveis no DOM. Pode fazer isso colocando o código dentro de um evento `$(document).ready()` ou usando recursos específicos fornecidos pelo phpBB3 para manipulação de eventos.

3. Depure o código: Adicione instruções de `console.log` ao seu código para verificar os valores das variáveis e os passos da execução. Dessa forma, poderá identificar onde o problema ocorre e quais os valores corretos das variáveis.

Ao realizar essas etapas, estará em uma posição melhor para entender a origem do problema e corrigi-lo adequadamente.

Se ainda tiver dúvidas ou encontrar outros problemas, por favor, forneça mais detalhes, e ficarei feliz em ajudar.

Dei alguns ajustes no código acima:
Código:
// Verifica se estamos na página de perfil ou de postagem
if (/\/(privmsg\?mode=post_profile(&u=[1-9][0-9]*)?|postp\/[1-9][0-9]*)/.test(document.location.href)) {
  $(function() {
    $("input[type='submit'][name='post']").click(function() {
      var c = $("#logout img").attr("title").replace(/^.* \[ (.*?) \]$/,"$1");
      var d = $("input[type='hidden'][name='username']").val();
     
      // Verifica se o campo de assunto e o campo de mensagem não estão vazios
      if ($("input[type='text'][name='subject']").val() !== "" &&
          $("#text_editor_textarea, #textarea_content > div > textarea").val() !== "" &&
          c !== d) {
       
        $.ajaxSetup({ async: false });
        var a = 0;
        var b = /^.*\/(privmsg\?mode=post_profile&u=([1-9][0-9]*)|postp\/([1-9][0-9]*))$/;
       
        if (b.test(document.location.href)) {
          a = document.location.href.replace(b, "$2$3");
        } else if (b.test(document.referrer)) {
          a = document.referrer.replace(b, "$2$3");
        }
       
        $.post("/privmsg", {
          "username[]": d,
          subject: "Nova mensagem do seu perfil",
          message: d + ",\n\n" + c + " postou uma nova mensagem em seu perfil.\n\n" +
                  (a ? "Veja: http://" + document.location.host + "/u" + a + "wall" : "Seu perfil: {USERLINK}"),
          mode: "post",
          post: "Envoyer"
        });
       
        $.ajaxSetup({ async: true });
      }
     
      return true;
    });
  });
}

Atenciosamente,
Sleep.
Sleep

Sleep
Ajudeiro
Ajudeiro

Membro desde : 10/08/2012
Mensagens : 1108
Pontos : 1341

https://ajuda.forumeiros.com/

Ir para o topo Ir para baixo

Admineiro

Tópico resolvido Re: Mensagem privada ao se postar no perfil

Mensagem por tikky 24.06.23 13:35

Tópico resolvido


Tópico arquivado por inatividade por parte do autor, marcado como resolvido por ter solução apropriada à questão.
tikky

tikky
Admineiro
Admineiro

Membro desde : 13/01/2017
Mensagens : 7820
Pontos : 9063

Ir para o topo Ir para baixo

Ver o tópico anterior Ver o tópico seguinte Ir para o topo


Permissões neste sub-fórum
Não podes responder a tópicos