update hits logic
This commit is contained in:
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 l’URL.
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
@ -44,7 +58,7 @@ class HtmlView extends BaseHtmlView
|
||||
$this->addTemplatePath(JPATH_COMPONENT_SITE . '/tmpl/circolari');
|
||||
|
||||
return parent::display($tpl);
|
||||
}
|
||||
}
|
||||
|
||||
// Rendering normale della singola
|
||||
return parent::display($tpl);
|
||||
|
||||
Reference in New Issue
Block a user