首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >活性饲料结构

活性饲料结构
EN

Stack Overflow用户
提问于 2012-04-08 17:33:26
回答 2查看 1.4K关注 0票数 2

我正在构建一个函数,它将把我的用户所做的事情添加到我的数据库中,以便我可以为其他用户的活动提要构建一个活动提要。

到目前为止我想象的是什么样子。

活动表

代码语言:javascript
复制
id | user_id | source | source_id | timestamp

示例输入

代码语言:javascript
复制
1 | 1 | photo_upload | 54 | 1333906150 //54 being the ID of the photo in my DB
2 | 1 | follow | 2 | 1333906159 // 2 being the id of a user

通过这种方式,我可以轻松地为用户活动从数据库中提取信息,然后根据用户活动的来源"user_id = {$followers}向他们显示信息,例如显示photo_upload的图像。

编辑什么是显示不同类型提要的最佳方式。这是我目前所拥有的,但似乎有点多。

代码语言:javascript
复制
<?php
$grab = mysql_query("SELECT * FROM `activity` WHERE `user_id` IN (".$following.") ORDER BY `id` DESC");

while($row = mysql_fetch_array($grab)){

    switch ($row['source']) {
        case "photoupload":
            // Display photo upload layout
            break;
        case "follow":
            // Display follow layout
            break;
    }

}
?>

有人认为有什么方法可以改进这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-08 18:59:54

创建一个描述源项类型的抽象类:

代码语言:javascript
复制
abstract class Application_Feed_Item_Abstract {
    protected $_item;

    public function __construct($itemData) {
        $this->_item = $itemData;
    }

    abstract public function render();
}

针对不同类型的内容实现该类:

代码语言:javascript
复制
class Application_Feed_Item_Photo extends Application_Feed_Item_Abstract {
    public function render() {
        //Custom rendering logic for a Photo
        return '<div>Watch my <a href="photo.php?id=' . $this->_item['source_id'] . '">photo</a></div>';
    }
}

class Application_Feed_Item_Follow extends Application_Feed_Item_Abstract {
    public function render() {
        //Custom rendering logic for a Follower
        return '<div>I got a new <a href="photo.php?id=' . $this->_item['source_id'] . '">follower</a></div>';
    }
}

因此,当您提取记录时,您可以动态创建一个呈现器对象,具体取决于饲料项目的类型:

代码语言:javascript
复制
//Pull items from database and store them as an Array or other iterable object.
//Here i assume we call this collection of rows from the database $feeditems

//Mapping of source to renderer classes
$types = array(
    "photoupload" => "Application_Feed_Item_Photo",
    "follow" => "Application_Feed_Item_Request",
    "somethingelse" => "Application_Feed_Item_Somethingelse"
);

//Process every item
foreach($feeditems as $item) {
    $type = $item['source'];
    if(!array_key_exists($type, $types)) {
        throw new Exception("Unsupported feeditem type.");
    }
    $type = $types[$type];

    $renderer = new $type($item);
    echo $renderer->render();
}

只是一个松散的想法来实现它。但是,正如另一个用户所指出的,根据您的需求,有许多不同的方法来实现它。你在问题中使用的方法会很好。

票数 2
EN

Stack Overflow用户

发布于 2012-04-08 18:22:46

剥猫皮有很多种方法。同样,也有许多方法可以实现所需的相同结果。

关于“改进”国际海事组织的一些建议如下:

1.使用AJAX调用.将这些数据作为预生成的HTML获取。

在加载页面之后,使用AJAX调用,您可以让服务器构建用户活动提要的HTML片段。这将允许您的页面加载得更快,您的内容将在不久后加载。

您甚至不必在服务器上构建HTML --您还可以从AJAX调用中传回一个JSON对象,并使用JavaScript构建HTML。

2.为用户提要创建一个缓存的静态HTML文件,该文件简单地包含在标记中.

您可以让服务器在特定的时间间隔(例如,每30分钟)生成用户所需的所有HTML,然后将该HTML保存到要包含在现有HTML中的文件中。您可以使用PHP的include()函数来完成这一任务。

使用这种方法,activity在刷新时会有延迟,所以这可能不是最好的选择--但是如果您使间隔更小--例如,每5分钟就会保存很多对DB的调用。

查看cron作业 --您可以使用它们来安排更新。

index 3.在数据库中的 user_id 字段中放置一个,因为您正在使用它进行用户搜索。

这是一个非常重要的问题,特别是当您期望数据库中存在许多条目时。在用于搜索表的字段上放置索引将极大地提高查询的性能。

我相信这里还有更多的建议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10064852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档