在 Joomla 中添加命中计数器
Posted
技术标签:
【中文标题】在 Joomla 中添加命中计数器【英文标题】:Adding in a hit counter to Joomla 【发布时间】:2013-02-16 10:23:12 【问题描述】:我正在为 Joomla 2.5 创建一个自定义组件。我想为详细视图添加命中计数器(如 Joomla 内容等)
所以我做了一些研究,发现JTable::hit
函数我假设是我需要的(Joomla 文档页面here)。但是,我非常不清楚我需要在哪里实现这一点。当我从数据库中检索行时,它是在模型中的某个地方 - 还是在视图中的某个地方?建议将不胜感激!
【问题讨论】:
【参考方案1】:您可以使用表格类。在 Joomla 3 和 Joomla 4 中工作。
你的模型
use Joomla\CMS\Table\Table;
public function hit($id = 0)
Table::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_mycomp_name/tables');
$table = Table::getInstance('my_table_name', 'Table', array());
$table->hit($id);
return true;
$model = $this->getModel('model_name');
$model->hit($id);
您可以使用它来增加任何列。为此,您需要覆盖该列。
$table->setColumnAlias('hits', 'new_column_name');
$table->hit($id);
【讨论】:
【参考方案2】:如果你看看他们在 Joomla 中是如何做到的,你会发现他们在模型中实现了功能,并从视图中调用了方法。
例如,article.php
模型有
public function hit($pk = 0)
$hitcount = JRequest::getInt('hitcount', 1);
if ($hitcount)
// Initialise variables.
$pk = (!empty($pk)) ? $pk : (int) $this->getState('article.id');
$db = $this->getDbo();
$db->setQuery(
'UPDATE #__content' .
' SET hits = hits + 1' .
' WHERE id = '.(int) $pk
);
if (!$db->query())
$this->setError($db->getErrorMsg());
return false;
return true;
和
view.html.php
有
$model = $this->getModel();
$model->hit();
【讨论】:
美丽。我实际上使用了 weblinks 组件中的代码,因为它使用了JTable::hit
,这意味着模型函数实际上只有 4 行长。但这最终让我走上了正轨。天知道我在第一次围绕 Joomla 模型/组件等进行搜索时是如何错过这个功能的。谢谢 :)
但请注意缓存:每次缓存刷新时您可能只会命中一次,而不是每次访问都会命中一次。要每次访问获得一次命中,您需要从客户端上的 javascript 调用一个计数器,或者通过在模块主函数中的 getData() /getList() 之前插入 hit() 来解决模块的缓存问题。
以上是关于在 Joomla 中添加命中计数器的主要内容,如果未能解决你的问题,请参考以下文章