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) を処理する 1 つのページを用意します。

EDIT skafandri はデータ マッピング クラスを提案しましたが、他の誰かがこれに助言するか、または例を示すことができますか?

これを改善する方法についてのアイデアは大歓迎であり、必要です。

4

3 に答える 3

1

SO チャットで、フレームワークの経験がないとおっしゃっていたので、フレームワークなしで提案します。

私はおそらくこれで炎上するだろうとわかっていますが、それが組織構造の問題であることを知っているので、MVC のいくつかの概念を盗んで、それをより適切な構造に移植して少なくとも少しきれいにすることができるまでそれらを使用できます。管理がはるかに簡単です。

免責事項:これは決して良い構造ではありませんが、OOPやパターンのバックグラウンドがないと私に言ったことを考えると、あなたの問題ではありますが、一時的な解決策としては「十分」です.

このように注文すると、多くの作業を行うことなく、ほとんどすべてのフレームワークに挿入できます。

これを行う方法の 1 つを次に示します。

次のクラスを使用します。

<?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.
    }
}

?>

これらのクラスは大きくなる可能性があるため、これらのクラスごとに 1 つの php ページを作成します。すなわち:

  • バスケットボールページ.php
  • Boxingpage.php
  • Mapper.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());

Model :: getDataの実装:

  • ループして興味のあるスポーツを作成し、クエリでそれらをORできるようにします。
  • すべての結果を取得します。
  • PHPを使用して、配列をスポーツに並べ替えます。

View :: write:を実装します

  • 各スポーツをループして、正しく表示します。
于 2012-04-18T16:03:58.173 に答える