Marcelo Mesquita

Apenas mais um desenvolvedor WordPress

Minhas impressões sobre o BuddyPress

Estive trabalhando no projeto Cultura Digital e não tem sido uma tarefa fácil. Grande parte da dificuldade que estamos tendo é atribuída ao BuddyPress. Ele não parece ter sido desenvolvido para o WordPress, suas tabelas e códigos (tanto interface quanto programação) não seguem um padrão semelhante ao do WordPress (“Code is Poetry”).

Banco de Dados

Me espantei na primeira vez que resolvi analisar a estrutura de dados do BuddyPress; vinte e uma tabelas novas criadas! A instalação original do WP utiliza apenas dez tabelas, a do WPMU necessita de dezesete, por que diabos o BP precisaria de vinte e uma só pra ele, resultando em trinta e oito no total (BP + WPMU).

Após gerar o modelo de dados do BP pude ter uma visão mais ampla da bobagem que haviam feito:

Nomeclatura das tabelas

Nomes como ‘wp_bp_acivity_user_activity’, ‘wp_bp_acivity_user_activity_cached’, ‘bp_messages_messages’ ou ‘bp_messages_threads’ já eram em si um quebra-cabeça a ser decifrado.

Normalização das tabelas

Ao começar a trabalhar com as tabelas não pude deixar de notar a quantidade de campos ‘user_id’ espalhados por tabelas, de alguma forma, conectadas. O caso mais claro foi o das tabelas ‘bp_activity_user_activity’ e ‘bp_activity_user_activity_cached’ que já são ligados através do campo ‘item_id’ mas ambas possuem os campo ‘user_id’.

Outro caso que me fez perder alguns cabelos foi o da tabela ‘bp_messages_threads’ que apenas mantém a ligação das mensagens que são respostas a outras mensagens. Isso poderia ser feito simplesmente criando um auto-relacionamento na tabela ‘bp_messages_messages’.

Dados redundantes

Acredito que o pior de tudo foi descobrir que algumas tabelas criadas pelo BuddyPress nem precisavam existir, pois serviam para armazenar informações que podiam ser armazenadas nas tabelas do WordPress.

Destaco o conjunto de tabelas ‘bp_xprofile_fields’ e ‘bp_xprofile_data’ que server para adicionar novos campos ao perfil do usuário. Para passar uma idéia, uma única tabela do WordPress substitui essas duas do BuddyPress, o plugin Register Plus é um exemplo de como isso pode ser feito. O único motivo, que vejo para que o BuddyPress tenha feito essa separação, seria para obter ganhos em performance, mas o fato de existir um campo para cada dado me fez pensar que a performance estaria equilibrada já que na tabela ‘usermeta’ esses dados poderiam estar em forma de array e, assim, ocupariam um campo apenas.

Também não gostei da forma como o BuddyPress trata as atividades. Apesar das atividades do site serem o conjunto das atividades de cada usuário, os dados ficam duplicados em diferentes tabelas. Por exemplo: Ao alterar meu perfil uma nova atividade é cadastrada na tabela ‘bp_activity_user_activity’ e depois a mesma informação é cadastrada na tabela ‘bp_activity_sitewide’.

Codificação

A codificação também ficou a desejar.

Funções engessadas

Diferente do WordPress onde as ‘template tags’ (funções que auxiliam a montagem do tema) praticamente não interferem na forma como o html é montado, no BuddyPress algumas ‘template tags’ carregam muito lixo e apresentam um visual pré-definido. Isso dificulta a personalização do tema pois força a alteração dos arquivos do BuddyPress para atingir um resultado esperado.

Por exemplo: a função que carrega os dados do perfil (xprofile_get_profile) monta uma tabela zebrada (uma linha clara outra escura), apenas com os dados informados e adiciona link a cada item. Mas a zebra que o BP monta é baseada nos dados que estão no banco, então se eu tiver deixado algum campo vazio a tabela acaba pulando uma cor deixando duas linhas claras e uma escura ou algo parecido. Se eu quiser corrigir essa zebra ou retirar os links dos dados eu precisarei criar uma função do zero para não ter que ‘hackear’ o BP.

Mistura de tema com plugin

Os temas são muito dependentes de funções definidas nos plugins. Essa questão é mais ou menos a mesma citada no item acima, imagine tentar criar uma nova função apenas para recuperar os membros ou pense na dor de cabeça que é ficar alternando entre plugins e tema para entender como tal trecho de código é montado.

Conclusão

O BuddyPress tem muito a evoluir antes de se tornar um sistema confiável, acredito que o principal é voltar os esforços para deixá-lo mais compatível com o seu hospedeiro, o WordPress. Assim poderá haver uma maior compatibilidade entre os plugins e temas, além de diminuir a curva de aprendizado para os desenvolvedores que já trabalham com o WordPress, o que, na minha opinião, poderá resultar em um impulso na comunidade BuddyPress.

8 Comments

  • responder

    Andy P

    8 anos atrás

    I have to reply in English I’m afraid.

    Some good points regarding the DB schema, there are definitely quirks and redundancies at the moment. The product is only at 1.0 and you will see a lot of improvements in the DB area in the next couple of versions.

    I’m not sure you were looking at the right place when you wanted to output a persons profile. There are plenty of easy to use template loops that will let you output data any way you like. There are however still some template tags that contain HTML, so it’s a process of re-factoring those offenders in coming versions.

    Check out the template loops here:
    http://codex.buddypress.org/developer-docs/custom-buddypress-loops/

    Thanks for the critique, this sort of thing is incredibly useful no matter if it is negative or positive. If you’re interested in helping improve the DB schema at all, get in touch with me.

  • responder

    PG

    8 anos atrás

    Boas considerações. Também estou montando um projeto que gostaria de usar o BuddyPress, pois já uso o WordPress MU.

    Estava lendo que a ideia do pessoal da WordPress é deixar o WordPress e a sua versão MU em uma só, talvez assim eles já devem pensar em melhorar o BuddyPress.

  • responder

    fabiano

    8 anos atrás

    Realmente as dificuldades no desenvolvimento de um projeto utilizando buddyPress são enormes.

    A comunidade WordPress espera uma melhora significativa desta plataforma de rede social.

    Parabéns pelo excelente relato detalhado dos problemas do buddyPress.

  • responder

    Lucas

    8 anos atrás

    Olá Marcelo, conheci seu site pela comunidade br do WordPress. Incrível o trabalho no Cultura Digital, fez a gente querer trabalhar com o Buddy Press.

    Mas aí eu venho aqui e olho que as dificuldades que eu to tendo não são só minhas. E olha que eu sou aprendiz…

    Pelo que li do comentário em inglês, algumas mudanças virão, mas fiquei com a dúvida, apesar disso, vale a pena usar essa ferramenta?

    • responder

      Marcelo Mesquita

      8 anos atrás

      Lucas,
      desde a criação desse post já houveram várias melhorias no BuddyPress. Não tenho acompanhado de perto essas modificações mas tenho ouvido boas críticas.

      Pra mim a grande vantagem do Buddy em relação a outras ferramentas de rede social é o WordPress por trás. E com a Automattic apoiando seu desenvolvimento, acredito que a tendência é melhorar.

      Abraço.

  • responder

    Paula Penedo

    7 anos atrás

    Marcelo, trabalho com internet e redes sociais e foi-me apresentado alguns projetos que pedem a integração com o Buddypress. O foco não é multi-blog (o que me tira o uso do WPMU), o foco é criar uma comunidade, com fóruns e relacionamento.

    O que eu queria te perguntar é o seguinte: você tem tutoriais, e-books que possam me ajudar a entender o Buddypress? O próprio codex deles deixa muito a desejar, o que complica para uma customização de template.

    Agradeço muito pela ajuda desde já. Tenha certeza que você é minha referência em Buddypress.
    Abraços

    • responder

      Marcelo Mesquita

      7 anos atrás

      Oi Paula,
      infelizmente não tenho nenhum tutorial sobre o BuddyPress. Se você já tiver trabalhado com o WordPress será mais fácil entender como funciona a criação/personalização dos templates no BP, pois eles seguem a mesma lógica: um template para cada tipo de página (membro, comunidade, forum, etc); um loop para cada funcionalidade (atividades, mensagens, discussões, etc).

      Já faz algum tempo que não trabalho com o BP, portanto caso precise de mais detalhes eu posso te indicar o pessoal do http://culturadigital.br que continua avançando nessa plataforma.

      Espero ter ajudado.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *