0

基本的に、月と年に基づいてサイド カラムにアーカイブ リストを含むニュース ページが必要です。たとえば、2012 年 6 月です。更新および作成はタイムスタンプです。現在、以下のように通常のphpを使用しています。

mysql_select_db($database_admin_conn, $admin_conn);
$query_getArchives = "SELECT DISTINCT DATE_FORMAT (news.updated, '%M %Y') AS archive, DATE_FORMAT (news.updated, '%Y-%m') AS link FROM news ORDER BY news.updated DESC";
$getArchives = mysql_query($query_getArchives, $admin_conn) or die(mysql_error());
$row_getArchives = mysql_fetch_assoc($getArchives);
$totalRows_getArchives = mysql_num_rows($getArchives);

アーカイブ列を表示するコードは次のとおりです。

<h3>News Archives</h3>
<ul>
<?php do { ?>
<li class="seperator
<?php echo (isset($_GET['archive']) && $_GET['archive'] == $row_getArchives['link'] ? 'currentItem' : '') ?>">
<a href="news.php?archive=<?php echo $row_getArchives['link']; ?>"><?php echo $row_getArchives['archive']; ?></a>
</li>
<?php } while ($row_getArchives = mysql_fetch_assoc($getArchives)); ?>
</ul>

現在のコード出力と同じ結果を得るために、Zend Framework のコードの最初のブロックで select ステートメントを実現するにはどうすればよいですか? 前もって感謝します!

4

1 に答える 1

0

最初に/models/DbTable/Archive.phpにテーブル クラスを作成するか、zf コマンド ツールを使用します。

class Application_Model_DbTable_Archive extends Zend_Db_Table_Abstract
{
    protected $_name = 'news'; // actual table name here
}

次に、次のコードを使用します

$table = new Application_Model_DbTable_Archive();

$select = $table->getAdapter()->select()
            ->from(array('news' => $table->info(Zend_Db_Table::NAME)), 
                array(
                    'archive'=>new Zend_Db_Expr('DISTINCT DATE_FORMAT (news.updated, \'%M %Y\')'), 
                    'link'=>new Zend_Db_Expr('DISTINCT DATE_FORMAT (news.updated, \'%Y-%m\')')))
            ->order('news.updated DESC');
// then use $select
$row_getArchives = $table->fetchAll($select);
$totalRows_getArchives  = $row_getArchives ->count();

とビュー

foreach($row_getArchives as $row){
    echo $row->link;
}

テーブルクラスを使いたくない場合は、これを試してください:

$adapter = Zend_Db_Table::getDefaultAdapter();
$select = $adapter->select()
        ->from(array('news' => 'news'), 
            array(
                'archive'=>new Zend_Db_Expr('DISTINCT DATE_FORMAT (news.updated, \'%M %Y\')'), 
                'link'=>new Zend_Db_Expr('DISTINCT DATE_FORMAT (news.updated, \'%Y-%m\')')))
        ->order('news.updated DESC');
// then use $select
$row_getArchives = $adapter->fetchAll($select);
$totalRows_getArchives  = count($row_getArchives);

とビュー

foreach($row_getArchives as $row){
    echo $row['link'];
}
于 2013-02-06T18:28:02.987 に答える