私がやろうとしているのは、必要に応じてサムネイルのレイアウトを変更できる再利用可能なギャラリー機能を作成することです。
私の問題は、中括弧変数を含む $thumbLayout 文字列が、このような関数に含まれていると機能しないことです。変数を置き換えた後に文字列が書き込まれた場合にのみ機能します。
これを行うための解決策またはより良い方法を考え出すための助けを本当に感謝します.
$thumbLayout = "<div class=\"customgallery\"><img src=\"{$thumbImgPath}\" width=\{$width}\" height=\"{$height}\" alt=\"{$imgName}\" /></div>";
function createImageGallery($galleryName,$db,$thumbLayout=''){
$imgno = 1;
//Page numbers//
if(isset($_GET['page']) && is_numeric($_GET['page'])) {
$page = $_GET['page'];
}elseif(isset($_POST['page']) && is_numeric($_POST['page'])) {
$page = $_POST['page'];
}else{
$page = 1;
}
$rowGallery = $db->query_first("SELECT gallery_id,num_cols,images_per_page FROM tblgallery WHERE gallery_name='$galleryName' AND show_gallery='y' LIMIT 1");
if($rowGallery!=false){
$recordsPerPage = $rowGallery['images_per_page'];
$numCol = $rowGallery['num_cols'];
$gallery = '<ul>';
$gallery_id = $rowGallery['gallery_id'];
$offset = ($page - 1) * $recordsPerPage;
$query = "SELECT * FROM tblimages WHERE group_id='$gallery_id' AND imgpath_thumb<>'' AND show_img='y' ORDER BY img_order";
$rs = $db->query("$query LIMIT $offset,$recordsPerPage");
foreach($rs as $row){
$largeImgPath = '/'.$row['imgpath_large'];
$imgName = $row['img_name'];
$thumbImgPath = '/'.$row['imgpath_thumb'];
if(($imgno>1) && (!is_float(($imgno-1)/$numCol))){
$li_class = 'class="newline"';
}elseif(($imgno>1) && (!is_float(($imgno)/$numCol))){
$li_class = 'class="last"';
}else{
$li_class = '';
}
list($width, $height) = getimagesize($row['imgpath_thumb']);
if($thumbLayout==''){
$gallery .= '<li '.$li_class.'><a href="'.$largeImgPath.'" class="popup" title="'.$imgName.'"><div class="gallery_imgbox"><img src="'.$thumbImgPath.'" width="'.$width.'" height="'.$height.'" alt="'.$imgName.'" /></div><span>'.$imgno.$imgName.'</span></a></li>';
}else{
$gallery .= '<li '.$li_class.'>'.$thumbLayout.'</li>';
}
$imgno++;
}
$gallery .= '</ul>';
}else{
//Gallery specified does not exist//
return 'Gallery does not exist';
}
return $gallery;
}
それは本当に $thumbLayout の配置に関係していると思います。関数内で置換変数の下にある場合は機能しますが、関数の外から含めた場合は置換されません。わかりましたので、これは本当に簡単な例です:
$test1 = sprintf("My name is %s.",$name);
$test2 = "My name is {$name}.";
$test3 = "My name is ${name}.";
$test4 = "My name is $name .";
$test5 = "My name is <?= name ?>.";
$test6 = "My name is {{name}} .";
function showtest($test){
$name = "Bob";
echo $test;
}
showtest($test1); //Result: My name is .//
showtest($test2); //Result: My name is .//
showtest($test3); //Result: My name is .//
showtest($test4); //Result: My name is .//
showtest($test5); //Result: My name is .//
showtest($test6); //Result: My name is {{name}}.//
これは機能しますが(しかし、私には役に立ちません)
function showtest2(){
$name = "Bob";
$test = "My name is {$name}.";
echo $test;
}
showtest2(); //Result: My name is Bob.//