สอนถามบันทึกข้อมูลแล้วมีข้อมูลใหม่แสดงขึ้นมา

ถามตอบ ปัญหาการพัฒนา Extension ไม่ว่าจะเป็น Module plugin Component หรือ แม้แต่ template การปรับแต่งโค้ด Joomla ต่างๆ ทุกเวอร์ชั่น 1.5 2.5 หรือ 3.x

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
Thanapoom1514
PHP VIP Members
PHP VIP Members
โพสต์: 4329
ลงทะเบียนเมื่อ: 04/07/2022 9:46 am

สอนถามบันทึกข้อมูลแล้วมีข้อมูลใหม่แสดงขึ้นมา

โพสต์ที่ยังไม่ได้อ่าน โดย Thanapoom1514 »

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

กดไปแก้ไขชื่อข้อมูลตัวนี้ครับ
Joomla Development-1.png
Joomla Development-1.png (38.19 KiB) Viewed 587 times
เปลี่ยนชื่อเป็น ทดสอบ เป็น test ครับ จากนั้นก็กดบันทึกครับ
Joomla Development-1.png
Joomla Development-1.png (46.9 KiB) Viewed 587 times
ได้ข้อมูลใหม่ครับ และข้อมูลอันที่ต้องแก้ไข มันยังไม่แก้ไขครับ
Joomla Development-1.png
Joomla Development-1.png (14.17 KiB) Viewed 587 times
โค้ดใน Models ไฟล์ page.php

โค้ด: เลือกทั้งหมด

	public function getForm($data = array(), $loadData = true) 
	{
		return $this->loadForm('com_mypagedesign.page', 'page', array('control' => 'jform', 'load_data' => $loadData));
	}

	public function getTable($name = 'Page', $prefix = 'MypagedesignTable', $options = array())
	{
		return parent::getTable($name, $prefix, $options);
	}
	
	protected function loadFormData() 
	{
		// Check the session for previously entered form data.
		$data = JFactory::getApplication()->getUserState('com_mypagedesign.edit.page.data', array());

		if (empty($data))
		{
			$data = $this->getItem();
		}

		$this->preprocessData('com_mypagedesign.page', $data);
		
		return $data;
	}
	
	public function getItem($pk = null) 
	{
		$id = JFactory::getApplication()->input->get->get('id');
		$db = JFactory::getDbo();
		$query = $db->getQuery(true)
			->select('p.page_name, p.language, p.state, p.created, r.id AS rid, r.page_id AS rpid, r.ordinal_page AS r_ordi,r.column_type AS r_col_tyle, c.id AS cid, c.row_id AS crid, c.ordinal AS c_ordi, c.class')
			->from('#__mpds_pages AS p')
			->join('left', '#__mpds_rows AS r ON p.id = r.page_id')
			->join('left', '#__mpds_columns AS c ON r.id = c.row_id')
			->where($db->qn('p.id') . ' = ' . $db->q($id))
			->order($db->qn('r.ordinal_page') . ' ASC');
		$db->setQuery($query);
		$result = $db->loadAssocList();
		
		
		return $result;
	}

	public function save($data) 
	{
		$datas = JFactory::getApplication()->input->post->get('jform', array(), 'array');
		$user_id = JFactory::getUser()->id;
		$date = date('Y-m-d H:i:s');
		
		$data['created_by'] = $user_id;
		$data['created'] = $date;

		$data['modified_by'] = $user_id;
		$data['modified'] = $date;

		
		
		$result = parent::save($data);
		if (!$result)
		{
			return false;
		}
		$page_id	= empty($data['id']) ? $this->getState($this->getName() . '.id') : $data['id'];

		// for update
//		if (isset($data['col_id']) && $data['col_id'] != '') {
//			$tb->load($data['col_id']);
//		}

		// row
		foreach ($datas['row'] as $key1 => $row_no) {
			$tb = $this->getTable('rows');
			// print_r($key1);
			// echo '<br/><br/>';
			// print_r($row_no);
			
			if (isset($row_no[0][0])) {		// edit
				$tb->load($row_no[0][0]);	// id
			};

			$data_column_type = '';

			foreach ($row_no as $date_row_no => $date_row )
			{
				$data_column_type = $date_row[1];
				
			}
			
			$tb->bind(array(
				'page_id' => $page_id,
				'ordinal_page' => (isset($row_no[0][1])) ? $row_no[0][1] : $key1,	// ordinal
				'column_type' => $data_column_type
			));

			if (!$tb->store()) {
				return false;
			}
			
			$row_id	= $tb->id;
			
			if (isset($row_no[0][0])) {		// edit
				continue;
			}
			
			// // column
			// foreach ($datas['row'][$key1] as $key2 => $col_no) 
			// {
			// 	$tb = $this->getTable('columns');
			// 	$tb->bind(array(
			// 		'row_id' => $row_id,
			// 		'class' => $col_no[0],
			// 		'ordinal' => $key2
			// 	));
				
			// 	if (!$tb->store()) {
			// 		return false;
			// 	}
			// }
		} //exit();
		return $result;
		 
	}

เบี้องต้นผมลองเช็ค print_r() ดูค่าไอดีแล้ว ว่ามีไอดีครับ
print_r() ในไฟล์ edit.php

โค้ด: เลือกทั้งหมด

print_r($this->item);
8jkmujwfh

โค้ด: เลือกทั้งหมด

Joomla\CMS\Object\CMSObject Object ( [_errors:protected] => Array ( ) [id] => 103 [page_name] => test [state] => 1 [language] => en-GB [created_by] => 923 [created] => 2023-04-04 14:36:35 [modified_by] => 923 [modified] => 2023-04-04 14:36:35 
และได้ลองลบฟังก์ชัน getItem สามารถบันทึกข้อมูลที่แก้ไขได้ แต่ข้อมูลเกี่ยวกับ row ใน table #__mpds_rows แสดงข้อมูลในฟอร์ม
หลังจากลบฟังก์ชัน เข้าไปคลิกข้อมูลที่ชื่อว่า test
Joomla Development-1.png
Joomla Development-1.png (13.95 KiB) Viewed 587 times
เข้าไปแก้ข้อมูลในฟอร์มกับกดบันทึก
Joomla Development-2.png
Joomla Development-2.png (47.11 KiB) Viewed 587 times
ผลที่ได้
Joomla Development-1.png
Joomla Development-1.png (12.55 KiB) Viewed 587 times

ต้องปรับโค้ดในส่วนนี้ยังไงหรอครับ
ฟังก์ชันที่ลองลบไปใน Models ไฟล์ page.php

โค้ด: เลือกทั้งหมด

	public function getItem($pk = null) 
	{
		$id = JFactory::getApplication()->input->get->get('id');
		$db = JFactory::getDbo();
		$query = $db->getQuery(true)
			->select('p.page_name, p.language, p.state, p.created, r.id AS rid, r.page_id AS rpid, r.ordinal_page AS r_ordi,r.column_type AS r_col_tyle, c.id AS cid, c.row_id AS crid, c.ordinal AS c_ordi, c.class')
			->from('#__mpds_pages AS p')
			->join('left', '#__mpds_rows AS r ON p.id = r.page_id')
			->join('left', '#__mpds_columns AS c ON r.id = c.row_id')
			->where($db->qn('p.id') . ' = ' . $db->q($id))
			->order($db->qn('r.ordinal_page') . ' ASC');
		$db->setQuery($query);
		$result = $db->loadAssocList();
		
		
		return $result;
	}
:gfb:
ภาพประจำตัวสมาชิก
tsukasaz
PHP VIP Members
PHP VIP Members
โพสต์: 21912
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

Re: สอนถามบันทึกข้อมูลแล้วมีข้อมูลใหม่แสดงขึ้นมา

โพสต์ที่ยังไม่ได้อ่าน โดย tsukasaz »

เช็คที่ function ชื่อ save ใน model ครับ มันรับค่าจากฟอร์มกลับมาอยู่ที่ตัวแปร $data ลองดูว่ามีค่าของ id ไหมครับ
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)
ภาพประจำตัวสมาชิก
Thanapoom1514
PHP VIP Members
PHP VIP Members
โพสต์: 4329
ลงทะเบียนเมื่อ: 04/07/2022 9:46 am

Re: สอนถามบันทึกข้อมูลแล้วมีข้อมูลใหม่แสดงขึ้นมา

โพสต์ที่ยังไม่ได้อ่าน โดย Thanapoom1514 »

tsukasaz เขียน: 04/04/2023 8:43 pm เช็คที่ function ชื่อ save ใน model ครับ มันรับค่าจากฟอร์มกลับมาอยู่ที่ตัวแปร $data ลองดูว่ามีค่าของ id ไหมครับ
ลอง print_r() ใน function save ค่า id เป็น 0 ครับ

โค้ด: เลือกทั้งหมด

Array ( [page_name] => ทดสอบ1 [language] => * [state] => 1 [created] => 2023-04-05 04:12:34 [columns_pags] => [id] => 0 [tags] => [created_by] => 923 [modified_by] => 923 [modified] => 2023-04-05 04:12:34 )
:gfb:
ภาพประจำตัวสมาชิก
Thanapoom1514
PHP VIP Members
PHP VIP Members
โพสต์: 4329
ลงทะเบียนเมื่อ: 04/07/2022 9:46 am

Re: สอนถามบันทึกข้อมูลแล้วมีข้อมูลใหม่แสดงขึ้นมา

โพสต์ที่ยังไม่ได้อ่าน โดย Thanapoom1514 »

ได้แล้วครับ เนื่องจากตัวแปรที่เก็บค่า post ในฟอร์มกับค่าที่ return เก็บคนละตัวแปรทำให้ id เป็น 0 ครับ

โค้ด: เลือกทั้งหมด

	public function save($data) 
	{
		$data = JFactory::getApplication()->input->post->get('jform', array(), 'array');
		$user_id = JFactory::getUser()->id;
		$date = date('Y-m-d H:i:s');
		
		$data['created_by'] = $user_id;
		$data['created'] = $date;

		$data['modified_by'] = $user_id;
		$data['modified'] = $date;

		
		
		$result = parent::save($data);
		if (!$result)
		{
			return false;
		}
		$page_id	= empty($data['id']) ? $this->getState($this->getName() . '.id') : $data['id'];


		// row
		foreach ($data['row'] as $key1 => $row_no) {
			$tb = $this->getTable('rows');
			if (isset($row_no[0][0])) {		// edit
				$tb->load($row_no[0][0]);	// id
			};

			$data_column_type = '';

			foreach ($row_no as $date_row_no => $date_row )
			{
				$data_column_type = $date_row[1];
				
			}
			
			$tb->bind(array(
				'page_id' => $page_id,
				'ordinal_page' => (isset($row_no[0][1])) ? $row_no[0][1] : $key1,	// ordinal
				'column_type' => $data_column_type
			));

			if (!$tb->store()) {
				return false;
			}
			
			$row_id	= $tb->id;
			
			if (isset($row_no[0][0])) {		// edit
				continue;
			}
			

		} 

		return $result;
		 
	}
:gfb:
ตอบกลับโพส

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 42