ホームページ >バックエンド開発 >PHPチュートリアル >Dreamweaver CMS_PHP チュートリアルでのウェイトソートの無効な使用に対する解決策
dedecms5.7 には重みのソートにバグがあります。無効な重みの問題を解決する方法を段階的に説明します。詳細は以下を参照してください。
関係するファイルは includetaglibarclist.lib.php ファイルです:
570行目あたり:
コードは次のとおりです | コードをコピー |
if ( $isweight==’y’ ) |
このコード行はまったく役に立ちません。 $orderWeight = list_sort_by($orderWeight, ‘weight’, ‘asc’); 結果を並べ替えます。
$orderWeight を取得する前に、ドキュメント テーブルを取得するステートメントが次のとおりであるため、これには問題があります。
コードは次のとおりです | コードをコピー |
SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule, tp.namerule2、tp.ispart、tp.moresite、tp.siteurl、tp.sitepath arc.arcrank > -1 arc.sortrank DESC で注文 |
当然のことですが、ラベルを書くときは次のように書きます
コードは次のとおりです | コードをコピー |
{dede:arclist orderby='weight' typeid='29' isweight='y' limit=’4,1’ titlelen=’100’ infolen=’100’ } |
、本来の目的はデータが重みに従ってソートされることであり、2 番目の処理プログラムは
に基づいています。sortrank によって取得されたデータベースの場合、isweight=’y’ を指定すると、取得したデータセットが重みに従って並べ替えられるだけです。
したがって、解決策は非常に簡単です。プログラム ファイルの 330 行目に、重みでソートされた処理ステートメントの行を追加します。
コードは次のとおりです | コードをコピー |
else if($orderby == 'weight') $ordersql = "arc.weight asc で順序付け"; |
リストタグが重み付けソートをサポートするように別のタグを分離しましょう
コードは次のとおりです | コードをコピー |
{dede:list pagesize='10' titlelen='50' orderby='weight'} •[field:textlink/] |
方法:
1. arc.listview.class.php
ファイルを開きます。2. ステートメント "else if($orderby=="lastpost") {" を見つけます (おそらく行 609 にあります)。この行の前で Enter キーを押し、次のステートメントを挿入します。
コードをコピー | |||||||||
else if($orderby=="weight") { $ordersql = " arc.weight $orderWay";
|
コードをコピー | |
if(ereg('hot|click|weight|lastpost',$orderby))
|
4. テンプレート呼び出し
コードをコピー | |
{dede:arclist row='10' titlelen='50' orderby='weight'} •[field:textlink/] {/dede:arclist}
|