Я пытаюсь добавить счетчик просмотров страниц для сообщений, которые чаще всего просматриваются пользователем. Я добавил свойство $viewCount, которое является целым числом, в мою сущность Post.
Я хочу, чтобы это учитывалось каждый раз, когда пользователь нажимает на страницу показа для определенного сообщения.
Чтобы выполнить этот процесс, мне нужно настроить счетчик, добавить +1 каждый раз, когда он просматривается, сохранить это в базе данных, запросить это, а затем передать это обратно в Twig.
Две части, которые я не знаю, как сделать после часов поиска, это:
1) Как добавлять каждый раз, когда пользователь просматривает страницу (я знаю, что вы хотите как-то использовать +1)
2) Как запросить наибольшее количество просмотров страниц для передачи контроллеру и ветке
показать действие
/**
* Show Post
*
* @param $slug
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
* @return array
*
* @Route("/post/{slug}", name="acme_demo_show")
* @Template("AcmeDemoBundle:Page:show.html.twig")
*/
public function showPostAction($slug)
{
$article = $this->getDoctrine()->getRepository('AcmeBundle:Post')
->findOneBy(array(
'slug' => $slug
));
if (null === $article) {
throw $this->createNotFoundException('Post was not found');
}
// Increment views each time user clicks on an article
$em = $this->getDoctrine()->getManager();
$views = $article->getViews();
$article->setViews($views + 1);
$em->flush();
return array(
'article' => $article,
);
}
действие на боковой панели
public function sidebarAction()
{
$em = $this->getDoctrine()->getManager();
$post = $em->getRepository('AcmeDemoBundle:Article')
->getMostRecentArticles(5);
if (!$post) {
throw $this->createNotFoundException('No posts were found');
}
$articles = $this->getDoctrine()->getRepository('AcmeDemoBundle:Article')
->findBy(array(
array(
'views' => 'ASC'
)
));
return array(
'post' => $post,
'articles' => $articles
);
}
Веточка
<h3>Most Popular Articles</h3>
{% for article in articles %}
<a href="{{ path('acme_demo_article_show', { slug: article.slug }) }}" class="anchor" style="text-decoration: none">{{ article.title }}</a><br>
{% endfor %}