widgin

Рейтинг
41
Регистрация
14.11.2012
eklips007:
Из ифрейма данные вы не получите - политика безопасности браузеров не даст этого сделать. Лучшее решение - с помощью CURL вытянуть тайтл и потом уже грузить сам фрейм

А подскажите как это сделать?

imagine:
я вам предложил нормальное решение, которое реализуется за 15 минут, а вы зачем-то прикручиваете чужую граблю

Спасибо за предложное вами решение, но меня более чем устраивает то, что сделал silicoid. Я на такие возможности даже и не надеялся. Плюсы этого способа очевидны. Во-первых, это настраиваемый диапазон кол-во скачиваний, значение которого будет видеть пользователь впервые попавший на страницу скачивания. Во-вторых, это его увлечение при последующих посещениях. Что будет выглядеть вполне естественным. И кол-во, на которое нужно увеличивать скачивания за сутки, также можно под себя настроить. А ограниченный размер куков (в 64 файла) не такой уж и минус, по крайней мере для меня.

Дикий пионер:
Не забывайте, что общий размер куков для сайта ограничен и еси пользователь будет много ходить по страницам - то размер куки будет расти и со временем старые данные потеряются

А на сколько примерно страниц их может хватить? В любом случае я думаю это не страшно. Ведь пользователь вряд ли целенаправленно что-либо будет запоминать, и после нескольких просмотренных страниц, он уже и не вспомнить, сколько скачиваний было на первой. А вот если он зашел из-за одного файла и при простом обновлении страницы или повторном запуске браузера (через короткий промежуток времени) увидел меньшее значение (или значительно большее), то это кончено вызовет у него сомнение. Но этот вопрос уже помог решить silicoid, так что все отлично. Все уже функционирует, и завтра можно будет делать выводы об изменении конверсии.

silicoid:
widgin, а можно примеры юрлов?

А еще лучше постучите в лс. надо не живом сайте посмотреть

Написал в лс.

silicoid:
подрихтовал
изменения минимальны. Добавил привязку к урлу.

1 надо изменить вверху три строчки, где if
		

// местонахождение сервера
// можно не указывать, если в настройках сервера это есть
date_default_timezone_set ('Europe/Moscow');

$reqiest_url = parse_url($_SERVER['REQUEST_URI']); /*добавлено */
$path = base64_encode($reqiest_url['path']); /* добавлено*/

if (empty($_COOKIE["dCount".$path])) /*изменено */
{


изменить строку получения данных

$dCount = unserialize(base64_decode($_COOKIE["dCount".$path]));

которая сразу под $max_dpd = 86400;


и внизу исправить строчку в явакскрипте

document.cookie = "dCount<?php print $path; ?>=<?php print $cookie; ?>; expires=<?php print $expires; ?>";


это при условии, что используется чпу. если используется для навигации стандартные гет запросы, то надо вместо $reqiest_url['path'] написать $reqiest_url['query']

тут правда кол-во кук будет пропорционально кол-ву открытых страниц, но зато должно выводиться как надо

К сожалению, теперь при каждом обновлении страницы генерируется новое значение кол-во скачиваний.

Вот если нужно, этот php файл https://yadi.sk/d/EHl7f0cAprQHv

Может можно привязывать кол-во скачиваний к какому-нибудь уникальному значению в этом файле вывода страницы скачивания.

Разобрался. Все отлично работает! Еще раз огромнейшее вам спасибо за помощь :)

---------- Добавлено 02.03.2016 в 18:17 ----------

silicoid:
хороший вопрос. Откровенно говоря даже не знаю.

надо спросить у тех, кто знаком с шаблонизатором.

возможно, если заменить <?php код ?> На {{ код }} то будет работать

Обнаружил один неприятный момент. Оказывается это фейковое значение генерируется одно на все файлы. Видимо из-за того что в движке за вывод странцы скачивания файла отвечает один файл files.blade.php в который и помещается весь ваш код. И это несмотря на то что у каждого файла свой url страницы скачивания. То есть пользователь загрузив страницу скачивания любого из загруженных мною на сайт файла, всегда увидит одно и тоже значение (конечно с учетом приплюсованных за время скачиваний). Можно ли как-то сделать так, что бы пользователю в куки записывались значения для каждого url'а отдельно? Для того чтобы у каждого файла он видел разное кол-во скачиваний, а не одно на всех.

silicoid:
Вот такой вот хитрый счетчик вам написал
генерит рандомное кол-во скачиваний
но чтобы юзверь не прочухал записывает ему в куку кол-во скачиваний, а потом при каждом его заходе добавляет какое-то кол-во скачиваний еще.

кол-во скачиваний привязано к времеи отсутствия пользователя
например если он отсутствовал два дня, а у вас стоит итератор 500 скачиваний в день, то кол-во "качек" может увеличиться на 0-1000
если 2 часа, то на 0-11



<!-- begin smart counter -->
<?php
// местонахождение сервера
// можно не указывать, если в настройках сервера это есть
date_default_timezone_set ('Europe/Moscow');

if (empty($_COOKIE["dCount"]))
{
// если это новопользователь
// генерим куку с рандомным значением от 200 до 1000 и сохраням у пользователья
// чтобы небыло такого, что при каждом релоаде новое значение

$dCount = array(
'downloads' => ceil(rand(200,1000)), // кука
'time' => time() // дата создания
);
$cookie = base64_encode(serialize($dCount));
$expires = date("m/d/Y H:i", strtotime('+365 days') ); // время жизни куки в днях
}
else
{
// кука есть, то значит человек заходил в течении месяца
// показываем ему другое рандомное значение, которое больше предыдущего

// генерим новую куку с учетом кол-ва времени, который пользователь отсутствовал
$max_dpd = 86400; //максимальное кол-во скачиваний в день 86400 = макс 1 скачивание в секунду, но кмк надо ставить реальную цифру, например 96
$dCount = unserialize(base64_decode($_COOKIE["dCount"]));
$dayLeft = (time() - $dCount['time'])/(60*60*24); // кол-во дней прошедших с момента последней "загрузки"
$downloads = $dCount['downloads']; // сохраненное кол-во "загрузок".
$delta = $dayLeft * $max_dpd; // максимальное число, на которое может увеличиться счетчик

$dCount = array(
'downloads' => ceil(rand($downloads,$downloads + $delta)), // кука
'time' => time() // дата обновления
);

$cookie = base64_encode(serialize($dCount));
$expires = date("m/d/Y H:i", strtotime('+365 days') ); // время жизни куки в днях
}

print 'Скачиваний: '. $dCount['downloads'];

?>

<!-- так как мы не можем использовать php функцию setcookie, т.к она должна вызываться до начала вывода данных в браузер, то задействуем вот такой финт ушами -->
<script type="text/javascript" >
document.cookie = "dCount=<?php print $cookie; ?>; expires=<?php print $expires; ?>";
</script>

<!-- //end smart counter -->

Ничего себе, спасибо вам огромное. Сейчас попробую использовать код. Мне только не совсем понятно как полученное число вывести в элемент списка <li>, вместо {{ $data['fileDownloadCounter'] }} вставить весь код? Подскажите, пожалуйста.

imagine:
Возьмите некоторую постоянную базу, например название файла ( скажем количество букв ), умножьте на некоторую постоянную и прибавьте сколько-то минут от времени его добавления.

Т.е. например файл: "Кинофильм Выживший", добавленный 20 февраля 2016
Будет:
Длина строки: 18
Некоторая константа: 50
Количество прошедших минут: 39600

Итого: 18 * 50 + 39600 = 40500
Будет увеличиваться во времени и стартанет не с нуля, и рандом не нужен.

Я сам такое написать точно не смогу. Да и должен быть способ попроще. Возможно на php не так уж и сложно пишется генерация чисел в определенном диапазоне, хотя может я и ошибаюсь. Кто бы подсказал как это сделать.

danforth:
{{ round($data['fileDownloadCounter'] * 4.5167)}}
Умножайте на какое-то дробное число реальное количество скачиваний и потом округляйте. Если будете умножать на целое - будет не реалистично (всегда кратное).

Спасибо, но наверно не вариант опираться на реальные скачивания. Ведь после загрузки каждый файл не сразу набирает реальные скачивания. Кому как повезет) И соответственно у части файлов скачиваний 0. Да и мне бы генерацию значений в диапазоне от 100 до 500.

1 2345 6
Всего: 60