1909264228 发表于 2014-2-4 09:11:50

php标签云的实现代码

本帖最后由 1909264228 于 2014-2-4 09:15 编辑

今天在网上看到的看到的,大家觉得如何????


数据库中,存放文章的表中有“Tag”字段,用来存放标签。标签之间用“,”分隔。比如“PHP,VB,随笔”。
下面的实现代码,将标签从数据库中搜出来,并格式化处理,使其以出现的次数为依据显示出不同大小的文字连接。
其中的细节,不做解释了!
观念陈、方法笨、效率低的标签云的实现代码如下:
  复制代码 代码如下:  /**
* WNiaoBlog Tag Template ShowTag
*
* @package WNiaoBlog
*
* @subpackage Tag
*/
//Connect the database
//include('../include/config.php');
/**
* CountTag() - Statistics labels appear the number,and the data to be stored in the two array
*
* GetTag() - Access the Tag's Labels from the database
*/
function CountTag($String){
$TagString = $String;
//echo $TagString."
";
$Tags = explode(",",$TagString);
$n = 1;
$i = 0;
$Continue = TRUE;
//echo $Tags."
";
//in case no-label's article
while($Tags[$n] OR $Tags[++$n] OR $Tags[++$n] ){
$EachTag = $Tags[$n++];
//echo $EachTag."
";
$Continue = TRUE;
for($i=0;$Continue;$i++){
if( $EachTagStr[$i] ) {
if( $EachTagStr[$i] == $EachTag ){
$EachTagStr[$i]++;
$Continue = FALSE;
}
else {
if( $EachTagStr[$i+1] ) $Continue = TRUE;
else {
$EachTagStr[$i+1] = $EachTag;
$EachTagStr[$i+1] = 1;
$Continue = FALSE;
}
}
} else { //initialize the array $EachTagStr[][]
$EachTagStr[$i] = $EachTag;
$EachTagStr[$i] = 1;
$Continue = FALSE;
}
}
}
return $EachTagStr;
}
function ShowTag($Row,$ablink){
$i = 0;
while($Row[$i]){
$EachTag = $Row[$i];
$EachCount = $Row[$i];
$Size = SetSize($EachCount);
echo " < a style='color:BLUE ; font-size:".$Size." ' onMouseOver=lor='#900000' onMouseOut=lor='BLUE' .$ablink."tag?tag=".$EachTag."' target='_self' > ".$EachTag."(".$EachCount.")"." ";
$i++;
}
}
function GetTag(){
$QuerySet = mysql_query("select * from article");
while($Row = mysql_fetch_array($QuerySet)){
$Tag = $Row['tag'];
$TagString = $TagString.",".$Tag;
}
return $TagString;
}
function SetSize($Size){
$Size += 10;
if($Size > 30)
$Size = 30;
return $Size;
}
//Go
echo "
";
echo "标签云";
$String = GetTag();
$Row = CountTag($String);
ShowTag($Row,$ablink);
echo "
";
?>






1909264228 发表于 2014-2-4 09:36:38


数据库中,存放文章的表中有“Tag”字段,用来存放标签。标签之间用“,”分隔。比如“PHP,VB,随笔”。
下面的实现代码,将标签从数据库中搜出来,并格式化处理,使其以出现的次数为依据显示出不同大小的文字连接。
其中的细节,不做解释了!
观念陈、方法笨、效率低的标签云的实现代码如下:
  复制代码 代码如下:

<?

/**
* Project:   EXCMS: the PHP content management system.
* File:      tag.php
* A product of SINOICAN Inc.
* EXCMS is a ten million data-level,high speed,human-based content management system.
* EX is Excellence & Express & Exceed & Expert.
* For questions, help, comments, discussion, please join the
* EXCMS mailing list. Send a blank e-mail to
* excms@sinoican.com
* or join the EXCMS forum
* www.excms.cn/forum
* @link http://www.excms.cn/
* @copyright Copyright (c) 2007-2009 SINOICAN Inc.
* @license http://www.excms.cn/licenses/LICENSE-1.0
* @category EXCMS
* @author hukuizhi
* @version $Rev: 58 $
*/
/* $Id: tag.php 58 2009-11-03 02:31:37Z hukuizhi $ */
/**
* TAG标签封面及列表程序
*/
//加载系统配置文件,移动本程序时,请修改配置文件路径
require_once ('configuration/inc/common.inc.php');
//获取页面参数
$name = trim($_GET['name']);
$type = trim($_GET['type']);
$_PAGE['pageon'] = (int)$_GET['page'];
//当前位置
$split_str = " {$EXCMS['list_symbol']} ";
$_PAGE['position'] = "<a href='{$EXCMS['domain']}'>{$EXCMS['home_link_txt']}</a>";
//定义页面模板
$tpl = 'tag.html';
if ($name != '') { //显示tag列表
    excms_import('EXCMS.content.Tag');
    $tag = new Tag();
    if($type == 'pinyin'){
      $name = iconv('UTF-8', 'GBK', $name);

    }

    $_PAGE['thisTag'] = $tag->getByName($name);

    if(!(is_array($_PAGE['thisTag']) && count($_PAGE['thisTag']))){

      echo "不存在的Tag:$name";exit();

    }

    //增加点击量
    $tag->clickUp($_PAGE['thisTag']['tagid']);

    $_PAGE['type'] = $type;

    if($type == 'pinyin'){

      $tagContentIds = $tag->getContentIdsByName($name);
      $tagIdArray = explode(',',$tagContentIds);

      if(count($tagIdArray)<6){

            rsort($tagIdArray);

            excms_import('EXCMS.content.Content');

            $content = new Content();

            excms_import('EXCMS.update.ContentFunction');

            $content_array = $content->getById($tagIdArray);

            $url = ContentFunction::getContentUrl($content_array);

            header("HTTP/1.1 301 Moved Permanently");

            header("Location:".$url);

            exit();

      }

    }

    unset($tag);

    $_PAGE['name'] = $name;

    //当前位置

    $_PAGE['position'] .= $split_str . $name;

    $tpl = 'taglist.html';
}

//显示

excms_func_templateDisplay($tpl);
?>


1909264228 发表于 2014-2-4 16:23:52

本帖最后由 1909264228 于 2014-2-4 23:32 编辑

PHP热门标签云 如何实现标签云的显示 要求是显示在5天之内点击数最高的10个热门标签不是总点击数最高的10个 而是5天之内的点击数最高的10个 总点击数另有用处 如何实现

PHP+mysql 数据库应该如何设置算法如何写?比如有100个标签 我要求 求出在5天之内这些标签里点击数最高的10条出来 不是总点击数啊 是这5天内的总点击数最高的10条

需要两个表
1,标签表
id(int 10 auto_increment),tag(varchar 50),click(mediumint 6)
2,点击表
id(int 10 auto_increment),tid(int 10),clicktime(int 10)

tid关联标签表id
clicktime 放的是时间戳,php中time()函数返回的整数就是,如:1272249242

$sql="select count(C.id) as cid,tag,tid from 点击表 C
left join 标签表 T on T.id=C.tid
where clicktime>五天前的时间戳
group by tid
order by cid desc
limit 10";

1909264228 发表于 2014-2-4 16:30:47

PHP创建标签云

function getCloud( $data = array(), $minFontSize = 12, $maxFontSize = 30 )
{
$minimumCount = min( array_values( $data ) );
$maximumCount = max( array_values( $data ) );
$spread = $maximumCount – $minimumCount;
$cloudHTML = ”;
$cloudTags = array();

$spread == 0 && $spread = 1;

foreach( $data as $tag => $count )
{
$size = $minFontSize + ( $count – $minimumCount )
* ( $maxFontSize – $minFontSize ) / $spread;
$cloudTags[] = ‘<a style=”font-size: ‘ . floor( $size ) . ‘px’
. ‘” href=”#” title=”\” . $tag .
‘\’ returned a count of ‘ . $count . ‘”>’
. htmlspecialchars( stripslashes( $tag ) ) . ‘</a>’;
}

return join( “\n”, $cloudTags ) . “\n”;
}
/**************************
**** Sample usage ***/
$arr = Array(‘Actionscript’ => 35, ‘Adobe’ => 22, ‘Array’ => 44, ‘Background’ => 43,
‘Blur’ => 18, ‘Canvas’ => 33, ‘Class’ => 15, ‘Color Palette’ => 11, ‘Crop’ => 42,
‘Delimiter’ => 13, ‘Depth’ => 34, ‘Design’ => 8, ‘Encode’ => 12, ‘Encryption’ => 30,
‘Extract’ => 28, ‘Filters’ => 42);
echo getCloud($arr, 12, 36);

1909264228 发表于 2014-2-4 23:38:57

本帖最后由 1909264228 于 2014-2-4 23:44 编辑

php mysql实现标签云的实例代码    现在php标签云效果很流行的,这里分享一段php代码,构造出一段奇妙的php 标签云效果。有需要的朋友参考下吧。
php与mysql结合实现的标签云效果,完整代码,如下:
<?php /***
* php与mysql实现的标签云效果
*/

$db_host = "localhost";
$db_user = "db_user";
$db_pass = "pass";
$db_name = "db_name";   
mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
mysql_select_db($db_name);   
function tag_info() {   
$result = mysql_query("SELECT * FROM tags GROUP BY tag ORDER BY count DESC");   
while($row = mysql_fetch_array($result)) {      
   $arr[$row['tag']] = $row['count'];   }   
ksort($arr);   
return $arr;}   
function tag_cloud() {      
$min_size = 10;   
$max_size = 30;      
$tags = tag_info();      
$minimum_count = min(array_values($tags));   
$maximum_count = max(array_values($tags));   
$spread = $maximum_count - $minimum_count;      
if($spread == 0) {         $spread = 1;   }
    $cloud_html = '';   
$cloud_tags = array(); // create an array to hold tag code   
foreach ($tags as $tag => $count) {         
$size = $min_size + ($count - $minimum_count)* ($max_size - $min_size) / $spread;         
$cloud_tags[] = '<a style="font-size: '. floor($size) . 'px'.'" class="tag_cloud" target="_blank" href="http://www.jbxue.com/index.php?s=' . $tag. '" title="\'' . $tag. '\' returned a count of ' . $count . '">'. htmlspecialchars(stripslashes($tag)) . '</a>';   }      
$cloud_html = join("\n", $cloud_tags) . "\n";
return $cloud_html; } ?>   

2,css样式表 代码示例:
<style type="text/css">
.tag_cloud {padding: 3px; text-decoration: none;font-family: verdana;}
.tag_cloud:link{ color: #FF66CC; } .tag_cloud:visited { color: #9900FF; }
.tag_cloud:hover { color: #FF66CC; background: #000000; }
.tag_cloud:active { color: #6699FF; background: #000000; } </style>

3,显示标签云的区域 代码示例:<div id="wrapper">   <?php print tag_cloud(); ?> </div>

1909264228 发表于 2014-2-4 23:50:29

php中如何将日志和标签一起写入MYSQL数据库
最近遇到一个问题,比如你要发表一篇文章,而文章可以带有标签:
mysql数据库中放有两个表:
日志信息表:d_blog
blog_id mediumint(8)   UNSIGNED nuo nullauto_increment               
content longtext gbk_chinese_ci
标签表:
d_tag:
tag_id mediumint(8)   UNSIGNED 否auto_increment               
tagname varchar(60) gbk_chinese_ci否               
blog_id text   not null
就是在插入日志的同时是如何把标签插入数据库中,
当然插入数据中是简单,关键是d_tag中blog_id是如何被写入数据库的,blog_id是自动增加,还没有被创建,默认为Null,那么在d_tag就确定不了一个标签中到底有什么日志了,因为d_tag中gid是个空白,不知道哪位大侠说说,新手学php,啦,谢谢哈



你可以再标签表中和日志信息表中添加一个名字相同的字段,这样就可以把这两个表给关联起来了。



1909264228 发表于 2014-2-5 00:08:38

PHP+MYSQL如何插入记录到数据库

INSERT INTO语句的作用是:向一个数据库的表中插入一条新的记录。 向一个数据库表中插入数据 INSERT INTO的作用是:向一个数据库的表中插入一条新的记录。 语法 INSERT INTO table_name VALUES (value1, value2,....) 你可以在指定的列中插入数据,具体如下
“INSERT INTO”语句的作用是:向一个数据库的表中插入一条新的记录。
向一个数据库表中插入数据
“INSERT INTO”的作用是:向一个数据库的表中插入一条新的记录。
语法
INSERT INTO table_name
VALUES (value1, value2,....)
你可以在指定的列中插入数据,具体如下:
INSERT INTO table_name (column1, column2,...)
VALUES (value1, value2,....)
注意:SQL语句是“字母大小写不敏感”的语句(它不区分字母的大小写),即:“INSERT INTO”和“insert into”是一样的。
在PHP内创建数据库,我们需要在mysql_query()函数内使用上述语句。这个函数是用来发送MySQL数据库连接建立的请求和指令的。
案例
在前一章里,我们建立了一张名为“Person”的表,其中包含三个纵列:"Firstname", "Lastname" 和 "Age"。在下面的案例当中,我们还会用到同一张表,并在其中加入两条新的记录:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}mysql_select_db("my_db", $con);mysql_query("INSERT INTO person (FirstName, LastName, Age)
VALUES ('Peter', 'Griffin', '35')");mysql_query("INSERT INTO person (FirstName, LastName, Age)
VALUES ('Glenn', 'Quagmire', '33')");mysql_close($con);
?>
把一张表中的数据插入数据库中
现在,我们将建立一个HTML表单;通过它我们可以向“Person”表中加入新的记录。
下面演示这个HTML表单:
<html>
<body><form action="insert.php" method="post">
Firstname: <input type="text" name="firstname" />
Lastname: <input type="text" name="lastname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form></body>
</html>
在上述案例中,当一个用户点击HTML表单中的“提交submit”按钮后,表单中的数据会发送到“insert.php”。“insert.php”文件与数据库建立连接,并通过PHP $_POST变量获取表单中的数据;此时,mysql_query()函数执行“INSERT INTO”语句,这样,一条新的记录就被添加到数据库的表单当中了。
下面试“insert.php”页面的代码:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}mysql_select_db("my_db", $con);$sql="INSERT INTO person (FirstName, LastName, Age)
VALUES
('$_POST','$_POST','$_POST')";if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";mysql_close($con)
?>

1909264228 发表于 2014-2-5 00:15:59

blog中的tag用PHP怎么实现
文章表(文章ID[,...])
标签表(标签ID, 标签名)
关系表(关系ID, 文章ID, 标签ID)
以新增一篇文章为例,指定两个tag,约定以半角逗号隔开:A,B。其中,A已存在标签表,B不存在。
[*][*]$tags = explode(,’, $_POST[\'article_tag\']);[*]/*{插入文章}*/[*]$article_id = mysql_insert_id();[*]foreach ($tags as $tag) {[*]? ? if (/*{标签已存在}*/) {[*]? ?? ???$tag_id = /*{取标签ID}*/;[*]? ? } else {[*]? ?? ???/*{新增标签}*/[*]? ?? ???$tag_id = mysql_insert_id();[*]? ? }[*]? ? /*插入*/[*]}[*]

1909264228 发表于 2014-2-5 00:24:13

这样:TAG就是一篇文章的关键字。说什么分类也可以这么说,无非就是归类作用。

什么自增分类。发布文章时去判断吧,存在已有tag返回tagid,不存在,创建后再返回tagid

一般是设置成两个表,一个表记录tag信息表,一个表记录存在这个TAG的文章ID表

查询的时候,传入tagid 去查第二个表,就查出这个tag 下的相关文章了。

shan199 发表于 2014-2-9 21:35:50

留着学习学习。。
页: [1] 2
查看完整版本: php标签云的实现代码