웹 & 프레임워크

[xe] xe에 대한 버그, db직접접근

늘근이 2014. 7. 28. 00:03

개발하다가 그지같은 버그는 두가지와 같다. 


1) 또한 act명은 굉장히 자주 충돌이 나거나 동작이 안된다. 대부분은 그 모듈을 포함하는 글자와 Admin이라는 단어가 있어야 동작하는것으로 보인다. 여러가지 이름을 해보고 충돌이 나지않는 이름으로 act를 주어야한다. 


2) xml 스키마없이 update하려고 하면 100% 안된다 (숫자는 된다)

스키마를 해놔도 안되는 경우가 빈번하다.

따라서 가끔은 db에 직접접근해야한다.


//여기는 php를 이용해서 바로 접근하는것. 인코딩문제가 있을수 있다.
		 require $_SERVER['DOCUMENT_ROOT']."/files/config/db.config.php";
		$conn = mysql_connect($db_info->master_db['db_hostname'],$db_info->master_db['db_userid'],$db_info->master_db['db_password'])or die(mysql_error());
		
		$selc = mysql_select_db($db_info->master_db['db_database'],$conn);
		
			$q = "SELECT v.module_srl, v.document_srl, d.title, d.nick_name, 
			MAX(IF(eid='lat',value,null)) AS lat, 
			MAX(IF(eid='lng',value,null)) AS lng 
			FROM ct_document_extra_vars v, ct_documents d 
			WHERE v.document_srl = d.document_srl 
			AND v.module_srl = d.module_srl 
			GROUP BY document_srl";
		
		$result = mysql_query($q,$conn);
		$rows = mysql_fetch_array($result);
		
		while($row = mysql_fetch_array($result)){
			debugPrint($row);	
		} 
		
		//여기는 xe만에서 쓰이는 쿼리문을 이용한 것. xml을 굳이 쓰지않고 복잡한 쿼리를 날릴수있다.
		//아래 보이는 max라든지 하는건, 피벗테이블을 위한것이다. (Pivot Table..궁금하면 오백원)
		$oDB = &DB::getInstance();
		$query = $oDB->_query("SELECT v.module_srl, v.document_srl, d.title, d.nick_name, 
			MAX(IF(eid='lat',value,null)) AS lat, 
			MAX(IF(eid='lng',value,null)) AS lng 
			FROM ct_document_extra_vars v, ct_documents d 
			WHERE v.document_srl = d.document_srl 
			AND v.module_srl = d.module_srl 
			GROUP BY document_srl");
		
		$result = $oDB->_fetch($query);
		
		Context::set('locations', $result);





이렇게 접근하면 직접접근하는거라 조금은 어긋나지만 어쩔수가 없다.


어쨌든 mysql구문을 통해 직접 접근하는건 귀찮은 인코딩문제가 있을수 있기 때문에 제외하고 (xe를 통하면 인코딩을 알아서 설정한다.)


위의 예제는 피봇테이블을 접근하는 방법이다.



참고할만한 답변이 단 한가지가 계속 구글에 검색되는데, 

http://www.xpressengine.com/forum/22610303

아무리 말해도 안고쳐주나보다+




스키마는 꼭 고치고 캐쉬파일 재생성을 한다