用php实现类似淘宝,拍拍,易趣的最近浏览商品的功能模型代码

bigluckyfox 2008-09-03 11:35:36
最近在做一个项目,要用到类似淘宝,拍拍,易趣的最近浏览商品的功能,在网络上遍寻不及,遂找出一ASP代码用PHP自行改写,得以下片段,先发上来和大家共享。此代码片段只包含cookie写入部分,读出处理的部分大家可以自行编写。最先跟帖提出建议的给以加分。

<?php
/*
RecentlyGoods File
Urchin Studio FoxCMS
Version: 1.1.6
Author: luckyfox (xhx@163.net)
Copyright: Urchin Studio (www.itocean.net)
Last Modified: 2008-9-3

*/

//TempNum 显示临时记录数

$TempNum=5;

//setcookie("RecentlyGoods", "12,31,90,39");

//RecentlyGoods 最近商品RecentlyGoods临时变量

if (isset($_COOKIE['RecentlyGoods']))
{
$RecentlyGoods=$_COOKIE['RecentlyGoods'];
$RecentlyGoodsArray=explode(",", $RecentlyGoods);
$RecentlyGoodsNum=count($RecentlyGoodsArray); //RecentlyGoodsNum 当前存储的变量个数

}

if($_GET['Id']!="")
{

$Id=$_GET['Id']; //ID 为得到请求的字符


//如果存在了,则将之前的删除,用最新的在尾部追加

if (strstr($RecentlyGoods, $Id))
{
//echo "已经存在,则不写入COOKIES<hr />";
}
else
{
if($RecentlyGoodsNum<$TempNum) //如果COOKIES中的元素小于指定的大小,则直接进行输入COOKIES
{
if($RecentlyGoods=="")
{
setcookie("RecentlyGoods",$Id,time()+3600);
}
else
{
$RecentlyGoodsNew=$RecentlyGoods.",".$Id;
setcookie("RecentlyGoods", $RecentlyGoodsNew,time()+3600);
}
}
else //如果大于了指定的大小后,将第一个给删去,在尾部再加入最新的记录。
{
$pos=strpos($RecentlyGoods,",")+1; //第一个参数的起始位置
$FirstString=substr($RecentlyGoods,0,$pos); //取出第一个参数
$RecentlyGoods=str_replace($FirstString,"",$RecentlyGoods); //将第一个参数删除
$RecentlyGoodsNew=$RecentlyGoods.",".$Id; //在尾部加入最新的记录
setcookie("RecentlyGoods", $RecentlyGoodsNew,time()+3600);
}

}


}
?>
...全文
1220 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
DavidChan2024 2010-11-23
  • 打赏
  • 举报
回复
自己写就知道了
drymatiney 2009-02-24
  • 打赏
  • 举报
回复
1
bigluckyfox 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 fxs_2008 的回复:]
cookie只能简单地写个人最近浏览的商品,无法写一个商品被多少浏览和别人都浏览了哪些
[/Quote]

这个就要用到数据库咯
bensontin123 2009-02-08
  • 打赏
  • 举报
回复
楼主我这么写的
还是显示全部
而且重复的不能提前
$action=$_GET["action"];
$temp=$_COOKIE["last_product_view"];
if($action==1){
if(is_array($temp)){
$ar=array_keys($temp);
for($i=count($ar)-1;$i>=0;$i--){
echo "<li><a href=\"/website/html/product/show_pro_".$temp["$ar[$i]"].".html\" target=\"_blank\">".str_replace("__"," ",$ar[$i])."</a></li>\n";
}
}else{
echo "Nothing";
}
}elseif($action==0){
if($_GET["name"]!=""&&$_GET["link"]!=""){
if(is_array($temp)){
$ar=array_keys($temp);

if(count($temp)==5)setcookie("last_product_view[".$ar[0]."]","",time()-3600);
}
$cookie_names=str_replace(" ","__",js_unescape($_GET["name"]));
setcookie("last_product_view[".$cookie_names."]",$_GET["link"],time()+3600,"/");
}
}
fxs_2008 2009-01-07
  • 打赏
  • 举报
回复
cookie只能简单地写个人最近浏览的商品,无法写一个商品被多少浏览和别人都浏览了哪些
frederic_zhao 2009-01-07
  • 打赏
  • 举报
回复
MARK
bigluckyfox 2009-01-06
  • 打赏
  • 举报
回复
多谢楼上提供
bigluckyfox 2008-12-05
  • 打赏
  • 举报
回复
多谢各位的关注,今年内一定结帖送分
penglewen 2008-12-05
  • 打赏
  • 举报
回复
setcookie('browse['.(int)$_GET['products_id'].']',time());
arsort($_COOKIE['browse']);
if(count($_COOKIE['browse'])>4)array_pop($_COOKIE['browse']);
$browse_product_pid = join(',',array_keys($_COOKIE['browse']));

限制只保存查看四条的。。。。
leoz2z 2008-11-24
  • 打赏
  • 举报
回复
MARK jf
penglewen 2008-11-17
  • 打赏
  • 举报
回复
mark.
bigluckyfox 2008-11-17
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 barnin 的回复:]
收藏,谢谢,不过还看不懂,慢慢琢磨吧
[/Quote]

多多交流
barnin 2008-10-29
  • 打赏
  • 举报
回复
收藏,谢谢,不过还看不懂,慢慢琢磨吧
bigluckyfox 2008-10-29
  • 打赏
  • 举报
回复
继续提前
ihualan 2008-10-24
  • 打赏
  • 举报
回复
// 记录浏览产品 存在session
function product_view($pdid)
{
$limit = 8; // 保存8条记录

if(is_numeric($pdid) && $pdid<>0)
{
if(!$_SESSION['pd_viewed']) // 第一次访问
{
$_SESSION['pd_viewed'] = array($pdid);
}
else // 已经访问过
{
if(count($_SESSION['pd_viewed'])>=$limit)
{ // 超出记录
if(!in_array($pdid,$_SESSION['pd_viewed']))
{ // 不存在
$_SESSION['pd_viewed'] = array_reverse($_SESSION['pd_viewed']); // 倒序数组
array_pop($_SESSION['pd_viewed']); // 去掉最后一个
$_SESSION['pd_viewed'][] = $pdid; // 加入新纪录
$_SESSION['pd_viewed'] = array_reverse($_SESSION['pd_viewed']); // 倒序数组
}
}
else
{ // 没有存满
if(!in_array($pdid,$_SESSION['pd_viewed']))
{ // 不存在记录
$_SESSION['pd_viewed'][] = $pdid;
}
}
}
}
}
ihualan 2008-10-24
  • 打赏
  • 举报
回复
我写的 见笑了。



// 记录浏览产品 存在session
function product_view($pdid)
{
$limit = 8; // 保存8条记录

if(is_numeric($pdid) && $pdid<>0)
{
if(!$_SESSION['pd_viewed']) // 第一次访问
{
$_SESSION['pd_viewed'] = array($pdid);
}
else // 已经访问过
{
if(count($_SESSION['pd_viewed'])>=$limit)
{ // 超出记录
if(!in_array($pdid,$_SESSION['pd_viewed']))
{ // 不存在
$_SESSION['pd_viewed'] = array_reverse($_SESSION['pd_viewed']); // 倒序数组
array_pop($_SESSION['pd_viewed']); // 去掉最后一个
$_SESSION['pd_viewed'][] = $pdid; // 加入新纪录
$_SESSION['pd_viewed'] = array_reverse($_SESSION['pd_viewed']); // 倒序数组
}
}
else
{ // 没有存满
if(!in_array($pdid,$_SESSION['pd_viewed']))
{ // 不存在记录
$_SESSION['pd_viewed'][] = $pdid;
}
}
}
}
}


woshilzc11 2008-10-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 bigluckyfox 的回复:]
引用 10 楼 k3179 的回复:
if (strstr($RecentlyGoods, $Id))
{
//echo "已经存在,则不写入COOKIES <hr />";
}

如果我看了100号,100保存了,然后我再看10号,那就不能保存了


这段语句的意思是从$RecentlyGoods这个变量里查找以GET方式提交的$Id变量,如果在$RecentlyGoods存在,则不对COOKIES进行写入操作,那么按你的例子:浏览了100这个ID,那么程序将其写入COOKIES后,你再浏览了10这个ID,因为10这个ID没在变量…
[/Quote] 是真的吗?
bigluckyfox 2008-10-04
  • 打赏
  • 举报
回复
谢谢microant的建议:)
xskozil 2008-09-26
  • 打赏
  • 举报
回复
学习中,谢谢
microant 2008-09-25
  • 打赏
  • 举报
回复
对id的处理用字符串查找来处理,这样的方式其实不太合理。

define('MAX_ITEMS', 5);

$id = intval($_GET['id']); // 确保id是整数
if (isset($_COOKIE['recentlyGoods'])) {
// 已有历史数据,追加新数据
$goods = explode(',', $_COOKIE['recentlyGoods']); // 取得id数组
$key = array_search($id, $goods); // 在历史数据中查找当前id
if ($key !== false) {
unset($goods[$key]); // 找到则删除
}
$goods[] = $id; // 追加当前浏览的id
} else {
// 尚未有历史数据,创建并将当前浏览id加入
$goods = array($id);
}

// 如果数组中历史数据条目超出限制,则截取最后一段
if (count($goods) > MAX_ITEMS) {
// 从倒数第MAX_ITEMS条开始提取MAX_ITEMS条记录
$goods = array_slice($goods, 0 - MAX_ITEMS, MAX_ITEMS);
}

setcookie('recentlyGoods', join(',', $goods), time()+3600);
加载更多回复(14)

20,358

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧