Просмотры страниц на Tickets в виджете админки
Попросили меня в предыдущей статье привести свой вариант виджета используя просмотры Tickets, но не вписался в комментарий и написал отдельный топик.

Подумал, что лучше всё-таки использовать pdoResources, чтобы выводило не только тикеты, а любую страницу сайта.
Вот моё готовое решение (нужны установленные pdoTools, Tickets):
Вот в принципе и всё. Оформление регулируется под себя в чанках. В сниппете указывается родитель для отдельных разделов сайта.
Пользуйтесь!
UPD.
Вариант статистики за последний квартал (изменённый сниппет):
UPD2
В комментариях привёл пример переписанного чанка на феноме с добавлением новых фишек.

Подумал, что лучше всё-таки использовать pdoResources, чтобы выводило не только тикеты, а любую страницу сайта.
Вот моё готовое решение (нужны установленные pdoTools, Tickets):
- Идем в настройки -> панели -> виджеты -> создать виджет -> 1. Задаём имя виджету 2. Тип виджета — Сниппет 3. Вставляем в содержимое виджета название сниппета и сохраняем: widget_popular_resources

- Добавляем созданный нами виджет в панель Default в настройки -> панели -> вкладка Панели -> Правой кнопкой мыши по Default -> Редактировать панель -> кнопка Добавить виджет -> выбираем наш созданный видюжет.
- Создаём сниппет widget_popular_resources (в parents можно вставлять своего родителя):
<?php $output = $modx->runSnippet('pdoResources', array( 'limit' => 30, 'parents' => 0, 'tplWrapper' => 'tpl.widget.popular.wrapper', 'tpl' => 'tpl.widget.popular.row', 'loadModels' => 'tickets', 'class' => 'Ticket', 'leftJoin' => '{ "TicketView": { "class": "TicketView", "on": "Ticket.id = TicketView.parent" } }', 'select' => '{ "Ticket": "Ticket.*", "TicketView": "COUNT(TicketView.uid) as views" }', 'groupby' => 'Ticket.id', 'sortby' => '{ "views":"DESC" }', )); return $output; - Чанк tpl.widget.popular.wrapper:
<style> .table {width: 100%;max-width: 100%;margin-bottom: 20px;border-collapse:collapse;} .table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td {padding: 8px;line-height: 1.42857143;vertical-align: top;border-top: 1px solid #ddd;} .table>thead>tr>th {vertical-align: bottom;border-bottom: 2px solid #ddd; font-weight: bold;} .table>caption+thead>tr:first-child>th, .table>colgroup+thead>tr:first-child>th, .table>thead:first-child>tr:first-child>th, .table>caption+thead>tr:first-child>td, .table>colgroup+thead>tr:first-child>td, .table>thead:first-child>tr:first-child>td {border-top: 0;} .table>tbody+tbody {border-top: 2px solid #ddd;} .table .table {background-color: #fff;} .table-condensed>thead>tr>th, .table-condensed>tbody>tr>th, .table-condensed>tfoot>tr>th, .table-condensed>thead>tr>td, .table-condensed>tbody>tr>td, .table-condensed>tfoot>tr>td {padding: 5px;} .table-bordered {border: 1px solid #ddd;} .table-bordered>thead>tr>th, .table-bordered>tbody>tr>th, .table-bordered>tfoot>tr>th, .table-bordered>thead>tr>td, .table-bordered>tbody>tr>td, .table-bordered>tfoot>tr>td {border: 1px solid #ddd;} .table-bordered>thead>tr>th, .table-bordered>thead>tr>td {border-bottom-width: 2px;} .table-striped>tbody>tr:nth-of-type(odd) {background-color: #f9f9f9;} .table-hover>tbody>tr:hover {background-color: #f5f5f5;} </style> <table class="table table-striped table-hover"> <thead> <tr> <th>Название ресурса</th> <th>Просмотров</th> </tr> </thead> <tbody> [[+output]] </tbody> </table> - чанк tpl.widget.popular.row:
<tr> <td> [[+parent:isnot=`0`:then=`<a href="[[~[[+parent]]]]" target="_blank">[[#[[+parent]].pagetitle]]</a> » `]] <a href="[[~[[+id]]]]" target="_blank">[[+pagetitle]]</a> </td> <td>[[+views]]</td> </tr>
Вот в принципе и всё. Оформление регулируется под себя в чанках. В сниппете указывается родитель для отдельных разделов сайта.
Пользуйтесь!
.````````````````````````````````````````````` `````````````````````````````````````````````` `````````````````````````````````````````````` ```@@@`````@@@````@@@@```,@@@@@'```@@@``@@@``` ````+@,```,@+```+@;``@@.```@``.@@```@,``.@```` ````@+@```@'@```@`````;@```@````+@```@``@````` ````@;@```@;@``@@``````@;``@`````@```#@+@````` ````@:;@`#',@``@:``````@@``@`````@,```@@`````` ````@.`@`@``@``@;``````@+``@`````@,```@@`````` ````@``@'@``@``#@``````@.``@`````@```@,#@````` ````@```@```@```@:````#@```@````@@``:@``@.```` ```,@,`````,@,``.@@:;@@```,@;;'@@``,@,``:@,``` ```+++`````+++````'@@:```.+++++````+++``+++``` `````````````````````````````````````````````` `````````````````````````````````````````````` ``````````````````````````````````````````````
UPD.
Вариант статистики за последний квартал (изменённый сниппет):
<?php
$period = date('Y-m-d H:i:s', strtotime("-3 month") ); // за последние 3 месяца
$output = $modx->runSnippet('pdoResources', array(
'limit' => 30,
'parents' => 0,
'tplWrapper' => 'tpl.widget.popular.wrapper',
'tpl' => 'tpl.widget.popular.row',
'loadModels' => 'tickets',
'class' => 'Ticket',
'leftJoin' => '{
"TicketView": {
"class": "TicketView",
"on": "Ticket.id = TicketView.parent"
}
}',
'select' => '{
"Ticket": "Ticket.*",
"TicketView": "COUNT(TicketView.uid) as views"
}',
'groupby' => 'Ticket.id',
'sortby' => '{ "views":"DESC" }',
'where' => '{ "TicketView.timestamp:>": "'.$period.'" }',
));
return $output;UPD2
В комментариях привёл пример переписанного чанка на феноме с добавлением новых фишек.
Комментарии: 38
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Если нужно цифры как-то разбивать и форматировать — никто тебе это не мешает сделать прямо в чанке. В статье дана базовая схема, а оформление уже у каждого как
музадушезаказчик прикажет.Используй в чанке Fenom и пиши какие угодно условия с данными под твои задачи. Можешь через модификатор свой их прогонять, а можешь прямо в чанке if else настрочить.
10000 = 10k
100000 = 100k
1000000 = 1kk
это общепринятые в it сфере обозначения. откройте твиттер и удивитесь
Открыл интернет — ещё больше запутался:
joxi.ru/p27RQEyUXavlm7
где просмотров 9,1К — это ~9 100 просмотров (причем как от 101 так и до 199)
К выступает в роле, как я понимаю, кило, как в байтах или битах
итого получаем что
1 000 — 1К
10 000 — 10К
100 000 — 100К
1 000 000 — 1КК (хотя как по мне логичней 1М)
И по сути все 30 страниц будут одинаковыми, типа:
Ведь тут же подсчёт ведётся по убыванию, и цифры будут отличаться возможно несколькими значениями или десятками… Пока что я не вижу смысла добавлять это в этот виджет, неубедительно.
вы упоминаете fenom, может тогда стоит поделиться мыслями по, походу. маскам для значений
Ок, я подумаю, но сначала мне нужно познакомиться получше с темой, погуглю на этот счёт, а то ещё есть вопросы разные, без чёткого понимания задачи не смогу сделать ничего.
По сути я чуть выше написал, что переделать это можно как угодно, под любую задачу — благо феном трудится. Но если сильно нужно такое обозначение, то могу сделать, но мне нужно чёткое представление как это должно выглядеть и в каких случаях. Тыкните носом в пример, что ли. Либо сами делайте как вам нужно.
Если число 1004, то как должно выглядеть, 1k4?
сами посмотрите habrahabr.ru/hubs/ как там рейтинг организован
так то для мощного сообщества идея интересная, но именно для мощного
Хоть это и вообще не проблема, но когда количество просмотров переходит за 10 000 у меня плывет верстка чанка TicketsMeta. Ну и быть в тренде тоже не помешает.
А в феноме я не бум-бум, поэтому могу только стрелки навести :(
Это Tickets позаимствовали всё, что только можно, с Хабра. А у них свой уникальный движок.
после просмотра самых самых постов вышло что пост modx.pro/components/10835-ms2gallery-20/ имеет 725 просмотров
В конце статьи я дал вариант наиболее используемой статистики — по кварталам (3 месяца), а это ещё больше сокращает числа.
Но даже если и нужна такая система, то мне нужны реальные примеры. Переведите мне разные числа в эту систему. Я не могу найти в интернете нормального объяснения. Все говорят что К — это 3 нуля. То есть 1к = 1000. Но как быть с числами, где нету нулей. Например переведите мне эти:
1001
1020
10222
12222
222222
1000009
1039999
10000000
11111111
1'001
1'020
10'222
12'222
222'222
1'000'009
1'039'999
10'000'000
11'111'111
Тогда цифры не сливаются и можно сразу заметить где 100 тысяч, а где 10 млн.
Если же говорить по существу обсуждаемого в комментах вопроса, то сокращения и в формате добавления тыс., млн и в виде к, кк имеет смысл делать для фронта при высоких показателях посещаемости. Для реализации этой вещи я бы обратился к Илье Уткину, поскольку его units выполняет смежную функцию (подстановка правильных окончаний для численных значений). Мое мнение таково, что нужно добавлять функционал инструменту, который уже в нужном направлении работает. Как расширение возможностей units можно добавить варианты сокращения самого числа с подстановкой в конце «млн» и «кк» по значению отдельного параметра. К примеру, &cut со значениями default (не сокращаем), rus (добавка тыс., млн, млрд) и eng (добавляем к, кк и что там дальше идет).
Ну, это все на уровне мыслей в слух, так что варианты есть, но сокращать данные в админке — зло))
Для меня лично удобнее общепринятое разделение запятой: «11,111,111».
Чтобы разделить запятой, в чанке tpl tpl.widget.popular.row достаточно заменить [[+views]] на феномовский эквивалент с модификатором:
Либо написать собственный модификатор, используя эту же php-функцию (почему-то встроенный на феноме number_format у меня не хочет принимать параметры для указания своего разделителя).
Вот в итоге что у меня получилось:
Тут у меня 2 виджета, один за просмотры за неделю, другой за квартал. Интересно наблюдать например огромное посещение 404-й страницы (Ой! что-то не так...) — видно что что-то действительно не так, нужно исправлять. robots.txt тоже почему-то весьма популярный, видно в гостевом режиме засчитываются посещения поисковых роботов (мне так кажется)…
Думаю для скорой статистики он подойдёт, для более детальной надо бежать в Метрику Яндекса.
на
Слева за месяц, справа — за все время.
Сниппеты используют общие чанки. Предполагаю, что не «очищается» {$output}.