Module Interaction
많은 경우 데이터를 share 하고 모듈간에 링크를 걸고 하는 것은 아주 유용하게 사용됩니다. 인터페이스의 일관성을 유지하기 위해 convention 들이 만들어 졌습니다. 이 convention들은 아래와 같은 일들을 합니다.
- 다른 모듈의 데이터 값을 근거로 특정 모듈로 링크를 걸거나 값을 formatting 함 (예. people 디렉토리의 값에서 맵 모듈로 링크 걸기 등)
- 모듈의 모델 객체에 근거한 링크 생성과 value 포맷팅 (예. calendar event의 포매팅과 retrieval)
- criteria에 근거한 다른 모듈의 data retrieval (used in the federated search feature)
만약 새 모듈을 만들거나 다양한 data source로부터 데이터를 포맷하기를 원한다면 오늘 다룰 내용을 자세히 읽어 보셔야 합니다.
Formatting Data from Existing Modules
다른 데이터(map locations, people)를 참조하는 하나의 데이터 소스(LDAP directory, calendaring system)에 있는 데이터를 가지고 있는 예는 아주 많습니다. 불행히도 이 두개의 시스템사이를 연결하는 strong link 는 없을 겁니다. 그 둘을 link 하려면 bridge를 사용해야 합니다.
다른 모듈의 데이터로 링크를 걸고 다른 모듈의 데이터를 보여주는 쿠로고의 built in 모듈은 2가지가 있습니다.(People, Calendar module) detail configuration의 module=xxx 파라미터는 다른 모듈로의 링크를 생성합니다. default로는 간단하게 디렉토리의 같은 value를 사용합니다. 그리고 filter 파라미터의 value를 사용해서 target 모듈의 search 페이지로 링크를 겁니다. 그러니까 맵 모듈로 링크를 건다면 아래와 같을 겁니다.
- map/search?filter=value
이것은 많은 경우에 사용됩니다. 하지만 때때로 좀 더 특정 링크를 제공해야 할 때도 있습니다. 이를 구현하기 위한 과정은 아래와 같습니다.
target 모듈의 subclass를 생성한다. (i.e. map)
- Create a file named SiteMapWebModule.php in SITE_DIR/app/modules/map안에 SiteMapWebModule.php파일을 생성한다. enclosing folder들을 사용해야 할 겁니다.
- 이 파일은 MapWebModule의 subclass이어야 함. 이것이 그냥 맵 모듈의 extension 이라면 다른 추가적인 프로퍼티를 포함할 필요는 없음
Implement a linkForValue($value, Module $callingModule, KurogoObject $otherValue=null) method in your subclass. This method will receive:
- a value from the other system
- a reference to the calling module (이것으로 여러분은 어떤 모듈이 call을 할 것인지 정할 수 있습니다. )
- 옵션으로 모듈에 의해 underlying object가 제공됩니다. 그렇기 때문에 여러분은 response를 generate 할 때의 모든 value들을 고려해야 합니다.
이 메소드는 list item에 대한 해당 배열을 return 해야 합니다. 여기서 최소한 title 값을 include 해야합니다. 일반적으로 link를 include 하고 싶지 않다면 url 값을 include 해야합니다.
<?php
class SiteMapWebModule extends MapWebModule
{
public function linkForValue($value, Module $callingModule, KurogoObject $otherValue=null) {
switch ($callingModule->getID())
{
case 'people':
//look at the location field to see which office they are from.
//This assumes the relevant location is in the "location" field.
$person = $otherValue;
switch ($person->getField('location'))
{
case 'New York':
// New York office is first entry
return array(
'title'=>'New York Office',
'url'=>buildURLForModule($this->id, 'detail', array(
'featureindex'=>0,
'category'=>'group:0'
))
);
break;
case 'Boston':
// Boston office is the 2nd entry
return array(
'title'=>'Boston Office',
'url'=>buildURLForModule($this->id, 'detail', array(
'featureindex'=>0,
'category'=>'group:1'
))
);
break;
default:
// don't include link
return array(
'title'=>$value
);
}
break;
default:
//return the default implementation for other modules
return parent::linkForValue($value, $callingModule, $otherValue);
}
}
}
Enabling interaction from new modules
새 모듈을 만드려면 full interaction을 가능하도록 하기 위해 몇개의 메소드들이 필요합니다.
- searchItems($searchTerms, $limit=null, $options=null) - 이 메소드는 필터로서 searchTerms를 사용해서 KurogoObject 인터페이스를 confirm 하는 객체의 배열을 return 해야 합니다. 여러분의 implementation은 criteria를 사용해서 간단하게 검색하기 위해 필요한 메소드들을 call 해야 합니다. 여러분은 좀 더 structured queries를 사용하기 위해 옵션 배열들을 활용할 수 있습니다. federated search method의 디폴트 impementation을 활용한다면 ederatedSearch=>true를 포함해야 할 겁니다.
- linkForItem(KurogoObject $object, $options=null) - This method should return an array suitable for a list item based on the object included. This would typically be an object that is returned from the searchItems method. An options array is included to permit further customization of the link. For examples, see the People, News, Calendar and Video modules. 이 메소드는 include 된 객체를 근거로 list item에 대한 해당 배열을 return 해야 합니다. 이것은 특히 searchItems 으로부터 return 된 객체가 됩니다. options array는 링크를 좀 더 customize 할 수 있도록 하기 위해 include 됩니다. 그 예로는 People, News, Calendar 그리고 Video module 들이 있습니다..
'WEB_APP > Kurogo' 카테고리의 다른 글
Database Authentication (0) | 2012.09.12 |
---|---|
Authentication (0) | 2012.09.06 |
Flat File Authentication (0) | 2012.09.06 |
Access Control and Authorization (0) | 2012.09.06 |
Kurogo Tutorial 21 - Emergency Module - (0) | 2012.07.12 |
Kurogo Tutorial 19 - The Kurogo Object - (0) | 2012.06.12 |
Kurogo Tutorial 18 - Video Module - (0) | 2012.06.07 |
Kurogo Tutorial 17 - Calendar Module - (0) | 2012.06.01 |
Kurogo Tutorial 16 - Database Access - (0) | 2012.05.30 |
Kurogo Tutorial 14 - Handling Requests - (0) | 2012.05.23 |