update-switzerland / updmostviewed
v2.0.4
2024-06-15 05:12 UTC
Requires
- composer/installers: ~1.0
README
跟踪页面浏览量和“最常浏览”页面列表
ProcessWire的UpdMostViewed模块允许您跟踪页面浏览量并在给定时间段内返回最常浏览的页面列表。
此模块非常适合创建侧边栏小部件,例如显示“本周最常阅读的文章”。
入门
将UpdMostViewed模块安装到您的ProcessWire项目中很简单,选择以下方法之一
- 模块目录:进入您的ProcessWire后端,转到模块 > 新建,并搜索模块 UpdMostViewed。
- 从GitHub:直接从GitHub最新版本下载模块。
- 使用Composer:如果您正在使用Composer进行项目,您可以在项目根目录中运行命令
composer require update-switzerland/updmostviewed
以添加模块。
下载并安装模块后,将其配置为满足您的需求。开启“自动页面浏览量计数”以实现无需手动跟踪。
用法
手动浏览跟踪
虽然推荐使用自动跟踪并且更容易使用,但您也可以通过将以下行添加到页面模板中来手动跟踪页面浏览量
$modules->get('UpdMostViewed')->writePageView($page);
在这种情况下,$page 应该是一个ProcessWire页面对象。
手动浏览计数仍然会尊重任何排除设置(IP、爬虫等)。
自动浏览跟踪(推荐)
要使用自动跟踪,只需转到MostViewed模块配置并启用“自动页面浏览量计数”。
模块配置
MostViewed模块提供许多配置选项
- 排除某些分支(页面ID及其所有子项)
- 排除特定页面
- 排除某些IP
- 限制计数到特定模板
- 定义要计数的用户角色
- 选择忽略来自搜索引擎爬虫的浏览量
此外,您可以定义多个时间段。如果模块在第一个时间段内找不到足够的浏览量,它将考虑第二个,依此类推。
时间段的默认值分别为1天、2天和3天。
检索“最常浏览”页面
您可以使用以下代码检索最常浏览的页面数组
$mostViewed = $modules->get('UpdMostViewed')->getMostViewedPages();
此函数还可以接受选项数组作为参数以微调最常浏览页面的搜索。
$options = [ 'templates' => 'basic-page,news-entry', // Restrict search to specific templates (comma separated) 'limit' => 5, // Limit the number of pages returned 'viewRange' => 1440 // Set a custom view-range in minutes ]; $mostViewed = $modules->get('UpdMostViewed')->getMostViewedPages($options);
检索到最常浏览的页面后,您可以使用foreach循环输出它们
echo "<ol>"; foreach ($mostViewed as $key => $most) { echo "<li><a href='{$most->url}'>{$most->title}</a></li>"; } echo "</ol>";
使用AJAX显示“最常浏览”页面
如果您的网站使用缓存页面,您可能会发现“最常浏览”页面的列表很快就会过时。为了保持列表最新,请考虑使用AJAX检索实时浏览数据。您可以通过请求带有可选参数的URL /?getMostViewedContent 来实现此操作。
以下是此模块的jQuery AJAX集成示例,展示如何限制结果并提供自定义查看范围。
<div id="most-viewed-container"> <h3>Most viewed (Ajax load)</h3> <ol class="most-viewed-list">Loading...<ol> </div> <script> // load most viewed pages into page $(document).ready(function() { const url = `<?php echo $modules->get('UpdMostViewed')->getVarAjaxLoad; ?>?lang=<?php echo $user->lang->name; ?>&templates=basic-page,news-page&limit=4&viewRange=1440`; $.ajax( `/${url}`, { success: function(data) { $('#most-viewed-container .most-viewed-list').html(data); }, error: function() { $('#most-viewed-container .most-viewed-list').html('Sorry, currently no data available'); } } ); }); </script>