2

私は特定のプログラミング手法にかなり慣れていません。一般的に、OOP と MVC は非常に新しいものです。そして、これが私の最初の StackOverflow の質問だと確信しています!

CodeIgniter をダウンロードして、自分用の小さなプロジェクトを作成しました。

サーバー上にファイルとフォルダーのリストがあり、opendir、readdir、closedir などを使用して、ul と li の Web ページにそれらを一覧表示したいと考えています。関数の前に手続きでこれを実行しましたが、何もありません。 CodeIgniter をどこから始めればよいか考えてみてください。

すでにこれを行っているヘルパーまたはライブラリはありますか? そうでない場合、最良の方法は何ですか?コードをモデル フォルダーに配置する必要がありますか?

混乱している!

4

4 に答える 4

2

この 1 年間で MVC アーキテクチャについて既に学んでいただければ幸いです :)

今あなたの質問について。あなたが求めたこのヘルパーまたはライブラリは実際に存在します。まったく同じ「問題」に対して、ディレクトリヘルパーとその関数directory_map('relative/path/to/your/directory') を使用しました。この関数は、ディレクトリからコンテンツを再帰的に取得し、次のように配列に並べ替えます

    Array
    (
    [banner] => Array
        (
        [0] => banner1.jpg
        [1] => banner2.jpg
        [2] => banner3.jpg
        [3] => banner4.jpg
        )
    [galerie] => Array
        (
        [0] => 0-PB083393.JPG
        [1] => DSCN2897.JPG
        [2] => DSCN2908.JPG
        [3] => DSCN2917.JPG
        [thumb] => Array
            (
                [0] => 0-PB083393_thumb.JPG
                [1] => DSCN2897_thumb.JPG
                [2] => DSCN2908_thumb.JPG
            )
        )
    [0] => mapa.jpg
    )

これは非常に優れており、たとえば foreach サイクルで使用して、ul/li タグを追加できます。

おそらく、この質問は1年後には関係ありませんが、他の人に役立つことを願っています.

于 2015-01-09T15:15:14.017 に答える
1

ハ。これは面白いです。私は何か他のものを探していて、それが私であることに気付かずに初めての CI の質問に出くわしました :D

私は CI を 1 か月足らずでここまでやってきました。

基本的にフォルダー構造を配列の配列に入れる Directory Helper - directory_map を見つけました。

私はモデルに再帰関数を作成し、それを適切なドロップダウンメニューにします...そして、それがファイルの場合、そのファイルへのhrefリンクを追加します。

http://ellislab.com/codeigniter/user-guide/helpers/directory_helper.html

于 2013-04-23T17:24:42.107 に答える
0

もし私がこれをしていたら、私は:

(1) ディレクトリ名を受け取り、ファイルの配列を返すメソッドを使用して Library クラスを作成します。

(2) 次に、コントローラでライブラリをロードし、それを使用して目的のフォルダのファイルのリストを取得します。

(3) 次に、リストを組み立てるビューにファイル名の配列を渡しながら、ビューをロードします。

コントローラーを使用してビューにデータをロードする方法を学習することから始めます (静的配列から始めます)。次に、ライブラリを作成してコントローラと統合する方法を学びます。

ネイティブの PHP 関数を使用したくない場合は、CodeIgniter のファイル ヘルパーライブラリについてもお読みください。

また、PHP 単体テストについても学びます。

私は、MySQL データベースからのデータを処理するためにモデルを使用する傾向があります。あなたの場合、ファイルシステムに関する情報を扱っています。

幸運を祈ります。PHP/MySQL フレームワークには CI が適しています。

于 2013-03-26T16:34:53.493 に答える
0

まず、CodeIgniter へようこそ。それは支配します。今...

ディレクトリを実際に処理するには、次のようなコントローラー関数が必要です。

public function dir_to_array($dir, $separator = DIRECTORY_SEPARATOR, $paths = 'relative') 
{
    $result = array();
    $cdir = scandir($dir);
    foreach ($cdir as $key => $value)
    {
        if (!in_array($value, array(".", "..")))
        {
            if (is_dir($dir . $separator . $value))
            {
                $result[$value] = $this->dir_to_array($dir . $separator . $value, $separator, $paths);
            }
            else
            {
                if ($paths == 'relative')
                {
                    $result[] = $dir . '/' . $value;                    
                }
                elseif ($paths == 'absolute')
                {
                    $result[] = base_url() . $dir . '/' . $value;
                }
            }
        }
    }
    return $result;
} 

次のような結果を返すには、その関数を呼び出す必要があります。

$modules['module_files'] = $this->dir_to_array(APPPATH . 'modules');

これにより、結果が $modules という変数に入れられます。これは、好きな方法で使用できます。通常は、次のようなビューに入れます。

$this->load->view('folder/file', $modules);

オプションの 3 番目のパラメーター TRUE を load->view 関数に指定すると、そのビューの結果が再び返され、好きな場所で使用できます。それ以外の場合は、呼び出した場所にエコー アウトされます。ビューは次のようになります。

<?php

    if (isset($module_files) && !empty($module_files))
    {
        $out = '<ul>';
        foreach ($module_files as $module_file)
        {
            if (!is_array($module_file))
            {

                // the item is not an array, so add it to the list.
                $out .= '<li>' . $module_file . '</li>';
            }
            else
            {
                // Looping code here, as you're dealing with a multi-level array.
                // Either do recursion (see controller function for example) or add another
                // foreach here if you know exactly how deep your nested list will be.
            }
        }
        $out .= '</ul>';
        echo $out;
    }

?>

構文エラーについては確認していませんが、問題なく動作するはずです。お役に立てれば..

于 2013-03-27T06:55:18.757 に答える