Meu primeiro bug em meu novo emprego! [Como encontrei um bug que desformatava o layout de blog]

Primeiramente pessoal, eu gostaria de falar que recentemente eu consegui minha primeira oportunidade como desenvolvedor web júnior.

Foram 535 dias (1 ano 5 meses e 20 dias) do primeiro dia (15/04/2022) que comecei estudar programação até o meu primeiro dia de trabalho (02/10/2023). Tudo isso estudando em torno de 10 horas por semana e tendo uma rotina muito (muito mesmo) apertada.

Logo mais trago um post contanto minha história de forma mais detalhada mostrando o exato passo a passo do que eu estudei e quais minhas dicas para quem está procurando sua primeira oportunidade.

Mas, indo ao ponto do post...

Meu primeiro bug em meu novo emprego

Recentemente recebi um job para fazer que era uma correção de um layout que estava "quebrado". Se tratava de uma página de um blog. O slide/carrossel onde ficava os últimos posts passando em loop infinito apresentava um erro (uma quebra no layout) em um determinado post.

Esse erro deixava o subtítulo do post com tamanho desconfigurado, e o botão "Leia Mais" (que direciona para o link do post) sem funcionamento. Aparentemente era algo de CSS.

Resolvi ir dar uma olhada no devtools e logo vi que algo estranho estava acontecendo. Observe o elemento span esta com uma formatação estranha.

Observe que, dentro da tag span tem um atributo de estilo. Porém, o mesmo não é corretamente fechado com as aspas duplas. Estranhamente possui um fechamento de parágrafo e um elemento de âncora/link dentro das aspas que seria o estilo do elemento span.

Resumindo, estava tudo desconfigurado e havia algum erro além do CSS, como inicialmente havia pensado.

O que haveria de ser, então?

Não sei muito sobre back-end. Porém, por um momento imaginei que o conteúdo poderia estar sendo carregado de uma forma incorreta. O site utiliza WordPress.

Tenho aprendido sobre PHP com o intuito de me tornar um profissional mais completo, visto que na empresa se utiliza muito do PHP ainda mais por conta do próprio WP.

Então, decidi ir dar uma olhada no código do blog em questão.

O site também utiliza o plugin construtor Elementor. Na página do blog, que é feita em elementor, tinha apenas um shortcode.

Toda aquela parte que estava com erro era carregada por esse shortcode. Daí, fui 'caçar' onde estava esse shortcode, porém não o encontrava. Pedi ajuda a uma colega de trabalho que de forma muito ágil e prestativa me ajudou a encontrá-lo.

Nisso, começou uma luta para entender o que exatamente o código PHP/WP estava fazendo.

O shortcode dedo-duro

Neste shortcode em questão parecia estar tudo certo. Mas, bem na última linha, ele invoca outro shortcode.

Ok, vamos agora neste outro shortcode para entendê-lo também.

Neste segundo shortcode, ele basicamente é composto por HTML e alguns trechos com código PHP. A função do PHP neste caso é apenas "colocar a carne (conteúdo do post) no esqueleto (estrutura HTML)".

Por exemplo, este é o exato código que estava no trecho que ocasionava erro e quebrava todo o layout.

<div class="py-3">
    <h2><?= $post_blog->post_title ?></h2>
    <p>
        <?= mb_strimwidth($post_blog->post_content, 0, 130, '...') ?>
    </p>
    <a href="<?= $post_blog->guid ?>" target="_blank" class="btn-carousel-post">Leia mais</a>
</div>

Este $post_blog nada mais é do que um objeto com algumas propriedades e métodos referente ao post.

Veja que no elemento parágrafo foi utilizado a função mb_strimwidth. Essa função serve para truncar o texto — neste caso em 130 carateres. E encerra a string com os "..." indicando que possui mais texto. Resumidamente, fazer isso proporciona 3 benefícios:

  1. Torna o texto sempre do mesmo tamanho, formando um padrão visual dos posts.
  2. Limita o conteúdo. Caso contrário seria trazido todo o texto do post o que daria centenas de linhas.
  3. Dá uma prévia do conteúdo para o usuário, gerando interesse em ler mais.

Até aí tudo bem! Parecia estar tudo certo. Porém, só parecia...

Encontrando o erro

Fui ver o porque somente 1 post estava ocasionando o erro. Se a função estivesse errada teria que estar dando problema nos outros posts também. Mas, *descobri que não necessariamente.

Entrei no painel do wordpress, fui ao post, abri o conteúdo... tudo normal. Até que por curiosidade, eu fui ver o como estava sendo gerado o HTML do texto.

Veja só:

Parece familiar esses spans?

Acontece que, a cada quebra de linha o wordpress está gerando esse elemento span.

E coincidentemente, naquele post em questão, a 'truncagem' (de 130 caracteres) do texto caia em cima do elemento span que não havia sido fechado. E como o PHP é um pré processador de HTML, como você pode imaginar, tava bugando todo resto que vinha após esse código.

A "gambiarra" e a solução proposta

A gambiarra que me refiro, na realidade não é bem uma gambiarra. Foi um ajuste simples, porém eficaz apenas para atender (e resolver) o problema apresentado pelo cliente.

O que fiz foi editar o texto do post retirando o span. Assim quando a função fosse truncar o texto, não iria mais cair nessa tag em aberto e o layout iria estar normalizado.

Problema corrigido, agora eu poderia pensar numa solução melhor para este problema não ocorrer novamente e eliminar de vez o erro em questão.

A solução foi utilizar a função strip_tags do PHP para retirar as tags (elementos HTML) do texto. Assim será garantido que somente virá texto do conteúdo do post em si e nada além disso.

Conclusão

Fique bem feliz por ter encontrado esse problema. É verdade que é algo bem simples, mas considerando que estou iniciando minha carreira agora e que não tenho tanto conhecimento em PHP, fiquei contente em poder ter encontrado o erro e resolucionado o problema.

Além disso, oportunidades assim me ajudarão a aprender na prática muitas coisas novas e me desenvolver como profissional!!


E você, como resolveria este problema? Tem alguma sugestão melhor?

Estou sempre disposto a ouvir opiniões diferentes e sugestões construtivas.

Forte abraço a todos e um bom descanso neste feriado!!

Primeiramente parabéns pelo emprego, desejo que sua jornada seja incrível. Gostei de ver que você persistiu pelos 535 dias de estudo, muita gente não passa dos primeiros 10 dias e já queriam ter um grande emprego. Vou te falar que agora que a escola começa de verdade! Eu aprendi infinitamente mais trabalhando do que estudando, é incrível.

Não sei muito sobre back-end

Você está no começo, então acho que tem tempo para descobrir no que quer se especializar ainda. Eu acredito que com o tempo você deve se tornar especialista em algo, tipo frontend, backend ou algo assim, mas ao mesmo tempo você tem que ser generalista. Eu estou vindo de uma realocação após ter perdido o emprego, em um mês e meio fiz umas 10 entrevistas, 9 me perguntaram: "ok você sabe frontend muito bem, mas também sabe backend? Talvez a gente precise que uma vez ou outra você programe em backend.". Então esteja aberto para todo aprendizado possível, muito legal ver que você quer aprender PHP para se tornar um profissional mais completo, está num ótimo caminho.

O que fiz foi editar o texto do post retirando o span. Assim quando a função fosse truncar o texto, não iria mais cair nessa tag em aberto e o layout iria estar normalizado... Problema corrigido.

Incrível! Não sei se você sempre teve esse pensamento na sua vida para outras coisas de estancar um problema, e então depois procurar uma solução melhor. Assim é o mercado e as empresas, a gente gosta de código bom? Sim, com certeza. Mas se o cliente não consegue usar nossa solução de nada vale nosso código bom. Continue nessa pegada, estanque o problema e então faça uma solução melhor, como você mesmo falou em seguida.

Esse foi apenas o primeiro bug, muitos outros virão, e em algum momento da sua carreira um bug muito crítico vai aparecer. Procure manter a calma sempre, e siga essa filosofia que você aplicou nesse bug, a nossa vida é resolver problemas, o código é um meio e não o fim.

Todo sucesso pra vc!

Obrigado viu!! Gostei muito do seu comentário. Sobre a jornada de estudos, confesso que não estudei todos os dias de forma consecutiva, mas tentei manter a regularidade de 10 horas por semana, isso me ajudou muito a manter foco e a estabelecer alvos. Hoje sei muito mais sobre front-end, mas quero aprender o back-end também para poder ter uma visão geral de como as coisas funcionam. Vamos nos conectar! Segue meu linkedin: https://linkedin.com/in/cssgabriel

Primeiramente PARABÉNS, você foi incrível. Você fez coisas que muito PLENO não faz. Dividir o problema em etapas.

Você pensou dividiu o problema analisando cada coisa, teve um bom raciocinio lógico de como resolver o problema.

Fui ver o porque somente 1 post estava ocasionando o erro. Se a função estivesse errada teria que estar dando problema nos outros posts também. Mas, *descobri que não necessariamente.

Isso foi demais, nem tudo em programação é o que parece e sua analise foi minuciosa em detectar a causa.

O que fiz foi editar o texto do post retirando o span. Assim quando a função fosse truncar o texto, não iria mais cair nessa tag em aberto e o layout iria estar normalizado.

Novamente parabéns, em primeiro lugar resolver o problema do cliente, e nem sempre da melhor maneira possivel, mas sim resolver.

Depois fazer a solução mais adequada, se esse pensamento venho de você, quer dizer que está no caminho certo. Muito orgulhoso do seu progresso, vai longe desse jeito.

Muito obrigado mesmo! Suas palavras me animaram rsrs. Espero trazer mais posts neste formato. Além disso, é sempre bom ouvir sugestões dos mais experientes. Vamos nos conectar! Segue meu linkedin: https://linkedin.com/in/cssgabriel

Muito bom ! Por mais tópicos como esse! Achei muito bacana toda a forma em que o post foi escrito até a resolução do problema! mto bom msm! 👍

Muito obrigado!! Pretendo trazer mais posts neste formato. Vlw!!

Grande, Gabriel!

Parabens pela publicação e pela persistência no aprendizado.

Apenas por curiosidade, quanto tempo você levou para debugar e achar uma solução para o processo?

Opa Felipe, fico feliz em te ver por aqui e receber um comentário seu. Então, vamos lá... Dando um breve contexto, como disse eu não tenho experiência em PHP e meu conhecimento nessa stack é realmente muito básico. Tendo isso em mente, o segundo fator a considerar é que é a primeira vez que "ponho a mão" neste código. O fato de estar tendo o primeiro contato com determinado código (feito por outra pessoa) te força a buscar entender primeiramente o que cada coisa faz. Daí, tendo um mapa geral de mais ou menos como as coisas estão funcionando, aí sim é possível começar a procurar os possíveis erros/problemas e simular condições diferentes para testar suas teorias da possível causa do problema em questão. Agora, indo ao ponto da pergunta, TODO esse processo citado acima, levou algo em torno de umas 1 hora e 10 min. (desde o problema chegar até mim até a resolução final). Então foi isso. Mas, agora me diga aí o porquê da pergunta. Abraço grande Felipe.
Pergunto porque já experenciei pessoas que tem medo de ir atrás da solução, de maneira mais simples no caso. E quando entram pra tentar resolver é um drama onde a pessoa fica em uma "caixa" e não consegue sair do lugar. Mesmo assim, parabéns por ter encontrado a solução.