Система управления контентом SantaFox

Работа с SantaFox => Модуль "Новости" => Тема начата: vitalys от 09 Июнь 2017, 20:30:27

Название: Костыль вывода количества просмотров новости в ленту
Отправлено: vitalys от 09 Июнь 2017, 20:30:27
Вот такой костыль. Необходимы включенные в админке модуля ЧПУ.

1. Создаем папку /stats/ в корне сайта, права 777
2. В шаблоне вывода полной новости (archive) ставим метку vievcount
3. В модуле свободного кода создаем новое действие, код будет следующий
function curPageName() {
   $addr = $_SERVER['REQUEST_URI'];
   return substr_replace($addr,'txt',-4);
  }
  $url='stats'.curPageName();
  $dir=substr($url, 0, strrpos($url, '/')+1);

if(file_exists($dir))
  {
  if (file_exists($url))
  {
    $fil = fopen($url, 'r');
  $dat = fread($fil, filesize($url));
  fclose($fil);
  $fil = fopen($url, 'w');
  fwrite($fil, $dat+1);
  }

  else
  {
    $fil = fopen($url, 'w');
    fwrite($fil, 1);
    fclose($fil);
  }

4. Привязываем созданную метку к этому действию.
5. В шаблоне ленты или архива, куда будем выводить кол-во просмотров, пишем:
<script>
var aUrl = '%url%';
aUrl = '/stats' + aUrl.replace(".html", ".txt");
$(document).ready(function(){
$('#view').load(aUrl);
});
</script>

Как это работает (сам в ужасе  8)):
При просмотре полной новости, вызывается действие, которое считывает имя страницы (с учетом нумерации типа p_1 - оно всегда будет уникальным). Далее скрипт смотрит, есть ли в папке /stats/:

То есть при вызове со страницы /news/pervaya_novost_p1.html мы ищем папку /news/ и в ней файл pervaya_novost_p1.txt
Если папки или файла нет - создаем и пишем 1.
Если есть - открываем и пишем +1.

На странице вывода ленты или архива, где нужно вывести кол-во, размещаем нижний скрипт, который, подставляя УРЛ новости, получает из соответствующего txt-шника значение кол-ва просмотров. jQuery должен быть включен.

Писал впопыхах, если что - спрашивайте.
Название: Re: Костыль вывода количества просмотров новости в лент
Отправлено: vitalys от 09 Июнь 2017, 22:33:06
аль моменте, костыль работает только когда в ленте одна новость. Поправлю- выложу
Название: Re: Костыль вывода количества просмотров новости в лент
Отправлено: vitalys от 09 Июнь 2017, 23:48:02
В шаблоне ленты, или архива, блок "Content":
  <script>
    var pNum = 0;
pUrl = [];
  </script>
%rows%

 <script>
$(document).ready(function(){
for(i = 0; i < pUrl.length; i++) {
$('#view'+(i+1)).load(pUrl[i]);
   };
});      
 </script>

Блок "Rows"
<script>
var aUrl = '%url%';
pNum++;
aUrl = '/stats' + aUrl.replace(".html", ".txt");
pUrl.push(aUrl);
</script>

<script>
document.write('<span id="view'+pNum+'"></span>');
</script>