Jak udělat Tagování u článku
- Michal Vyšinský
- Člen | 608
A zkusil si to už vůbec? Hotový kód ti sem nikdo nedá, tím by ses nic nenaučil.
- thm
- Člen | 147
Tak tak, otázka je hrozně moc obecná.
Začni tím, že si vytvoříš modelovou třídu např. TagManager, která
se bude starat o ukládání názvů tagů do DB (nebo prostě někam).
Implementuj metody např. createTag($name), deleteTag($name), tagExists($name)
atd..
Pak si vytvoř spojovací tabulku se sloupci id, tag_id a article_id a nauč
TagManager pracovat s touto spojovací tabulkou tj. implementuj další metody
např. addTag($tagId, $articleId) atd..
- thm
- Člen | 147
Já jsem teď nedávno použil jQuery multiple autocomplete http://jqueryui.com/autocomplete/#… do jednoduchého
inputu. Pak udělám explode(',',$array)
, odstraním přebytečné
mezery (\Nette\Utils\Strings::trim()), prohledám databázi nalezených shod
s existujícími tagy, ty připojím k článku a ty co jsem nenašel
vytvořím a připojím.
Editoval thm (29. 9. 2014 14:49)
- lukyn94
- Člen | 30
Tak uz to mam ted delam vypis tech tagu v multiselectu ale problem pridam
k danemu clanku tag a vypise se vzdy posledni tag :
http://clip2net.com/s/j0lsN8
http://clip2net.com/s/j0luGp
Clanek s ID 1 mam 3 tagy ale tam se to nevypisou vsechny jen vzdy posledni
pridanej (viz. screeny)
<?php
public function viewAllTags()
{
return $this->db->table('tag');
}
public function viewArticleTags()
{
return $this->db->table('article_tag');
}
$allTags = $this->tagModel->viewAllTags()->fetchpairs('id', 'tag');
$addsTags = $this->tagModel->viewArticleTags()->where(['article_id' => $this->article->id])->fetchPairs('article_id','tag_id');
$form->addMultiSelect('tag','Tag :', $allTags)
->setAttribute('class', 'chosen-select')
->setDefaultValue($addsTags);
?>
Editoval lukyn94 (30. 9. 2014 21:50)
- David Matějka
- Moderator | 6445
nemuzes tam mit
->fetchPairs('article_id','tag_id');
jelikoz article_id jsou pro vsechny zaznamy stejny, tak se ty prvky v poli prepisou, pouzij
->fetchPairs(NULL,'tag_id');