私は SPL と recursiveIterator の初心者です。
私が達成したいこと:
フォルダ ツリーでファイルを検索し、そのパスを取得したいと考えています。
私のフォルダツリーは次のようになります:
./ressources
./ressources/Images
./ressources/Images/Image01
./ressources/Images/Image02
./resources/Images/ImagesSub/Image03
./ressources/Docs
./ressources/Docs/Doc01
等々...
SQLクエリでファイルの名前を取得します(警告:拡張子はありません)。ここで、「./ressources」フォルダーで再帰イテレーターを実行して、ファイルの場所を見つけたいと考えています。
次に、ファイルが見つかったら、リンク全体「./ressources/Folder/File」を返したいと思います。
ゴードンのソリューションを読みましたが、うまくいきません。何かをエコーしようとしましたが、何も表示されません。
これが私のコードです:
$doc_id = $bean->id;
$query = "SELECT a.document_revision_id FROM documents as a, document_revisions as b ";
$query .= "WHERE a.document_revision_id = b.id AND a.id = '" . $doc_id . "' LIMIT 1";
$results = $bean->db->query($query, true);
$row = $bean->db->fetchByAssoc($results);
$file_id = $row['document_revision_id'];
$ressources = './ressources/';
$iter = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($ressources, RecursiveDirectoryIterator::KEY_AS_FILENAME), RecursiveIteratorIterator::SELF_FIRST);
foreach ($iter as $entry) {
if ($entry->getFilename() === $file_id){
echo '<script> alert('.$entry->getFilepath().');</script>';
}
}
(エコーにアラートを出すのはでたらめですが、砂糖があると何かを表示するのはかなり難しいです 仕様
SugarCrm CE 6.5.2 logic_hook でこれを実行しようとしていますが、archlinux で実行しています。私のPHPバージョンは5.4.6です
至急なので、お力添えいただけると嬉しいです!!
よろしくお願いします!
EDIT FROM 12/10/09 2pm: 私の砂糖プロジェクトとは何か、データベースからパス名を取得できない理由
Documents モジュールに folder_name_c というカスタム フィールドを作成しました。ドキュメントをアップロードするフォルダー (リソースの下) の名前を入力します。
ドキュメントを編集するときに、アップロードされたファイルを古いフォルダーから新しいフォルダーに移動できるようにしたいと考えています。
ドキュメントを編集するとき、編集時に logic_hook が機能するように after_retrieve フックを実行しました (以前は、編集ビューに対してのみ実行されていました)。
したがって、$bean->folder_name_c を取得すると、フィールドの内容が取得されます。私がSQLを試してみると、「保存」をクリックした後にのみfolder_name_cが選択されます。
そのため、古い folder_name を作成する手がかりがありません
$old_link = '.ressources/'.$old_folder.'/'.$file_id;
しか作成できません
$new_link = '.ressources/'.$bean->folder_name_c.'/'.$file_id;
それで、久しぶりに、リソースフォルダーとサブフォルダーを参照して、$file_id という名前のファイルを見つけて、$old_link を作成できることに気付きました。
参考までに、シュガーのスタジオの下に新しいカスタム フィールドを作成することで、多くの時間を稼ぎました。custom_code 呼び出しデータベースなどを追加することに命を落としたくありません。これは緊急であり、再帰イテレータはシンプルで迅速に思えます。