อยากให้รูปแสดงเรียงตามชื่อที่ตั้งไว้ใน Gallery เช่น 1-30

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา อยากให้รูปแสดงเรียงตามชื่อที่ตั้งไว้ใน Gallery เช่น 1-30

อยากให้รูปแสดงเรียงตามชื่อที่ตั้งไว้ใน Gallery เช่น 1-30

ผมทำ Gallery ด้วย jqery Php ผมตั้งชื่อรูป 1-30 แต่เวลารูปแสดง รูปจะสลับกัน ไม่เรียงตามชื่อรูป เช่น อยากให้แสดงเริ่มจากรูปชือ 1.jpg-30 อ่ะครับไม่ทราบต้องทำไงให้รูปเรียงตามชื่อ ผมแปะโค๊ดมาด้วยครับ
 

$directory = 'gallery/Mother-Day53';/*ตรงนี้คือผมเอารูปจาก folder ชือ Mother-Day53*/

$allowed_types=array('jpg','jpeg','gif','png');
$file_parts=array();
$ext='';
$title='';
$i=0;

$dir_handle = @opendir($directory) or die("There is an error with your image directory!");

while ($file = readdir($dir_handle)) 
{
	if($file=='.' || $file == '..') continue;
	
	$file_parts = explode('.',$file);
	$ext = strtolower(array_pop($file_parts));

	$title = implode('.',$file_parts);
	$title = htmlspecialchars($title);
	
	$nomargin='';
	
	if(in_array($ext,$allowed_types))
	{
		if(($i+1)%4==0) $nomargin='nomargin';
	
		echo '
		<div class="pic '.$nomargin.'" style="background:url('.$directory.'/'.$file.') no-repeat 50% 50%;">
		<a href="'.$directory.'/'.$file.'" title="'.$title.'" target="_blank">'.$title.'</a>
		</div>';
		
		$i++;
	}
}


Boy415 18-08-2010 13:40:43

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1

ลองเอาโค้ดนี้ไปประยุกต์ดู

 

<?php
$allowed_types=array('jpg','jpeg','gif','png');
$dir    ="pic_img/";
$files1 = scandir($dir);
$i=1;
foreach($files1 as $key=>$value){
	if($key>1){
		$file_parts = explode('.',$value);
		$ext = strtolower(array_pop($file_parts));
		if(in_array($ext,$allowed_types)){
			echo $value."<br>";			
		}

	}
}
?> 

 



ninenik 18-08-2010
 ความคิดเห็นที่ 2

 ลองใช้คำสั่ง sort() หรือ natcasesort() ดูครับ

น่าจะช่วยได้ครับ



cpuhost 18-08-2010 14:49
 ความคิดเห็นที่ 3

sort() หรือ natcasesort() เอาไปใส่บรรทัด ไหนครับ ขอบคุณน่ะครับทุกๆคำตอบ



boy415 18-08-2010 15:04
 ความคิดเห็นที่ 4

 ลองเอาใส่ตรงนี้ดูครับ sort($title); ดูครับหรือเอาลองดัดแปลงตามที่พี่ Ninenik บอกก็ได้ครับหรือลองศึกษาโค้ดตัวนี้อีกทีครับ

<?php
$array1 = $array2 = array('IMG0.png', 'img12.png', 'img10.png', 'img2.png', 'img1.png', 'IMG3.png');

sort($array1);
echo "Standard sortingn";
print_r($array1);

natcasesort($array2);
echo "nNatural order sorting (case-insensitive)n";
print_r($array2);
?>

ได้ไม่ได้บอกด้วยนะครับเดียวผมแวะเข้ามาใหม่



cpuhost 18-08-2010 15:23
 ความคิดเห็นที่ 5

 

$directory = 'gallery/Mother-Day53';/*ตรงนี้คือผมเอารูปจาก folder ชือ Mother-Day53*/

$allowed_types=array('jpg','jpeg','gif','png');
$file_parts=array();
$ext='';
$title='';
$i=0;

$dir_handle = @opendir($directory) or die("There is an error with your image directory!");

while ($file = readdir($dir_handle)) 
{
	if($file=='.' || $file == '..') continue;
	
	$file_parts = explode('.',$file);
	$ext = strtolower(array_pop($file_parts));

	$title = implode('.',$file_parts);
	$title = htmlspecialchars($title);
	
	$nomargin='';
	
	if(in_array($ext,$allowed_types))
	{
		if(($i+1)%4==0) $nomargin='nomargin';
	
		echo '
		<div class="pic '.$nomargin.'" style="background:url('.$directory.'/'.$file.') no-repeat 50% 50%;">
		<a href="'.$directory.'/'.$file.'" title="'.$title.'" target="_blank">'.$title.'</a>
		</div>';
		
		$i++;
	}
}

พี่ครับช่วยแทรกให้ผมได้ป่าวครับ ไม่ถูกจริงๆๆ ผมก๊อฟโค๊ดมาอีกที ช่วยหน่อยน่ะครับ รบกวนพี่ด้วยครับ



boy415 18-08-2010 16:03
 ความคิดเห็นที่ 6

 จากสคริปที่ให้มาผมทดสอบให้แล้วครับ มันก็เรียงจากน้อยไปหามากอยู่แล้วครับ 

ตามรูปภาพเลยนะครับ นั้นแหละที่ผมทดสอบให้แล้วมันก็แสดง 1-6 ตามชื่อภาพครับ



cpuhost 18-08-2010 16:49
 ความคิดเห็นที่ 7

จากโค้ดตามคำถาม ที่ใช้อยู่ เป็นการ วนดึงชื่อใน โฟลเดอร์มาแสดงด้วยคำสั่ง readdir
และถ้าจะใช้วิธีการ ตามความเห็นที่ 2 จะต้องวนเอาซื่อไปกำหนดเป็น array ก่อน แล้วค่อยวนแสดงใหม่หลังจากมีการจัดเรียงแล้ว 
ถ้าไม่จำเป็นที่ต้องใฃ้ รูปแบบโค้ดเดิม แนะนำ รูปแบบที่ง่ายกว่า
 

<?php
$allowed_types=array('jpg','jpeg','gif','png');
$directory="gallery/Mother-Day53/";
$files1 = scandir($directory);
$i=0;
foreach($files1 as $key=>$value){
	if($key>1){
		$file_parts = explode('.',$value);
		$ext = strtolower(array_pop($file_parts));
		if(in_array($ext,$allowed_types)){
      		if(($i+1)%4==0) $nomargin='nomargin';     
			echo '
			<div class="pic '.$nomargin.'" style="background:url('.$directory.$file.') no-repeat 50% 50%;">   
			<a href="'.$directory.$file.'" title="'.$title.'" target="_blank">'.$title.'</a>   
			</div>';    
			        
			$i++;   			
		}

	}
}
?> 

ฟังก์ชัน scandir จะจัดเรียงรายการชื่อไฟล์ให้อัตโนมัติ



ninenik 18-08-2010
 ความคิดเห็นที่ 8

ตาม คห.7 ผมลองก๊อฟโค๊ดที่พี่ใส่มา แต่มันออกน่ะครับ และตาม คห.6 รูปที่แสดงจะเรียงตาม size ของรูปน่ะครับ มันจะไม่เรียงตาม ชื่อรูปน่ะครับ ช่วยหนอยน่ะครับ พี่ๆ ขอบคุณครับ



boy415 18-08-2010 22:40
1






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ