データベーステーブルからフィールドを取得し、それらをforeachループで表示する.phpスクリプトがあります(コードの関連部分です)。
<?php
$jquery1 = "SELECT `fulltext`,alias,metakey,publish_up,metadesc
FROM kms_content
WHERE catid=22 AND state= '1'";
$jdb1->setQuery( $jquery1 );
$jfeed1= $jdb1->loadObjectList();
foreach ($jfeed1 as $jitem1):
?>
<li>
<div>
<?php
$oldLocale = setlocale(LC_TIME, 'en_US');
echo strftime("%a %d %b %Y", strtotime($jitem1->publish_up));
setlocale(LC_TIME, $oldLocale);
?>
</div>
<div><?php echo $jitem1->fulltext; ?></div>
</li>
<?php
endforeach;
?>
したがって、配列のエントリがid
で並べ替えられていることを除いて、すべてが適切に機能します。日付順に並べ替えてほしい(publish_up
値)。
私はこのコードを試しましたが、上部にタイトルのみの空白ページが表示されています。
$jfeed1 = $jdb1->loadObjectList();
function date_compare($a, $b)
{
$t1 = strtotime($a['publish_up']);
$t2 = strtotime($b['publish_up']);
return $t1 - $t2;
}
usort($jfeed1, 'date_compare');
foreach ($jfeed1 as $jitem1):
コードを見たりチュートリアルを読んだりするだけでphpを「学習」したので、理論を実践する必要がある場合に不可欠な基本的な知識がたくさんありません。
array
とobject
の違いについて混乱しており、この警告を解決するために何をすべきかわからない。
編集:
<?php
var_dump($jfeed1)
?>
私に最初のアイテムを与えます:
array(22) {
[0]=> object(stdClass)#318 (5) {
["fulltext"]=> string(212) "Yesterday ..."
["alias"]=> string(3) "237"
["metakey"]=> string(7) "France"
["publish_up"]=> string(19) "2011-11-15 09:06:39"
}
オブジェクトと配列の間にはおそらく他の違いがあります(または多分そうではありません: https://stackoverflow.com/questions/2193049/php-objects-vs-arrays )が、ほとんどはスタイルの違いです(少なくともstdClass
オブジェクトを使用する場合)。
オブジェクトの場合は$variable->property
の構文を使用し、配列の場合は$variable['property']
を使用します。 var_dump
は通常、配列スタイルの構文を表示しますが、stdClass
が表示されている場合、これはオブジェクトではないため、使用したくない構文です。
したがって、date_compare
関数は、strtotime
呼び出し内で$a->publish_up
および$b->publish_up
を使用する必要があります。これで、実際に値を使用して、実際に並べ替えることができます。
SQLステートメントで並べ替えるだけで、PHPのすべての並べ替えビットをスキップすることもできます。
$jquery1 = "SELECT `fulltext`,alias,metakey,publish_up,metadesc FROM kms_content WHERE catid=22 AND state= '1' ORDER BY publish_up DESC";
$jdb1->setQuery( $jquery1 );
$jfeed1= $jdb1->loadObjectList();
(希望する順序が正確にわからないため、逆の場合は、末尾のDESC
をASC
に変更します(降順v。昇順...)
そして最後に、必須の「使用すべきその他のJoomlaのベストプラクティス」セクション。 (明らかに、あなたのコードはこれらがなくても機能しますが、Joomlaの優れた機能のいくつかを活用しています。)
最大のものは、クエリにテーブルプレフィックスを置かないようにすることです。 #__
で始まるテーブルを常に参照します。 2つのサイト間でコードを共有する場合、プレフィックスを変更する可能性が高く、それが新しいサイトで機能するようにコードを変更する必要があるのはそれだけなので、手間を省き、常に#__
と入力するだけです。 。
第2に、Joomlaのクエリオブジェクトは、クエリを構築して他のデータベースタイプで自動的に動作させる(今は使用しない場合でも)ための優れた方法であり、エスケープするだけです。間違いなく学ぶ価値があります! http://docs.joomla.org/Selecting_data_using_JDatabase
次のクエリを使用できます。
$jquery1 = $jdb1->getQuery(true)
->select('`fulltext`, alias, metakey, publish_up, metadesc')
->from('#__content')
->where('`catid` = 22')
->where('`state` = 1')
->order('publish_up desc'); // OR ->order('publish_up asc');