Habe selber etwas gebaut. Den Button dazu habe ich im BackEnd eingebaut, den kann man sich natürlich auch
in einer Cron Job Routine einbauen.
TEIL 1 - Zusatzspalte für catalogitemhitsfield
system/modules/catalogitemhitsfield/config/database.sql
PHP-Code:
CREATE TABLE `tl_catalog_hitcounter` (
-- id for this entry
`id` int(10) unsigned NOT NULL auto_increment,
-- id of the catalog
`cat_id` int(10) unsigned NOT NULL default '0',
-- id of the item in the catalog
`item_id` int(10) unsigned NOT NULL default '0',
-- ip where this hit originated from
`ip` varchar(255) NOT NULL default '',
-- time when this hit occured
`time` int(10) unsigned NOT NULL default '0',
-- all hits
`cache` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM;
TEIL 2 - Button einbauen (BackEnd)
PHP-Code:
<form id="reinigung" class="tl_form" method="post" action="<? PHP_SELF ?>">
<input type="hidden" value="reinigung" name="FORM_SUBMIT">
<input type="hidden" name="REQUEST_TOKEN" value="<?php echo REQUEST_TOKEN; ?>" />
<input name="reinigung" type="hidden" value="1" />
<table style="border-bottom: 3px dotted #AAAAAA;">
<tr>
<td style="width:70%;background:#eeeeee;">Datenbank reinigen</td>
<td ><input name="klick" type="submit" value="ausführen" /></td>
</tr>
</table>
</form>
TEIL 3 - PHPcode zur Ausführung
PHP-Code:
<?php
if ($this->Input->post('FORM_SUBMIT') == 'reinigung'){
if($this->Input->post('reinigung') == 1 ){
$this->import('Database');
$date = new DateTime();
$date = $date->getTimestamp();
$archivzeit = $date - 2592000; // heute minus 30 tage,dann wird archiviert
$objCat = $this->Database->prepare("SELECT id FROM tl_catalog_types")->execute();
while ($objCat->next()){
$nextcat = $objCat->id;
$objNext = $this->Database->prepare("SELECT item_id, COUNT(*) as anzahl FROM tl_catalog_hitcounter WHERE cat_id=? AND cache=? AND time<? GROUP BY item_id")->execute($nextcat,'',$archivzeit);
$this->Database->prepare("DELETE FROM tl_catalog_hitcounter WHERE cat_id=? AND cache=? AND time<? ")->execute($nextcat,'',$archivzeit);//alle archivierten löschen
while ($objNext->next()){
$objExist = $this->Database->prepare("SELECT id, cache FROM tl_catalog_hitcounter WHERE item_id=? AND cache!=? " )->limit(1)->execute($objNext->item_id,'');
if($objExist->numRows){// Eintrag mit Cache wenn er existiert
$neuwert = $objExist->cache + $objNext->anzahl;
$this->Database->prepare("UPDATE tl_catalog_hitcounter SET cache = ? AND time = ? WHERE id = ? ")->execute($neuwert,$date, $objExist->id);
}else{//sonst neuen erstellen
$arrNewData['id'] = 0;
$arrNewData['cat_id'] = $nextcat;
$arrNewData['item_id'] = $objNext->item_id;
$arrNewData['ip'] = '';
$arrNewData['time'] = $date;
$arrNewData['cache'] = $objNext->anzahl;
$this->Database->prepare("INSERT INTO tl_catalog_hitcounter %s")->set($arrNewData)->execute();
}
}
}
}
}?>
TEIL 4 - Counter anpassen für die Ausgabe
OH GOTT, ja super... alles umsonst ich seh gerade das die Hitcounter Einträge nur obligatorisch wegen der IP verifizierung existieren. Die werden ja schon im Catalog Item selbst gespeichert
grrrrrrrrr
Egal, den Code brauch ich trotzdem für andere Rating Module ^^
Lesezeichen