JoomGallery - вывод рейтинга 10 просмотренных фото за сутки

Небольшие заметки о html, css, sql, php

Модератор: Valery

Правила форума
Гость видит 250 символов 1 сообщения
Аватара пользователя
Valery
Без группы
Без группы
Сообщения: 22325
На борту с: 07.02.2005 10:00
Награды: 5
Из: Тридевятое царство

Решено JoomGallery - вывод рейтинга 10 просмотренных фото за сутки

Сообщение Valery »

Список 10 фото, которые смотрели вчера чаще других. Для этого будет использоваться вкладка "Последние комментированные" - т.к. толку от нее нет вообще...
Образец в действии - Топ 12 фото просмотренных вчера

1. Хак - добавляем поле hits_2 в таблицу joomgallery:

Код: Выделить всё

ALTER TABLE `jos_joomgallery` ADD `hits_2` INT(11) NOT NULL DEFAULT '0' AFTER `hits`
2. Записываем в hits_2 текущие значения hits:

Код: Выделить всё

UPDATE jos_joomgallery SET jos_joomgallery.hits_2 = jos_joomgallery.hits
2а. На следующий день запросом выборки можем получить 12 результатов [hits]-[hits_2]:

Код: Выделить всё

SELECT  jos_joomgallery.id, jos_joomgallery.hits, jos_joomgallery.hits_2, jos_joomgallery.hits - jos_joomgallery.hits_2 AS RESULT
FROM jos_joomgallery
WHERE (jos_joomgallery.hits - jos_joomgallery.hits_2)>0
ORDER BY jos_joomgallery.hits - jos_joomgallery.hits_2 DESC
 LIMIT 12;
3. Хак - запрос изменит значение поля cmtdate по умолчанию на добавление текущей даты (при выполнении запроса):

Код: Выделить всё

ALTER TABLE `jos_joomgallery_comments` CHANGE `cmtdate` `cmtdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP; 
4. Очистка joomgallery_comments от предыдущих значений:

Код: Выделить всё

TRUNCATE TABLE `jos_joomgallery_comments`

Добавление 12 результатов в таблицу joomgallery_comments:

Код: Выделить всё

INSERT INTO jos_joomgallery_comments ( cmtpic, cmttext, published, approved ) SELECT jos_joomgallery.id AS _2, jos_joomgallery.hits - jos_joomgallery.hits_2 AS _1, 1 AS _4, 1 AS _5 FROM jos_joomgallery LEFT JOIN jos_joomgallery_comments ON jos_joomgallery.id = jos_joomgallery_comments.cmtpic WHERE (((jos_joomgallery.hits - jos_joomgallery.hits_2)>0)) ORDER BY jos_joomgallery.hits - jos_joomgallery.hits_2 DESC LIMIT 12
4а. Запрос для просмотра таблицы joomgallery_comments:

Код: Выделить всё

SELECT * FROM `jos_joomgallery_comments` WHERE 1
\language\ru-RUru-RU.com_joomgallery.ini

Код: Выделить всё

COM_JOOMGALLERY_TOPLIST_WROTE_AT="Просмотров за прошедшие сутки: %s"
COM_JOOMGALLERY_TOPLIST_LAST_COMMENTED_IMAGE="Топ %s фото просмотренных вчера"
Все это можно запихнуть в php запрос к БД и выполнять через Cron напр. в полночь.
Создав файл beer-count.php c таким содержаием:

Код: Выделить всё

<?php
define( '_JEXEC', 1 );
if ( file_exists( __DIR__ . '/defines.php' ) ) {
    include_once __DIR__ . '/defines.php';
}
if ( !defined( '_JDEFINES' ) ) {
    define( 'JPATH_BASE', __DIR__ );
    require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
//Инфа - http://www.vodkomotornik.ru/forum/viewtopic.php?t=6437

//Далее можем использовать API Joomla Framework
$db = JFactory::getDbo();
//$query = $db->getQuery( true )->select( '*' )->from( '#__joomgallery_comments' );//выводит

//1. Очистка таблицы _joomgallery_comments перед записью новых данных:
$db->setQuery('TRUNCATE TABLE #__joomgallery_comments')->execute();

// ожидание в течениe 1 сек.
sleep(1);

//Добавляем 12 строк cmttext = просмотров:
$db->setQuery('INSERT INTO #__joomgallery_comments ( cmtpic, cmttext, published, approved ) SELECT #__joomgallery.id AS _2, #__joomgallery.hits - #__joomgallery.hits_2 AS _1, 1 AS _4, 1 AS _5 FROM #__joomgallery LEFT JOIN #__joomgallery_comments ON #__joomgallery.id = #__joomgallery_comments.cmtpic WHERE (((#__joomgallery.hits - #__joomgallery.hits_2)>0)) ORDER BY #__joomgallery.hits - #__joomgallery.hits_2 DESC LIMIT 12')->execute();

// ожидание в течениe 1 сек.
sleep(1);

//3. Записать текущие значения hits в hits_2 для дальнейшего следующего подсчета через 24 часа:
//$sql = "UPDATE jos_joomgallery SET jos_joomgallery.hits_2 = jos_joomgallery.hits WHERE (jos_joomgallery.hits - jos_joomgallery.hits_2) > 0";

$db->setQuery('UPDATE #__joomgallery SET #__joomgallery.hits_2 = #__joomgallery.hits WHERE (#__joomgallery.hits - #__joomgallery.hits_2) > 1')->execute();

Пути прописаны для расположения файла в корне сайта, т.е. там, где Joomla.
По суше: велосипед, Соболь 4х4 самый западный и LR Defender 110.
Отдохнул – отчитайся, лучшее слово – дело.

Теги: