Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,038

HOME > PHP > PHP Forum > ช่วยหาวิธีการส่งออกมาเป็น return แทน echo ของ function นี้หน่อยครับ



 

ช่วยหาวิธีการส่งออกมาเป็น return แทน echo ของ function นี้หน่อยครับ

 



Topic : 046235



โพสกระทู้ ( 4,760 )
บทความ ( 8 )



สถานะออฟไลน์




Code (PHP)
function category_menu($parent = '0') {
	$CI =& get_instance();
	$has_childs = FALSE; //this prevents printing 'ul' if we don't have subcategories for this category
	$categories = $CI->Menu_model->category_menu();
	$output = "";
	//print_r($categories);
	$i = 0;
	foreach($categories as $key => $value) {
		if ($value['parent'] == $parent)  {
			//if this is the first child print '<ul>'
			if ($has_childs === false) {
				//don't print '<ul>' multiple times
				$has_childs = true;
				echo "<ul id=\"child".$i."\">\n";
			}
			echo "<li><a href=\"/category/" . $value['name'] . "\">" . $value['name'] . "</a>";
			category_menu($key);
			//call function again to generate nested list for subcategories belonging to this category
                        echo "</li>\n";
		}
		$i++;
	}// endforeach
	if ($has_childs === true) echo "</ul>\n";
	//writecategory($output);
}// category_menu

frontend_menu_helper.php



Code (PHP)
function category_menu() {
		$sql = "select * from " . $this->db->dbprefix('categories') . " c";
		$sql .= " inner join " .  $this->db->dbprefix("category_lang") . " cl";
		$sql .= " on c.category_id = cl.category_id";
		$query = $this->db->query($sql);
		if ( $query->num_rows() > 0 ) {
			foreach ( $query->result() as $row ) {
				$output[$row->category_id] = array(
				    'name' => $this->Category_model->show_category_lang_info("category_name", $row->category_id),
				    'parent' => $row->category_parent,
				    'uri' => $this->Category_model->show_category_lang_info("category_uri", $row->category_id));
				/*
				$output[$i]['name'] = $this->Category_model->show_category_lang_info("category_name", $row->category_id);
				$output[$i]['depth'] = $row->category_depth;
				$output[$i]['uri'] = $this->Category_model->show_category_lang_info("category_uri", $row->category_id);*/
			}
		} else {
			return NULL;
		}
		return $output;
	}// category_menu

menu_model.php



คือจากหน้าแรก เรียก echo category_menu(); ที่ไฟล์ frontend_menu_helper.php
แล้วเจ้าตัว helper ก็ไปเรียก menu_model.php เพื่อลิสต์ category ออกมาเป็น array

ทีนี้ผมไม่ต้องการให้มัน echo ในตัว frontend_menu_helper.php เพราะมันจะ error ได้ถ้าไปเจอบางหน้าที่สั่งเขียนคุกกี้
ที่นี้ผมเปลี่ยนจาก echo เป็น $output .= แล้ว return มันก็ปรากฏว่าออกมาแค่ไม่กี่อัน ไม่ได้ออกมาเป็น category tree ทั้งยวง

จะให้เปลี่ยนไปใช้แบบมี nleft nright ก็ไม่ไหว เพราะสุดจะเกินขอบเขตสมองของผมที่จะคำณวนมันได้ แค่ตอน insert/update นะ ไหนจะตอนเขียนออกมาอีก ทำเอาความดันขึ้นเลยเจ้า nleft nright นี่.

ช่วยหน่อยนะครับท่านๆทั้งหลาย



Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2010-07-31 12:44:19 By : mr.v View : 1249 Reply : 5
 

 

No. 1



โพสกระทู้ ( 4,760 )
บทความ ( 8 )



สถานะออฟไลน์


เพิ่มเติมอีกนิด.
ถ้าสามารถใส่ระดับแบบนี้ได้ก็จะเยี่ยมเลยครับ

ตัวอย่าง
Code (PHP)
<ul class="lv1">
	<li><a href="/category/category 1">category 1</a>
		<ul class="lv2">
			<li><a href="/category/category 1.1">category 1.1</a>
				<ul class="lv3">
					<li><a href="/category/category 1.1.1">category 1.1.1</a>
						<ul class="lv4">
							<li><a href="/category/category 1.1.1.1">category 1.1.1.1</a></li>
						</ul>
					</li>
					<li><a href="/category/category 1.1.2">category 1.1.2</a></li>
				</ul>
			</li>
		</ul>
	</li>
	<li><a href="/category/category 2">category 2</a></li>
</ul>







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-07-31 12:48:30 By : mr.v
 


 

No. 2



โพสกระทู้ ( 1,242 )
บทความ ( 13 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

function category_menu($parent = '0') {
	$htmltag = '';
	$CI =& get_instance();
	$has_childs = FALSE; //this prevents printing 'ul' if we don't have subcategories for this category
	$categories = $CI->Menu_model->category_menu();
	$output = "";
	//print_r($categories);
	$i = 0;
	foreach($categories as $key => $value) {
		if ($value['parent'] == $parent)  {
			//if this is the first child print '<ul>'
			if ($has_childs === false) {
				//don't print '<ul>' multiple times
				$has_childs = true;
				$htmltag .= "<ul id=\"child".$i."\">\n";
			}
			$htmltag .= "<li><a href=\"/category/" . $value['name'] . "\">" . $value['name'] . "</a>";
			category_menu($key);
			//call function again to generate nested list for subcategories belonging to this category
                        $htmltag .= "</li>\n";
		}
		$i++;
	}// endforeach
	if ($has_childs === true) $htmltag .= "</ul>\n";
	//writecategory($output);

	return $htmltag;

}// category_menu




ใช่แบบนี้หรือเปล่าครับ


ประวัติการแก้ไข
2010-07-31 13:37:20
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-07-31 13:36:42 By : DownsTream
 

 

No. 3



โพสกระทู้ ( 4,760 )
บทความ ( 8 )



สถานะออฟไลน์


ถ้าเปลี่ยนจาก echo มาเป็น $htmltag .= เฉยๆ มันจะออกมาแค่ไม่กี่อันเองครับ อย่างที่ผมบอกไว้
เพราะว่าทันทีที่มันมาเจอ return ปุ๊บมันหยุดทำงานเลย
ผมพยายามหาเงื่อนไขมาครอบ return ไว้แต่ไม่รู้จะเอาอะไรมาครอบมัน เพราะให้มันนับ $i มันก็นับรวมทั้งหมด ไม่ได้ออกมาเป็น 1 2 3 4 มันออกมาเป็น 4 4 4 4 (ลองกับ echo)

การที่มันสั่งทำงานในตัวมันเองเรื่อยๆลูปจนหมดก๊อก โดยออกมาครบถูกต้องและไม่ใช้ echo นี่มันยากจริงๆครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-07-31 18:06:05 By : mr.v
 


 

No. 4

Guest


แบบนี้ครับ
<?php
function category_menu2(){
ob_start();
category_menu(); //ข้างในใช้คำสั่ง echo
return ob_get_clean();
}
?>
กับ class ช่วย render tree
http://php.deeserver.net/download/get/108/dragonhtmlcategory13finalzip
อันนี้เหมาะกับ database tree ที่ไม่ใหญ่มากครับ ผมโหลดตารางมาใส่ array ทั้งอันเลย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-08-02 05:01:20 By : num
 


 

No. 5



โพสกระทู้ ( 4,760 )
บทความ ( 8 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 4 เขียนโดย : num เมื่อวันที่ 2010-08-02 05:01:20
รายละเอียดของการตอบ ::
พอใส่เข้าไปแล้วมันเขียนออกมาแค่อันหลักๆเท่านั้นเองครับ อันที่อยู่ย่อยลงไปไม่ออกเลย ผมคิดว่าน่าจะต้องหาอะไรมาครอบ return ไว้ให้ครบตามเงื่อนไขมากกว่า แต่ผมยังไม่เจออะไรที่จะเป็นเงื่อนไขได้ว่ามันจะวนจนครบรึยัง
เพราะแม้ใส่
$i = 0; และ $i++ ตรงท้ายลงไป มันก็ออกมาเท่ากับจำนวนทั้งหมด(8 category หลักและย่อย)ตั้งแต่เริ่มจนจบ ไม่ใช่ 1 2 3 4 5...

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-08-02 09:22:33 By : mr.v
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ช่วยหาวิธีการส่งออกมาเป็น return แทน echo ของ function นี้หน่อยครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2025 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่