update hits logic

This commit is contained in:
2025-09-09 10:46:39 +02:00
parent 5dec036e78
commit b10ac62efa
3 changed files with 74 additions and 53 deletions

View File

@ -248,21 +248,16 @@ class CircolareModel extends ItemModel
}
/**
* Incrementa gli hits della circolare.
*/
public function hit($pk = null)
public function incrementHits(int $id): void
{
$pk = $pk ?: (int) $this->getState($this->getName() . '.id');
if (!$pk) {
return false;
}
$db = $this->getDatabase();
$query = $db->getQuery(true)
if ($id <= 0) return;
$db = Factory::getContainer()->get('DatabaseDriver');
$q = $db->getQuery(true)
->update($db->quoteName('#__circolari'))
->set($db->quoteName('hits') . ' = ' . $db->quoteName('hits') . ' + 1')
->where($db->quoteName('id') . ' = ' . (int)$pk);
$db->setQuery($query)->execute();
return true;
->where($db->quoteName('id') . ' = ' . (int) $id);
$db->setQuery($q)->execute();
}
}

View File

@ -18,9 +18,6 @@ class Router extends RouterView
public function __construct(SiteApplication $app, AbstractMenu $menu)
{
// 1) CATEGORIA (se la usi nei percorsi)
$category = new RouterViewConfiguration('category');
$category->setKey('id')->setNestable();
$this->registerView($category);
// 2) LISTA (nessuna key!)
$circolari = new RouterViewConfiguration('circolari');
@ -49,15 +46,7 @@ class Router extends RouterView
/* ---------------- BUILD ---------------- */
// Segmento categoria = alias (fallback id)
public function getCategorySegment($id, $query)
{
$db = Factory::getContainer()->get('DatabaseDriver');
$alias = (string) $db->setQuery(
$db->getQuery(true)->select('alias')->from('#__circolari_categorie')->where('id=' . (int)$id)
)->loadResult();
return $alias !== '' ? [$alias] : [(string) (int) $id];
}
// Segmento dettaglio = alias (fallback id se vuoto)
public function getCircolareSegment($id, $query)
@ -72,15 +61,6 @@ class Router extends RouterView
/* ---------------- PARSE ---------------- */
public function getCategoryId($segment, $query)
{
$db = Factory::getContainer()->get('DatabaseDriver');
$id = (int) $db->setQuery(
$db->getQuery(true)->select('id')->from('#__circolari_categorie')->where('alias=' . $db->quote($segment))
)->loadResult();
return $id > 0 ? $id : (ctype_digit((string)$segment) ? (int)$segment : 0);
}
public function getCircolareId($segment, $query)
{
@ -106,4 +86,36 @@ class Router extends RouterView
return $id;
}
// ⬇️ AGGIUNGI in Pcrt\Component\Circolari\Site\Service\Router
// Rimuove categoria_id (ecc.) dalla LISTA prima che Joomla costruisca lURL.
// Così sparisce anche se il link della voce di menu in DB lo contiene ancora.
public function build(&$query)
{
if (isset($query['view']) && $query['view'] === 'circolari') {
foreach (['categoria_id', 'catid', 'categorie', 'categories', 'category_id'] as $k) {
if (array_key_exists($k, $query)) {
unset($query[$k]);
}
}
}
// Se vuoi essere ultra-clean, rimuovi anche id/Itemid “sporchi” (non necessario di solito)
// if (isset($query['view']) && $query['view'] === 'circolari' && isset($query['id'])) unset($query['id']);
return parent::build($query);
}
// (Opzionale) Non reintrodurre variabili categoria in parse: la lista si filtra da params del menu.
public function parse(&$segments)
{
$vars = parent::parse($segments);
if (isset($vars['view']) && $vars['view'] === 'circolari') {
unset($vars['categoria_id'], $vars['catid'], $vars['categorie'], $vars['category_id']);
}
return $vars;
}
}

View File

@ -18,6 +18,20 @@ class HtmlView extends BaseHtmlView
{
// Carica la singola
$this->item = $this->get('Item');
$app = Factory::getApplication();
$user = Factory::getUser();
$model = $this->getModel();
$id = $app->input->getInt('id', 0);
// Incrementa hits SOLO per utenti loggati
if ($user->id > 0 && $id > 0) {
try {
$model->incrementHits($id);
} catch (\Throwable $e) {
// opzionale: logga se vuoi
}
}
// Se NON c'è l'item → mostra la lista
if (!$this->item) {