Пока работает так:
При добавлении топика, есть поле для меток, метки нужно разделять запятыми.
Модуль обрабатывает их, и ложит каждую метку отдельно в таблицу для них же.
В таблице для меток такие поля: id метки, id топика, id юзера, id блога, сама метка.
Так же, метки лежат и в таблице топика, в том виде, в каком добавлены.
При просмотре или листинге топиков метки берутся из таблицы топиков.
А смарти всё уже разбивает вот так:
Smarty
{section name=topic loop=$topic_full}
<h1>{$topic_full[topic].topic_title}</h1>
<div class="topic_content">
{$topic_full[topic].topic_text}
</div>
{assign var="tag" value=","|explode:$topic_full[topic].topic_tags}
<ul class="tags">
{section name=tags loop=$tag}
{if $smarty.section.tags.last}
<li><a>{$tag[tags]}</a>.</li>
{else}
<li><a>{$tag[tags]}</a>,</li>
{/if}
{/section}
</ul>
{/section}
В итоге получается ряд из меток вида: "метка1,метка2,метка3."
Какие есть трудности.
Если оставить эту схему, то нужно наверное проверять в mysql (в табл. для меток), или уже есть такая метка в бд, что бы не добавлять дубликат...