0

我能想到的最好的例子是体育名人堂页面。

然后,您可以有一个导航,可以根据用户的请求限制结果,例如过去 3 个月和拳击。

显示多种结果布局的最佳方式是什么,例如,

游泳结果与足球有不同的布局,足球与拳击不同,然后按时间戳添加时间限制。

这些是我迄今为止想到的选项,并希望得到您的意见。

简单的 PHP

if($_GET['sport'] = "boxing"){
    if(isset($_GET['timescale'])){
        $start = 1334752108;
        $end = 1334759108;
        $query = "SELECT athlete_name, athlete_age, athlete_desc FROM `athletes` WHERE  `timestamp` BETWEEN '".$start."' AND '".$end."' AND `sport` = 'boxing' LIMIT 30";
    }   else    {
        $query = "SELECT athlete_name, athlete_age, athlete_desc FROM `athletes` WHERE `sport` = 'boxing' LIMIT 30";
    }

    while($row = mysql_fetch_array(mysql_query($query))){
        echo "<div class='boxing'>";
        //show results
        echo "</div>";
    }
}
if($_GET['sport'] = "swimming"){
    //repeated
}
if($_GET['sport'] = "football"){
    //repeated
}

阿贾克斯

有一个页面将处理包含与上述 PHP 类似的代码的所有请求 (ajax_request_hof.php)。

编辑 skafandri 建议了一个数据映射类,其他人会建议这个或能给我看一个例子吗?

任何关于我如何改进这一点的想法都非常受欢迎和需要。

4

3 回答 3

1

您在 SO 聊天中提到您对框架没有任何经验,所以这里有一个没有框架的建议。

我知道我可能会为此大发雷霆,但是知道这是一个组织结构问题,您可以窃取 MVC 的一些概念并使用它们,直到您可以将其移植到更合适的结构以至少使其更清洁和更容易管理。

免责声明:这绝不是一个好的结构,但对于您的问题,考虑到您告诉我您对 OOP 和/或模式没有任何背景,但作为临时解决方案,它“足够好”。

如果您像这样订购它,您可以将它插入到几乎任何框架中,而无需做很多工作。

这是您可以做到的一种方法。

有以下课程:

<?php

class BasketballPage
{
    protected $mapper;

    public construct ( $mapper )
    {
        $this->mapper = $mapper;
    }

    public function display_player_info( $playerid, $sportid )
    {
        $basketball_player = $this->mapper->get_sports_player( $playerid, $sportid )

        echo '<p>Basketball player name ' . $basketball_player['name'];
        echo '<p>Some other HTML, etc</p>';
    }

    public function display_match_data($matchid, $sportid)
    {
        //Same as above but would call to $this_mapper->get_match_data(); And display relevant HTML.
    }

    public function display_player_info_AJAX( $playerid, $sportid )
    {
        $player = $this->mapper->get_sports_player();
        header('Content-type: text/json');
        header('Content-type: application/json');
        echo json_encode(  $player );
        exit();
    }
}

class BoxingPage
{
    protected $mapper;

    public function display_player_info( $playerid, $sportid)
    {
        $boxing_person = $this->mapper->get_sports_player( $playerid, $sportid)

        echo '<p>Person\'s boxing name ' . $boxing_person['name'];
        echo '<p>Some other HTML, etc</p>';
    }
}

class Mapper
{
    protected $connection;

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

    public function get_sports_player($id, $sportid)
    {
        $query = $this->connection->prepare( 'SELECT * FROM players WHERE id = :player_id AND sport_id' );
        $query->bindValue(':player_id', $id, PDO::PARAM_INT);
        $query->bindValue(':sport_id', $sport_id, PDO::PARAM_INT);
        $query->execute();

        return $query->fetchAll( PDO::FETCH_ASSOC );
    }

    public function get_match_data($matchid, $sportid)
    {
        //some query here that returns match data.
    }
}

?>

每个类都有一个 php 页面,因为它们会变大。IE:

  • 篮球页面.php
  • 装箱页.php
  • 映射器.php

然后将这些文件包含到您的 index.php 中。你的索引可能看起来像这样:

index.php?playerid=1&sportid=2

<?php

//Instantiate the classes first.

$connection = new PDO($dsn,$username,$password); //your database credentials
$mapper = new Mapper( $connection );
$basketballpage = new BasketballPage( $mapper );
$boxingpage = new BoxingPage( $mapper );

if( $_GET['page'] == 2]) //lets say basketball is id 2 in your database
{
    $basketballpage->display_player_info( $_GET['playerid'], $_GET['sportid'] );
}

//In this same page you'd also add this other line, but lets say they visit the bottom link instead: index.php?playerid=1&sportid=3

if( $_GET['page'] == 3]) //lets say boxing is 3 in your database
{
    $boxing->display_player_info( $_GET['playerid'], $_GET['sportid'] );
}

//THEN lets say someone visits a different link like: index.php?index.php?matchid=1&sportid=2&page=2

if( $_GET['page'] == 2] && $_GET['matchid'])
{
    $boxingpage->display_match_data( $_GET['playerid'] );
}

//On the above you can use that same category, but a different function will display a different page!

//Bonus example, you can use it for AJAX easily. Lets say they visit the url index.php?playerid=1&sportid=2&AJAX=1


if( $_GET['page'] == 2 && GET['AJAX'] == 1) 
{
    $basketballpage->display_player_info_AJAX( $_GET['playerid'], $_GET['sportid'] );
}

?>

它看起来很复杂,但是一旦你看到它是如何连接的,请注意你的索引页面只有大约 30-40 行!它可以使事情变得非常整洁,您可以只专注于在 index.php 上路由您的请求,而其他文件负责其余的工作。

于 2012-04-18T17:33:42.727 回答
0

EAV是处理不同数据模型的一个很好的解决方案,你也可以写一个数据映射类,虽然我推荐你使用 PHP 框架,为什么不 ZEND?

于 2012-04-18T14:21:00.033 回答
0

解决这个问题的基本思路是:

从显示中分离数据检索。

class Model { public function getData() {} }
class View { public function write() {} }
$model = new Model();
$view = new View();
$view->write($model->getData());

实现模型::getData:

  • 循环构建您感兴趣的运动,以便您可以在查询中对它们进行 OR。
  • 获取所有结果。
  • 使用 PHP 将数组排序为运动。

实现 View::write:

  • 循环播放每项运动,正确显示。
于 2012-04-18T16:03:58.173 回答