Forum Pplware

Versão Completa: PHP valores separados por virgulas
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
Boa tarde,

cá estou eu mais uma vez a pedir ajuda =) então é assim eu tou a construir um pequeno cms, e nele queria incluir um sistema de tags, assim quando o utilizador cria um novo artigo adiciona as tags separando palavras por virgulas ex:

atitude, controlo, destreza, estudo

depois eu quando guardo o artigo tenho um campo na base de dados chamado tags onde guardo os valores.

o meu problema é depois ir buscar la os valores separados por virgulas, ou seja, como é que eu transformo a string devolvida pela base de dados num objecto com todas as tags?

já agora se tiverem alguma sugestão em como criar um bom sistema de tags, caso a minha linha de pensamento não ser a mais correcta estou aberto a sugestões como é óbvio =)

cumprimentos =)
O ideal é teres uma tabela com as tags existentes (onde crias quando não existe) do tipo:

Código:
tags: id (int, primary, auto-increment), tag (varchar(80), total (int, default 1)

Depois outra:

Código:
tags_objects: id (int, primary, auto-increment), tag (int), object (int) (criar um unique index com tag e object)

Depois terás uma função do tipo addTag('nomedatag') que irá adicionar ou actualizar valores na primeira tabela, algo como:

Código:
function addTag($tag) {
  //-- Aqui verificas se é um valor válido e se existe na BD, se existir, actualizas o valor "total", caso contrário, adicionas uma linha na tabela, convém retornar o ID numérico da tag.
}

De seguida, outra função, a que vais aplicar para "taggar" uma tag a um objecto, ex. addTag2Object('tag',1), do tipo:

Código:
function addTag2Object($tag,$object) {
  //-- Aqui vais buscar o id utilizando $tag_id = addTag($tag);
  //-- Depois adicionas a tag ao objecto, se não existir. Se existir, ou retornas um erro ou não fazes nada.
}

Agora, finalmente o que pediste especificamente, uma função que pegue na string separada por vírgulas e que chame as funções acima, ex. tagObject('tag, tag2,tag3 ,tag4',1), do tipo:

Código:
function tagObject($tags,$object) {
  $tags_a = explode(',',$tags);//-- Converte a string num array
  foreach ($tags_a as $tag) {
    $tag = trim($tag);//-- Limpa espaços no início e fim
    addTag2Object($tag,$object);
  }
}

Faltam imensas verificações e tal, mas fiz isso agora de cabeça, deve ser mais que suficiente.

Se precisares de taggar vários objectos diferentes (posts, comentários, páginas, etc.) convém adicionares na segunda tabela um type (int) e respectivamente nas funções.
boa =)

chega perfeitamente para continuar =)
URL's de Referência