2011-12-26 18 views
0

私はCMSで作業しており、ナビゲーションは「ページ」ディレクトリにあるページに応じて動的に生成されます。次に、scandir()を使用してページの配列とループを構築し、ナビゲーションを構築します。問題は、ユーザー定義の#でナビゲーション内のページの順序を変更できるようにすることです。PHPで配列の順序を変更する

IE:「ホーム - お問い合わせ - 私たちについて」は、ユーザーが「About us」ページの「重量」を低い値に設定したかどうかによって、「ホーム - 会社について - お問い合わせ」に変更できます。

<?php 

$views_dir = $_SERVER['DOCUMENT_ROOT']."kloudcms/".VIEWS_LOCATION; 
$views = scandir($views_dir, 0); 
unset($views[0], $views[1]); 

echo "<ul>"; 
foreach ($views as $view) { 
    $page_name = substr($view, 0, count($view) - 5); 
    echo "<li>".ucwords($page_name)."</li>"; 

} 
echo "</ul>"; 


?> 

また、私はコードが乱雑であることを知っています。私は約1ヶ月間PHPを習ってきたので、私は "ベストプラクティス"や特定のことを行う適切な方法ではあまり良くありません。私は乱雑なコードをお詫び申し上げます。

答えて

1

CMSを使用している場合は、各ページの重みを追加し、データベースに保存し、割り当てられた重みに従ってページを並べ替えるオプションで、静的ページを生成するセクションがある方が良いと思います。あなたはSCANDIRを使用しているので、あなたの現在の状況を1として 、あなただけのアルファベット順にソートすることができます

 
scandir (string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource $context ]]) 

参考:Sorting Scandir listing

+0

あーで現在のページを保存したほうが良いです。私はそれを知らなかった。私はそれを試してみて、私が得るものを見てみましょう。ありがとう! – tetshi

0
あなたがここにPHPでソート機能 http://php.net/manual/en/array.sorting.phpのリストを定義した「古典的」なものを使用することができます

ユーザー定義のソートが必要な場合は、この関数をチェックすることができます。uksort()uasort()uasort()は、キーまたは値のソートに依存します。

+0

ありがとう、私は今行くと私が思い付くものを参照してください。 – tetshi

0
//get this from somewhere (a DB or file) - higher the index the later it will be listed 
$indexs = array(
    'Home'=>1, 
    'About Us'=>3, 
    'Contact Us'=>2 
); 
$output = array(); 
//count incase no index's defined 
$i = 0; 
foreach($views as $view){ 
    $output[$view] = isset($indexs[$view]) ? $indexs[$view] : $i++; 
} 
//sort array by index's assigned 
asort($output); 
//implode array and use the array key value (not the index value) to output 
echo "<ul><li>".implode('</li><li>', array_keys($output))."</li></ul>"; 

しかし、あなたが重み/インデックスのを格納している場合、あなたも大丈夫、あなたのデータベース

+0

私はデータベースのアイデアを固執すると思います。私は最近、準備されたステートメントとMySQLIに変換したので、このようなことはもっと簡単になりました。コードをありがとう、私はそれをやったことができた方法を学ぶことはいいですね。 – tetshi

関連する問題