私は以前にグロブ関数に問題がありましたが、マニュアルを何度も読んだ後でも、基本的な問題と思われるものにつまずいているようです。
過去に、使用していたディレクトリが相対ではなく絶対だったため、画像を返すのに問題がありました。また、ループしていたがマスター文字列に文字列を追加していなかったため、最後の画像しか取得していなかったため、foreach から画像を返す際にも問題がありました。
これらの以前の問題を経験したので、私は問題を克服し、何がうまくいくかを知っていたと思いました. 私が使用しようとしているコードは、最終的には AJAX を介して読み込まれるページの関数内にあります。この関数は、ロードされたページで呼び出されます。
ただし、これを静的ページで動作させることさえできません!
私が使用しているコードは次のとおりです。
<?php
$dir = '/portfolio/_images/design/curiousc/gallery/';
$files = glob(dirname(__FILE__).$dir.'*.{jpg,png,gif,jpeg}', GLOB_BRACE);
foreach ($files as $file){
$output = '<img class="project inner-module" src="'.$dir.basename($file).'" alt="'.$file.'" />';
$images .= $output;
};
var_dump($files); //Returns this: array(0) { }
//I know the $dir is correct as it loads the following code.
//For sake of reference, I have manually added the filename.
//$images .= '<img class="project inner-module" src="'.$dir.'1-portrait-900.png" alt="'.$file.'" />';
//I would eventually have this feature inside a function so would preferably have 'return' rather than 'echo'
echo $images;
?>
手動コードを 1 行で試してみたところ、うまくいきました$dir
。そのため、ディレクトリが正しくリストされていることがわかりました。var_dump($files);
ページで「array(0) {}」を返すことも行いました。間違っている場合は訂正してください。ただし、ファイルが見つからないということではないですか?
どんな助けでも大歓迎です!このコードは最終的に、ポートフォリオ内の特定のプロジェクトに関連するすべての画像を一覧表示します。
ありがとう!
[編集]
@Darhazer の助けを借りて、ファイル構造と AJAX スクリプトを追加します。
ファイル構造:
/_inc/js/ajaxtrigger.js *ここに AJAX スクリプトが配置され、機能しています。
/index.phpこれは、glob 関数をテストしていた静的ページです。
/portfolio/index.phpこれは AJAX で index.php に読み込まれます
/portfolio/project.phpこれは、その後 /index.php 内にあるポートフォリオ/index.php にロードされます。
/portfolio/_images/ category /*project*/gallery/各プロジェクトの画像のディレクトリ
project.php が /portfolio/ 内にあることはわかっていますが、src を /portfolio/_images/... に設定しても、単に _images/... に設定しても、画像参照を機能させることができません。
AJAX の読み込みに使用しているスクリプトは次のとおりです。
$(document).ready(function(){
bindNewClick();
function bindNewClick(){
$('a.ajaxtrigger').on('click', function(){
// The target for AJAX loading is set with data-target="target-name-here" applied to the <a>
// The target div needs to have an id that matches #target-target-name-here
var target = $('div#target-'+$(this).data('target'));
doAjax($(this).attr('href'), target);
return false;
});
}
function doAjax(url, container){
if(url.match('^http')){
var errormsg = 'Ah! AJAX can\'t load external content';
container.html(errormsg);
}
else {
$.ajax({
url: url,
timeout:5000,
success: function(data){
container.html(data);
bindNewClick();
},
error: function(req,error){
if(error === 'error'){
error = req.statusText;
};
var errormsg = 'Uh oh! There was an error: '+error;
container.html(errormsg);
},
beforeSend: function(data){
container.html('<p>Loading...</p>');
}
});
};
};
});