mirror of
https://github.com/wallabag/wallabag.git
synced 2025-07-12 16:58:37 +00:00
Optimize the way tag list is rendered
Instead of retrieve all informations about entries of a tag to just count them, we’ll count them before with a fastest query. Also change the layout of the tag list in material design
This commit is contained in:
parent
b4fcd60e7f
commit
28bb48905a
13 changed files with 92 additions and 45 deletions
|
@ -387,7 +387,7 @@ class WallabagRestController extends FOSRestController
|
|||
|
||||
$tags = $this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Tag')
|
||||
->findAllTagsWithEntries($this->getUser()->getId());
|
||||
->findAllTags($this->getUser()->getId());
|
||||
|
||||
$json = $this->get('serializer')->serialize($tags, 'json');
|
||||
|
||||
|
|
|
@ -86,10 +86,25 @@ class TagController extends Controller
|
|||
{
|
||||
$tags = $this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Tag')
|
||||
->findAllTagsWithEntries($this->getUser()->getId());
|
||||
->findAllTags($this->getUser()->getId());
|
||||
|
||||
$flatTags = [];
|
||||
|
||||
foreach ($tags as $key => $tag) {
|
||||
$nbEntries = $this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->countAllEntriesByUserIdAndTagId($this->getUser()->getId(), $tag['id']);
|
||||
|
||||
$flatTags[] = [
|
||||
'id' => $tag['id'],
|
||||
'label' => $tag['label'],
|
||||
'slug' => $tag['slug'],
|
||||
'nbEntries' => $nbEntries,
|
||||
];
|
||||
}
|
||||
|
||||
return $this->render('WallabagCoreBundle:Tag:tags.html.twig', [
|
||||
'tags' => $tags,
|
||||
'tags' => $flatTags,
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
@ -309,4 +309,24 @@ class EntryRepository extends EntityRepository
|
|||
|
||||
return $qb->getQuery()->getSingleScalarResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* Count all entries for a tag and a user.
|
||||
*
|
||||
* @param int $userId
|
||||
* @param int $tagId
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function countAllEntriesByUserIdAndTagId($userId, $tagId)
|
||||
{
|
||||
$qb = $this->createQueryBuilder('e')
|
||||
->select('count(e.id)')
|
||||
->leftJoin('e.tags', 't')
|
||||
->where('e.user=:userId')->setParameter('userId', $userId)
|
||||
->andWhere('t.id=:tagId')->setParameter('tagId', $tagId)
|
||||
;
|
||||
|
||||
return $qb->getQuery()->getSingleScalarResult();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,19 +33,23 @@ class TagRepository extends EntityRepository
|
|||
}
|
||||
|
||||
/**
|
||||
* Find all tags with associated entries per user.
|
||||
* Find all tags per user.
|
||||
*
|
||||
* @param int $userId
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function findAllTagsWithEntries($userId)
|
||||
public function findAllTags($userId)
|
||||
{
|
||||
return $this->createQueryBuilder('t')
|
||||
->select('t.slug', 't.label', 't.id')
|
||||
->leftJoin('t.entries', 'e')
|
||||
->where('e.user = :userId')->setParameter('userId', $userId)
|
||||
->groupBy('t.slug')
|
||||
->addGroupBy('t.label')
|
||||
->addGroupBy('t.id')
|
||||
->getQuery()
|
||||
->getResult();
|
||||
->getArrayResult();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
<ul>
|
||||
{% for tag in tags %}
|
||||
<li id="tag-{{ tag.id|e }}"><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{tag.label}} ({{ tag.entries.getValues | length }})</a></li>
|
||||
<li id="tag-{{ tag.id|e }}"><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{tag.label}} ({{ tag.nbEntries | length }})</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
|
|
|
@ -6,12 +6,19 @@
|
|||
<div class="results clearfix">
|
||||
<div class="nb-results left">{{ 'tag.list.number_on_the_page'|transchoice(tags|length) }}</div>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<ul class="row data">
|
||||
{% for tag in tags %}
|
||||
<li id="tag-{{ tag.id|e }}" class="col l4 m6 s12"><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{tag.label}} ({{ tag.entries.getValues | length }})</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
<div class="row">
|
||||
<ul class="card-tag-labels">
|
||||
{% for tag in tags %}
|
||||
<li title="{{tag.label}} ({{ tag.nbEntries }})" id="tag-{{ tag.id }}" class="col l2 m2 s2">
|
||||
<a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{tag.label}} ({{ tag.nbEntries }})</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a href="{{ path('untagged') }}">{{ 'tag.list.see_untagged_entries'|trans }}</a>
|
||||
</div>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue