2012-03-05 4 views
15

/administrator/components/com_contact/views/contacts/view.html.php의 34 번 줄을보고 있는데 $this->items = $this->get('Items'); 내가 이해할 수없는 것은 실제로 같은 ... 내가 작업하는 방법을 이해하지 않는 일부 다른 일들도 있습니다 /administrator/components/com_contact/models/contacts.phpJoomla가 ('Items') 어떻게 작동합니까?

라인 (123)에 protected function getListQuery()를 호출

$this->pagination = $this->get('Pagination'); 
$this->state  = $this->get('State'); 

이 부르심은 무엇입니까? getPagination, getState 또는 getItems라는 메서드가 보이지 않기 때문에 실제로이 함수가 무엇을 호출하는지 알지 못합니다 ... get ('Items')가 어떻게 든 나타납니다. 마술처럼 getListQuery()를 호출합니다.

답변

31

나는 줌라!의 MVC에서보기 contacts 자동으로 모델 contacts을로드 (extends JViewContactViewContacts) + 여기에 1.7/2.5 ...

을 추정하고 있습니다 (또는 J의를! 용어 ContactModelContacts)을하는 클래스 extends JModelList으로.

get()은보기에서 등록 된 모델 또는보기 속성에서 데이터를 가져옵니다.

그래서;

$this->items = $this->get('Items'); 

실제로는 parent을의에 일치하는 getItems()이있는 모델 ContactModelContacts를 호출합니다.

모델 파일 com_contact/models/contacts.php는 자신의 getItems()의 구현, 그래서 (/libraries/joomla/application/component/modellist.php에 있음)에 사용되는 JModelList 클래스에서 getItems()하지 않습니다.

차례로 getListQuery()을 호출합니다. 마법은 상속하지 않습니다.

$this->get('Pagination')도 똑같은 작업을합니다. 모델 부모에서 구현에 액세스합니다.

$this->get('State')은 아마도 JModel 구현으로 거슬러 올라갈 것입니다.

+1

남자 나는 바보 같은 기분이 들지만 ... 너무 의미가 있습니다. 나는 상속 된 메서드가 호출 된 것을 본 적이 없다고 생각하고 하위 클래스 메서드를 호출합니다. 나는 그것을 올바르게 입력했다고 생각합니다. 어느 쪽이든 - 감사합니다! – dingerkingh

+8

Joomla 컴포넌트 개발자 가이드가이 혼란을 담당합니다. 나는이 혼란에 대해 방황하는 큰 시간을 낭비한다 (나는 이것이 길일 것이라고 상상했지만 튜토리얼에서는 1.5 또는 2.5에 없었다). 대답 해 주셔서 대단히 감사합니다. – Ruwantha

+4

나는 Ruwantha를 포함한 누군가가 Joomla 문서에 만족하지 않는다면 그것을 향상시키는 데 기여할 수 있다고 덧붙이고 싶습니다. Joomla는 모든 자원 봉사 프로젝트이며보다 나은 삶을 위해 모든 사람들의 도움을 필요로합니다. – betweenbrain