Revision [1896]

This is an old revision of GmBowenCounter made by GmBowen on 2004-10-18 03:04:37.

 

Below are the changes needed to create an action that allows the number of hits on a page to be roughly counted (it doesn't increment if it's your own page, only for the pages of others). If you want it to keep a count, but without showing the number (so people don't have the urge to "up" the number on you), you can set the parameter show="off" or show="no". It works pretty well overall. Of course, it doesn't "count" if the action isn't on the page, but I thought for "help" pages etc that aren't open for editing it might be pretty useful. Usually we put lots of work into different things in a wiki, I thought it'd be interesting to be able to gauge the use of the different parts. Hope you find it useful. -- Mike (aka GmBowen) [the only thing I can think might be useful to add, is if the you could add the parameter ignore="name1, name2, name3"...but I had no idea how to parse a list like that and include a comparison of to the current user]


the _pages table has to have the following field added....

`hits` int(50) NOT NULL default '0'

and the counter.php code (save as a file in the action directory)....
<?
$thispage=$this->GetPageTag();
// Get hit count
$result2 = mysql_query( "SELECT hits FROM ".$this->config["table_prefix"]."pages WHERE tag='$thispage' AND latest='Y'" );
$row2 = mysql_fetch_array($result2);
$hit_count1 = $row2[hits];
// Count is incremented if not your own page
if ($this->GetUserName() != $this->GetPageOwner($tag))
{
// End Get hit Count   Start adding hits
$hit_count2 = $hit_count1 + 1;
// End adding hits   Start Update Hit
$sql = "UPDATE `".$this->config["table_prefix"]."pages` SET `hits` = '$hit_count2' WHERE tag='$thispage' AND latest='Y'";
// $sql .= " WHERE `ref` = $ref";
mysql_query($sql) or die("Unable to process query: " . mysql_error());
}
// End Update Hit

// parameter show="off" or "no" being checked for
$show = strtolower($show);
if ($show != 'off' && $show !='no')
{
// Start output of counter
$result4 = mysql_query("SELECT hits FROM ".$this->config["table_prefix"]."pages WHERE tag='$thispage' AND latest='Y'");
$row4 = mysql_fetch_array($result4);
$hit_count3 = $row4['hits'];
echo '<table cellpadding="0" cellspacing="0">';
echo '<tr><td><font face="verdana" size="2"><b>Total Hits:</b></font></td><td><font face="verdana" size="2">&nbsp;';
print "$hit_count3";
echo '</font></td></tr></table>';
}
// End Output of counter
?>


If you only use the above code the counter will re-set to zero every time you edit a page (well, 2 actually...I said it was a "rough" count didn't I??). If you don't want that to happen you have to do the following changes as well....

In the handlers/edit.php file I changed the line (around line 35).....

	$this->SavePage($this->tag, $body, $note);

to 

	$this->SavePage($this->tag, $body, $note, $this->page['hits']);

AND I learned (through seemingly bizarre but now understandable errors cropping up) that the order of the 
variables is important relative to the SavePage function (see below....which is why $this->page['hits'] doesn't follow 
the $comment_on variable in the list of variables in the function but precedes it)

In the WAKKA.PHP file in the wiki root.....

Around line 235, in the SavePage function, the line has to be changed to

	function SavePage($tag, $body, $note, $pagehits, $comment_on = "")

note that $pagehits has to PRECEDE the $comment_on variable

a few lines down, the following line has to be added....

	"hits = '".mysql_escape_string($pagehits)."', ".

I added it after the line....

	"user = '".mysql_escape_string($user)."', ".

And that's it folks....it should work pretty well. 
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki