Новые сообщения · Участники · Правила форума · Поиск
Страница 1 из 41234»
Модератор форума: z-17, Anarki 
Форум о uCoz и Web » Система uCoz » Скрипты для uCoz сайта » Счетчик загрузок для каталога файлов (Заставляем счетчик учитывать ссылки на файловики в $MESSAGE$)
Счетчик загрузок для каталога файлов
SleepWalkerДата: Суббота, 16.04.2011, 17:00 | Сообщение # 1
Admin
Сообщений: 5493
Репутация: 487
Социальная репутация:

Статус: Offline
Счетчик загрузок для каталога файлов

В общем смутили меня нули в счетчиках загрузки, после того как Virtual подобавлял файлов на udf. В принципе это довольно частое явление, что в материале выкладывают ссылки на несколько файлообменников, что бы посетители могли выбрать тот, который им больше нравится. Но вот беда, юкоз то предоставляет нам в распоряжение только одно поле, по которому учитываются загрузки с удаленных серверов. Потому ссылки приходится писать в тело материала. Вот я и решил написать простенький скриптик, который будет учитывать количество загрузок по всем ссылкам на файлообменники, которые написаны в пределах определенного блока.

Скрипт просто посылает запрос на адрес "адрес_материала-20", что на юкозе отвечает за ссылку на скачу с удаленного сервера. Юкоз по этому адресу возвращает ошибку (так как файла на скачку нету), но счетчик скачек при этом срабатывает. Единственный момент, что этот скрипт не срабатывает, при переходе по ссылке через контекстное меню (так как в этом случае не произойдет события клика по ссылке). Ну что ж, прийдется с этим смирится. Думаю не так много людей будет переходить по ссылке с помощью правой кнопки мишки. В общем хватит лирики, приступим к установке.

Установка скрипта
Вся установка производится в шаблоне "Страница материала и комментариев к нему". Для начала поместим код $MESSAGE$ в блок, в котором будет происходить поиск ссылок:
Code
<div id="files">$MESSAGE$</div>

Теперь после этого кода добавим сам скрипт:
Code

<script type="text/javascript">
var messageContainer = document.getElementById('files');
//Адреса файловиков
var sites = new Array('depositfiles', 'letitbit', 'vip-file', 'turbobit');

var links = messageContainer.getElementsByTagName('a');

for (var i = 0; i < links.length; i++) {
    for (var j = 0; j < sites.length; j++) {
    if (links[i].href.indexOf(sites[j]) != -1 || links[i].title.indexOf(sites[j]) != -1) {
    links[i].onclick = load_count;
    }
    }
}
function load_count(){
    var counterLoc = location.pathname + '-20';
    ajax(counterLoc);
}

function ajax(url){
    var xmlhttp = false;
    try {
    xmlhttp = new XMLHttpRequest();
    }    
    catch (trymicrosoft) {
    try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }    
    catch (othermicrosoft) {
    try {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }    
    catch (failed) {
    xmlhttp = false;
    }
    }
    }
    xmlhttp.open("GET", url, true);
    xmlhttp.send();
}
</script>

Здесь для отправки запросов я использовал свою функцию ajax (только урезал ее по максимуму). Если кто хочет, можете использовать аналогичную функцию jQuery (так как jQuery всеравно подключен к юкозу это сократит вес cкрипта). Код будет выглядеть так:


Теперь по поводу дополнительной настройки. Вам в этом скрипте может быть интересна следующая строка:
Code
var sites = new Array('depositfiles', 'letitbit', 'vip-file', 'turbobit');

Это массив со списком файловиков, точнее части адресов этих файловиков. Скрипт проверяет наличие этих строк в ссылках. Так, что если вам понадобится добавить еще пару файлообменников, просто допишите часть их доменов в эту строку.

P.S. Кстати можно было бы сделать немного другой вариант. Можно было бы создать страницу-шлюз. Потом с помощью скрипта подставить ссылку на эту страницу вместо ссылок на поисковики. И уже на странице-шлюзе делать необходимые запросы для счетчика. В таком случае счетчик работал бы и при использовании правой кнопки. Но мне кажется, что это слишком круто для такой мелочи.
Как установить кнопки социальных сетей?

Не поленитесь просмотреть весьма внушительный Список рабочих uCoz скриптов

Time Waits For No One
 
EstennyДата: Суббота, 16.04.2011, 19:10 | Сообщение # 2
Злой Принц
Сообщений: 3005
Репутация: 120
Социальная репутация:

Статус: Offline
Quote (SleepWalker)
аналогичную функцию jQuery

Тебе не лень было писать, ты же ненавидишь jQuery?

Quote (SleepWalker)
вес крипта

Опечатка.
 
SleepWalkerДата: Суббота, 16.04.2011, 23:20 | Сообщение # 3
Admin
Сообщений: 5493
Репутация: 487
Социальная репутация:

Статус: Offline
Estenny, Та там только одна функция jQuery. Для аякс запроса. Если учитывать, что тут jQuery всеравно подключен, то лучше в данном случае использовать его функцию. Правда у себя на сайте я всеравно свою функцию ajax использую, так как она у меня подключена в моем общем файле с скриптами.
Time Waits For No One
 
LOL8Дата: Воскресенье, 17.04.2011, 01:27 | Сообщение # 4
Лейтенант
Сообщений: 52
Репутация: -3
Социальная репутация:

Статус: Offline
Хороший скрипт) спасибо
 
funeralismaticДата: Воскресенье, 17.04.2011, 03:35 | Сообщение # 5
BANNHAMMER
Сообщений: 3249
Репутация: 237
Социальная репутация:

Статус: Hidden
SleepWalker, у меня остался один вопрос: куда скрипт пересылает запрос?
Estenny, тибе самаму ни надаела предераца к громатеке?

Правила форума :: Заработок для ВСЕХ
Это моё последнее предупреждение.
 
SleepWalkerДата: Понедельник, 18.04.2011, 13:00 | Сообщение # 6
Admin
Сообщений: 5493
Репутация: 487
Социальная репутация:

Статус: Offline
Quote (SleepWalker)
Скрипт просто посылает запрос на адрес "адрес_материала-20"

к примеру для материала:
http://udf.su/load....-0-1237
это будет такая ссылка: http://udf.su/load....1237-20

Time Waits For No One
 
UnShameДата: Вторник, 19.04.2011, 21:11 | Сообщение # 7
Генералиссимус
Сообщений: 1869
Репутация: 173
Социальная репутация:

Статус: Offline
а можно этот скрипт переделать для кнопки в шаблоне вида материалов?
чтобы <a onclick="*увеличивается счетчик скачек*" >Кнопка</a>?

Добавлено (19.04.2011, 21:11)
---------------------------------------------
Попытался сделать

Code
<script type="text/javascript">  

function load_count(){  
    var counterLoc = location.pathname + '-20';  
    ajax(counterLoc);  
}  

function ajax(url){  
    var xmlhttp = false;  
    try {  
    xmlhttp = new XMLHttpRequest();  
    }    
    catch (trymicrosoft) {  
    try {  
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");  
    }    
    catch (othermicrosoft) {  
    try {  
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");  
    }    
    catch (failed) {  
    xmlhttp = false;  
    }  
    }  
    }  
    xmlhttp.open("GET", url, true);  
    xmlhttp.send();  
}  
</script>

Code
<a onclick="load_count()" href="Ссылка на файл" >Кнопка</a>

Не работает(

Тот, кто удалит этот пост будет гореть в аду.
 
z-17Дата: Вторник, 19.04.2011, 21:21 | Сообщение # 8
Генералиссимус
Сообщений: 2233
Репутация: 117
Социальная репутация:

Статус: Offline
UnShame,
Quote (UnShame)
<a onclick="*увеличивается счетчик скачек*" >Кнопка</a>?

это не получится потому, что нужно где-то хранить переменную с кол-вом скачек. а хранить негде. js такую возможность не предоставляет.
ну php заюзать можно

мой блог
мои услуги в системе uCoz
все вопросы пишите на форуме, а не в ЛС. Так вам быстрее ответят.
 
SleepWalkerДата: Среда, 20.04.2011, 00:22 | Сообщение # 9
Admin
Сообщений: 5493
Репутация: 487
Социальная репутация:

Статус: Offline
FolloyAngel, до тебя не дошел смысл скрипта)

Quote
<a onclick="load_count()" >Кнопка</a>

Time Waits For No One
 
UnShameДата: Четверг, 21.04.2011, 12:41 | Сообщение # 10
Генералиссимус
Сообщений: 1869
Репутация: 173
Социальная репутация:

Статус: Offline
я же написал, что так не ра...
чорт
я же скрипт никуда не вставил facepalm
работает)

Добавлено (21.04.2011, 12:25)
---------------------------------------------
а, не в том дело
работает только на странице материала
можно как-то для вида материалов адаптировать?

Добавлено (21.04.2011, 12:38)
---------------------------------------------
так, сам разобрался:
Скрипт

Code
<script type="text/javascript">   

function load_count$ID$(){   
     var filepath$ID$ = 0;
     filepath$ID$ = '$ENTRY_URL$'
     var counterLoc$ID$ = filepath$ID$ + '-20';   
     ajax(counterLoc$ID$);   
}   

function ajax(url){   
     var xmlhttp = false;   
     try {   
     xmlhttp = new XMLHttpRequest();   
     }     
     catch (trymicrosoft) {   
     try {   
     xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");   
     }     
     catch (othermicrosoft) {   
     try {   
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");   
     }     
     catch (failed) {   
     xmlhttp = false;   
     }   
     }   
     }   
     xmlhttp.open("GET", url, true);   
     xmlhttp.send();   
}   
</script>

И тогда ссылка:
<a onclick="load_count$ID$()" >Кнопка</a>

Добавлено (21.04.2011, 12:41)
---------------------------------------------
спасибо за скрипт!

Тот, кто удалит этот пост будет гореть в аду.
 
SleepWalkerДата: Суббота, 23.04.2011, 11:56 | Сообщение # 11
Admin
Сообщений: 5493
Репутация: 487
Социальная репутация:

Статус: Offline
UnShame, ну в принципе первую функцию можно выводить в каждом виде материала, но функцию ajax размести вне вида материалов. То есть в шаблоне главной страницы каталога и т.д. Разместить можно где угодно.

или второй вариант перепиши код для вида материалов так:

Code
<script type="text/javascript">    
  function load_count$ID$(){    
      var filepath$ID$ = 0;  
      filepath$ID$ = '$ENTRY_URL$'  
      var counterLoc$ID$ = filepath$ID$ + '-20';    
      $.get(counterLoc$ID$);
  }    
</script>

Time Waits For No One
 
shabalДата: Воскресенье, 15.04.2012, 19:14 | Сообщение # 12
Сержант
Сообщений: 24
Репутация: 0
Социальная репутация:

Статус: Offline
Добрый день! Вопрос.
<!-- Счетчик загрузок для каталога файлов3 --> (jQuery версия).

Каталог файлов - Страница материала и комментариев к нему - куда здесь вставлять код? После какой записи или перед какой вставлять?

Я вместо <tr><td class="eText" colspan="2">$MESSAGE$</td></tr>
поставил код
<!-- Счетчик загрузок для каталога файлов -->
<div id="files">$MESSAGE$</div>
<!-- /Счетчик загрузок для каталога файлов -->

А в самом конце, перед
</body>

</html>
поставил сам скрипт: <!-- Счетчик загрузок для каталога файлов3 -->.......<!-- /Счетчик загрузок для каталога файлов3 -->
и не работает. Ставил скрипт сразу за кодом - на странице полной новости получается дублирование, один вид полной новости нормальный, а ниже та же новость в каком-то искажённом, размытом шаблоне. Подскажи, что не так. Спасибо!
 
SleepWalkerДата: Понедельник, 16.04.2012, 11:18 | Сообщение # 13
Admin
Сообщений: 5493
Репутация: 487
Социальная репутация:

Статус: Offline
вместо
Code
<tr><td class="eText" colspan="2">$MESSAGE$</td></tr>

ставь
Code
<tr><td class="eText" colspan="2" id="files">$MESSAGE$</td></tr>

Time Waits For No One
 
shabalДата: Понедельник, 16.04.2012, 12:54 | Сообщение # 14
Сержант
Сообщений: 24
Репутация: 0
Социальная репутация:

Статус: Offline
Спасибо за отклик!
Т.е. этот код, что даётся к скрипту, не надо <!-- Счетчик загрузок для каталога файлов -->
<div id="files">$MESSAGE$</div>
<!-- /Счетчик загрузок для каталога файлов --> ?

А вместо родного <tr><td class="eText" colspan="2">$MESSAGE$</td></tr>
поставить <tr><td class="eText" colspan="2" id="files">$MESSAGE$</td></tr> ?

А что с самим скриптом делать?

Оставлять там куда я его поставил?
 
SleepWalkerДата: Понедельник, 16.04.2012, 15:00 | Сообщение # 15
Admin
Сообщений: 5493
Репутация: 487
Социальная репутация:

Статус: Offline
shabal, оставить там где ты собирался, перед </body>
Time Waits For No One
 
Форум о uCoz и Web » Система uCoz » Скрипты для uCoz сайта » Счетчик загрузок для каталога файлов (Заставляем счетчик учитывать ссылки на файловики в $MESSAGE$)
Страница 1 из 41234»
Поиск: