Loading...
 
Skip to main content

History: List 플러그인

Source of version: 12 (current)

Copy to clipboard
            ! List 플러그인
''((Tiki7)) 에서 소개됨''. 모든 플러그인들의 목록을 찾는 중이라면, ((All Plugins|모든 플러그인들)) 을 살펴보십시오.

__List__ 는 검색 기능을 제공하기 위하여 개선된 ((Search and List from Unified Index|검색 색인)) 을 사용하는 ((Wiki Plugins|위키 플러그인)) 입니다. 이는 대부분의 주요 티키 ((features|기능)) 에 대하여 전체 텍스트 검색을 제공하며, 프로그램 가능한 필터, 즉, OUTPUT, DISPLAY, 및 SORT 명령어, 로 향상되었으며, 이를 혼합할 경우, 원하는 그 어떠한 형식이던지, 데이터베이스 내의 그 어떠한 거의 모든 정보를 제시할 수 있습니다, 이는 ((pretty trackers)) 와 유사합니다.  ((PluginCustomSearch)) 또한 살펴보십시오.

!! 문법 개요
플러그인의 본문은 자신만의 플러그인같은 문법을 지닌 명령어들을 포함합니다만, LIST 내부에 다음의 4개만이 존재합니다:

__filter:__ 포함할 개체 (행)를 선택합니다. (필수)
(아래의 "__List 의 요소__ soqndml "__필터__" 탭을 참조하십시오)

__OUTPUT:__ 그러한 개체들에 대하여 포함될 열/필드 (선택)
(아래의 "__List의 요소__" 내부의 "__출력__" 탭을 참조하십시오)

__DISPLAY:__ 그러한 필드들의 위치와 서식. (선택) 
(아래의 "__List의 요소__" 내부의"__표시__" 탭을 참조하십시오)

__SORT:__ 어떤 순서. (선택)
(아래의 "__List의 요소__" 내부의 "__정렬__" 탭을 참조하십시오)

{REMARKSBOX(type=note title="할 일")}
''이 부분은 ((help|도움말)) 이 필요합니다 - 이러한 명령어들의 범위를 설명해야 합니다 (각각은 용도가 무엇인가)''{REMARKSBOX}

!!List 를 생성하는 단계
LIST 플러그인은 기본으로 50개의 결과를 표기합니다. 출력 구성에 다라, 결과물을 제시하는 데 시간이 걸릴 수도 있습니다. 성능을 향상하기 위하여 결과의 표기되는 양을 축소하는 것을 고려해 보십시오.
{CODE(caption=Up to Tiki 10) (2013년 5월 31일 현재 티키 11.0 SVN 에서도 여전히 작동함)}{list max="10"}{CODE}
{CODE(caption=Tiki 11 and above)}{pagination max="10"}{CODE}

부가적으로, 페이지 매김 조절은 다음 변수를 가질 수 있습니다:
* __onclick__
* __offset_jsvar__
* __offset_arg__ 페이지 매김을 위한 URL 내부에서 사용되는 키를 변경하기 위함, 동일한 페이지 내부에서 여러 개의 리스트가 사용될 때 유용함
* __max__ 페이지 당 결과의 양을 위함	

이 설정은 질의 문자열 내부에 설정된 그 어떠한 maxRecords 설정에 대비하여 우선을 차지한다는 점과 위 설정은 항상 작동을 할 것이지만,  질의 문자열 안의 maxRecords 이 오프셋 (offset)이 설정되어 있어야만 적용될 것이라는 점에 유의하십시오. 

!!! List의 요소
{TABS(name="목록제작단계" tabs="필터|출력|표시|정렬|고급" toggle="y" inside_pretty="n")}
{CODE(caption=기본 사용법)}
{LIST()}
    {pagination max="10"}
    {filter content="hello world"}
    {filter categories="1 AND 2"}
    {filter language="en or unknown"}
    {filter type="wiki page"}
    {filter range="modification_date" from="1317427200" to="1320105600"}
{LIST}
{CODE}
* 날짜 필터는 다양한 범용 서식들을 유닉스 시간으로 변환하기 위해서  [php.net/strtotime|strtotime] 를 사용합니다. 이전 문서에서 잘 못 언급된 바와 다르게 항상 이렇게 작동해왔습니다.
/>* 유닉스 타임스탬프도 사용될 수 있습니다
{CODE(caption=티키 9)}
티키 9에서는 다음의 날짜 필터가 가능합니다:
    {filter range="modification_date" from="1317427200" to="now"}
    {filter range="modification_date" to="now" gap="31536000"}
    {filter range="modification_date" from="now" gap="31536000"}
{CODE}
{CODE(caption=지정된 트래커 내부의 필터)}
{LIST()}
    {list max="10"}
    {filter content="hello world"}
    {filter categories="1 AND 2"}
    {filter content=5 field=tracker_id}
{LIST}
{CODE}
/////
{CODE(caption=위키 출력 샘플)}
||Type|Object
{LIST()}
    {OUTPUT()}{display name=object_type}|{display name=object_id}
   {ALTERNATE()}This will display if no results are found{ALTERNATE}
{OUTPUT}
{LIST}
||
{CODE}

__표 서식적용__
{CODE(caption="기본 테이블 서식을 사용한 예제")}
{LIST()}
   {filter type=trackeritem}
   {filter content="water"}
   {OUTPUT(template="table")}
       {column sort="title" label="Title" field="title_link" mode=raw}
       {column label="Description" field="description"}
       {column sort="tracker_field_18" field="event_date" label="Event Date"}
   {OUTPUT}

   {FORMAT(name="title_link")}{display name=title format=objectlink}{FORMAT}
   {FORMAT(name="event_date")}{display name=tracker_field_18 format=date}{FORMAT}
{LIST}
{CODE}

__미디어 목록 서식적용__
((Tiki13))+
이 샘플은 현재 사용자에 의하여 획득된 ((Goals|뱃지)) 의 모록을 제공합니다.
{CODE(caption="기본 미디어 목록 서식적용을 사용하는 예제")}↵
{LIST()}↵
{filter relation="{{user}}" objecttype="user" qualifier="tiki.badge.received.invert"}↵
{OUTPUT(template=medialist)}↵
{icon field=tracker_field_image}↵
{body field=tracker_field_description}↵
{OUTPUT}{LIST}
{CODE}

(OUTPUT 내부의) __column__ (열) 플러그인들이 템플릿으로 전송될 데이터 배열로 변환된다는 점에 주의하십시오. 표 서식은 스마티 형식을 사용하고 동일한 기능을 제공합니다.

__주의__ 티키9 이후로, objectlink 와 trackerrender 서식적용된 값들과 같은 HTML 출력을 포함하는 열에서는 __mode=raw__ 를 ''정의해야 할 것'' 입니다, 이는 티키 9에서의 구문분석기에 수정에 기인합니다.

__위키 서식적용 (플러그인 내부에서)__
각각의 결과에 대하여, 플러그인은 템플릿을 적용하는 것을 허용합니다.

/////
__일반 서식 선택사항__
* DISPLAY '플러그인' 은 개체 유형이 명명된 값을 포함하지 않는 경우, 그 값을 지정할 추가적 ''__기본__'' 매개변수를 보유할 수 있습니다
** 값이 없을 경우 __default=""__ 를 사용하여 "__No value for ...__" 대신 비어있는 값을 표시하도록 하십시오
* DISPLAY '플러그인' 운 사용자 지정 표시 방식을 지정하기 위하여 추가 ''format'' (형식) 매개변수를 보유할 수 있습니다
** __plain__: 그대로, 기본 형식
*** 선택적 '분리자' (separator) 속성
** __date__ (날짜): 짧은 날짜 형식을 사용
** __datetime__ (날짜시간): 짧은 날짜 시간 형식을 사용 (티키8)
** __objectlink__ (개체링크): 값을 개체로의 링크에 대한 레이블로써의 사용
** __snippet__: 다량의 텍스트의 초기 부분을 표기하기 위함
*** 선택적 'length' (길이) 속성
*** 선택적 'suffix' (접미어) 속성
** __reference__ (참조): 값에 기반하여 링크를 표시하기 위함
*** 필수 'type' (유형) 속성
*** 선택적 'separator'(구분자) 속성
*** 트래커 필드가 "__page selector__"(페이지 선택기) 필드인 트래커 필드에대하여 "__format=reference__" 를 사용하십시오. 이는 링크가 트래커 레코드가 아닌 페이지명이 트래커에 포함되어있는 페이지로 연결되었다는 것을 확인하기 위합입니다. 
**trackerrender: 트래커 필드를 렌더하기 위함 (trackerrender 사용시, 스마티 변수 "$context.search_render" 는 "y" 가 될 것이며 trackeroutput 스마티 tpl 내부에서 다른 형식을 가지기 위하여 사용될 수 있습니다)
**__wikiplugin__: list 출력에 위키 플러그인을 렌더
***__name__: 플러그인명. 예: wikiplugin_img
***__default__: url 질의형식 내부의 임의의 매개변수에 대한 fallback 값 (예: field=42&caption="Not+Found) "(티키11)"
*** 기타 플러그인 매개변수 "(티키11)"
* (티키 9+) list_mode="y" 를 추가하여 해당 필드에 대하여 목록 표기 설정을 사용할 수 있습니다. 예: {display name="tracker_field_42" format="trackerrender" list_mode="y"}
* (티키 9+) pagetitle="y" 는 웹브라우저 제목을 pagetitle 으로 설정되어 결과 내부에 발견된 첫 항목에 대한 필드의 컨텐츠로 설정할 것입니다 (한 개의 항목 결과 페이지에 대하여 유용함)
* (티키 11+) pagedescription="y" 는metatag_pagedesc 선호설정이 활성화된 경우, 페이지의 메타 설명 태그를 결과에 발견된 첫번째 항목에 대한 필드의 내용물에 pagedescrption 으로 지정할 것입니다.
** __주의:__ pagedescription 과 pagetitle 은 콘텐츠상에서 필터링이 수행되지 않으므로 일반 텍스트만을 사용하고 알파벳숫자가 아닌 글자는 피하도록 하십시오 (한글?)
* (티키 11+) editable=inline 은 필드를 온라인 편집가능하도록 설정할 것입니다. 필수사항: "인라인 편집 (트래커 내부에서 발견할 수 있음)" 및 열은 mode=raw 로 설정되어야 합니다. 즉:↵
{column label="First Name" field="firstName" mode=raw}↵
{FORMAT(name="firstName")}{display name="tracker_field_firstName" format=trackerrender editable=inline}{FORMAT}

* __FORMAT__ '플러그인' 은 위키 템플릿을 적용하는 것과 명기된 값 내부에 저장하는 것을 허용합니다. 그러면 이 값은 다른 위키 템플릿 내부 혹은, 더 유용하게는 스마티 템플릿 내부에서 사용될 수 있습니다.

{CODE(caption=예제)}
범주 링크 표시
{display name=categories format=reference type=category}

프리태그 링크 표시
{display name=freetags format=reference type=freetag}

항목 링크 표시
{display name=tracker_field_42 format=trackerrender}
{display name=tracker_field_42 format=reference type=trackeritem}

위키 페이지의 시작
{display name=wiki_content format=snippet length=500 suffix="..."}

(티키 8) 범주
{display name=categories format=categorylist singleList=y}
{display name=categories format=categorylist requiredParents="15,20" excludeParents="5,6"}
{display name=categories format=categorylist singleList=y separator=", "}

(Tiki 9|티키 9) 위키 플러그인
{display name="wikiplugin_addtocart" format=wikiplugin code="tracker_field_42" description="tracker_field_43" price="tracker_field_44"}↵
(Tiki 11|티키 11)↵
{display name="wikiplugin_img" format="wikiplugin" fileId="tracker_field_pic" thumb="box" default="fileId=42"})
{CODE}

/////
__정렬 모드 설정하기__
정렬은 일반적으로 문자열에 기반한다는 것에 유의하여 주십시오. 숫자로 정렬을 시도하는 경우, 모든 숫자가 같은 자릿수를 가져야 한다는 점을 확인하여 주십시오. 그렇지 않은 경우, 문자열 정렬을 하게되는 경우, 2가 12보다 높을 수 있습니다.
{CODE()}
{sort mode="tracker_field_18_asc"}
{sort mode="tracker_field_18_desc"}
{CODE}
숫자 정렬을 원하는 경우 (12가 2보다 커야되는), 다음을 대신 사용하십시오 (티키 8부터):
{CODE()}
{sort mode="tracker_field_18_nasc"}
{sort mode="tracker_field_18_ndesc"}
{CODE}
티키 8부터는, 짧은 목록을 표시할 때 무작위 결과를 시뮬레이트하는 방법도 있습니다. 물론 이는 페이지 매김 기능과는 호환되지 않습니다. 무작위로 선택을 할 관련성없는 필드들 상에서 정렬 모드의 목록을 지정해야만 합니다, 예를 들면:
{CODE(wrap="1")}{sort mode="randommode" modes="tracker_field_18_nasc,tracker_field_18_ndesc,tracker_field_19_asc,trackerfield_19_desc"}
{CODE}

/////
__위키 서식적용 (별도의 위키 페이지 내부에서)__
(티키 8부터 사용 가능) 이는 플러그인 내부에서 위키 서식적용과 동일합닏마ㅏㄴ 각 항목의 서식적용이 별도의 위키 페이지 상에 있을 수 있다는 점이 다릅니다. 먼저:

{CODE(caption=별도의 위키 페이지 출력 샘플)}
{LIST()}
    {output wiki=ResultsTemplatePageName"}
    {FORMAT(name=label)}{display name=title format=objectlink}
{display name=description}{FORMAT}
    {FORMAT(name=description)}{display name=description}{FORMAT}
{LIST}
{CODE}

그리고 나서, "ResultsTemplatePageName" 라는 위키 페이지 템플릿을 만들고 다음의 내용을 삽입합니다

{CODE(caption=별도의 위키 페이지 서식적용 샘플)}
{literal}
This is the label: {display name=label}
This is the description: {display name=description}
{/literal}
{CODE}

{display name=label} 과 {display name=description} 이 일반적인 스마티 변수들로 구문분석되는 것을 막기 위하여 "문자 그대로의" 스마티 태그가 요구된다는 점에 유의하십시오.

템플릿 내부에 HTML 의 사용을 원하는 경우, 올바른 방법은 다음과 같습니다:

{CODE(caption=별도의 위키 페이지 서식적용 샘플)}
{literal}
{HTML(wiki=1)}
<div>This is the label: {display name=label}</div>
<div>This is the description: {display name=description}</div>
{HTML}
{/literal}
{CODE}
__고급 스마티 서식적용__
추가 고급 서식적용에 대하여, 이 플러그인은 디스크에 저장된 스마티 템플릿에 의존할 수 있습니다. 템플릿은 resultset (결과세트) 에 입력으로써 보내집니다.

출력 플러그인의 컨텐츠는 템플릿 매개변수가 설정되었을 때 무시됩니다.

{CODE(caption="템플릿 파일 사용하기")}
{LIST()}
    {output template=/path/to/file.tpl}

    {FORMAT(name="label")}{display name=title format=objectlink}
{display name=description}{FORMAT}
{LIST}
{CODE}

^__경고: 스마티 IF 를 사용할 때:__
Please note that if you are using 스마티 if 를 사용하는 경우 혹은 기타의 경우 평범한 서식기를 사용하여 반환된 변수들의 값에 대하여 검사를 할 때, 그러한 변수들의 값은 단순히 문자열이 아니고 noparse 태그들을 보유하고 있다는 점에 유의하십시오. 이러한 no parse 태그들은 추가적인 줄바꿈과 다른 위키 구문분석 잔재들이 나타나는 것을 막기위하여 필요합니다. 간단하게 서식적용되지 않는 변수들의 값을 대신 검사하는 것을 추천합니다.

예를 들면: ~126~~110~~112~~126~This is the string~126~~47~~110~~112~~126~

((Tiki11|티키11)) 부터는 출력물이 위키구문분석 될것이라고 고려되는 것을 피하기위하여 FORMAT 플러그인에서 mode=raw 를 추가할 수 있습니다.
^

{TABS}
!!문법에 관한 주의사항

* 컨텐츠 필터 내부의 필드 인수는 쉼표로 분리된 여러 개의 필드들을 포함할 수 있습니다.

!!사용가능한 필드들

필드 목록은 ((Search and List from Unified Index|검색 색인)) 설명서에서 찾으실 수 있습니다.

!!제공되는 필터
||__이름__|__설명__|__논리 연산자__|__예제__|__티키 버전__
범주(categories)|개체의 직접적으로 연관된 범주에 일치|예|1 OR 3|7
컨텐츠(content)|개체의 컨텐츠의 전부 상에 전체 텍스트 검색 %%% 기본 대신 다른 필드에 대하여 검색을 위하여 부가적 필드 변수가 제공될 수 있습니다.|예|hello world|7
깊은범주(deepcategories)|개체의 범주들 혹은 그 부모들에 일치, deep검색을 제공함|예|1 OR 3|8
언어(language)|사용가능한 경우 개체의 언어를 검색 (2개 알파벳 코드). 지정되지 않은 경우 ''unknown'' (알려지지 않음) 가 사용됨.|예*|en or fr OR unknown|7
유형(type)|개체 유형을 필터|아니오|__wiki page__ (티키 8에서부터는 쉼표로 분리된 목록을 이용하여 여러 유형에 대하여 검색을 할 수 있습니다)%%%트래커를 검색하려면 __trackeritem__|7/8%%% %%%11 혹은 그 이전
field (필드)|트래커를 검색하려면 (type=trackeritem 에 대하여 필드 지정|???|예 __field_=tracker_id__|11 혹은 그 이전
범위(range)|날짜 범위 (유닉스 타임스탬프) %%% 시작(from)과 끝(to) 인수가 지정되어야만 합니다|아니오|<searchfieldname>|8
범위(range)|티키 9에서는 유닉스 타임스탬프 대신 시작(from)과 끝(to)에 "now"를 취할 수 있습니다, 그리고 from과 to 중 하나 혹은 둘 다를 다른 것에 상대적으로 지정하기 위하여 "gap" 을 설정할 수도 있습니다|아니오|<searchfieldname>|9
텍스트범위(textrange)|텍스트 범위 %%% from과 to 인수가 지정되어야만 합니다|아니오|<searchfieldname>|8
관계(relation)|특정 관계가 있어야만 합니다 %%% 추가 필드 인수 objecttype 과 qualifier (관계)가 반드시 지정되어야만 합니다|아니오|<object_id>|8
즐겨찾기(favorite)|특정 사용자의 선호하는 개체만을 보여줍니다|아니오|~np~{{~/np~user~np~}}~/np~|8
기여(contributors)|컨텐츠에 대하여 기여자로써의 검색할 사용자 로그인|예|admin OR testuser|8
||

~np~*~/np~ AND 매칭은 단수의 값 필드에서는 별 의미가 없을 것입니다

!!논리 연산자 문법
여기에 설명이 이후 추가되어야 함, 현재는 ((dev:UnifiedSearch)) 를 참고하여 주십시오.

접근가능한 변수들:
* $results, 결과 집합을 포함. 각 결과는 검색 질의에 의하여 제공되는 모든 값들을, 수동으로 요청된 것들과 함께 포함합니다.
* $count, 총 결과 개수
* $maxRecords, 페이지 당 결과의 양
* $offset, 결과 오프셋
티키8에서는 다음이 추가되었습니다:
* $offsetplusone, 기본적으로는 $offset + 1 입니다, 그러므로 "Showing results 1 to ...." (1부터 ..까지의 결과 표시) 라고 표시할 수 있습니다
* $offsetplusmaxRecords, 기본적으로 $maxRecords + $offset 입니다, 그러므로 "1부터 25까지의 결과 표시"라고 표시할 수 있습니다
* $results->getEstimate(), 이는 가능한 결과의 총 수의 예측입니다, 이는 관리...검색 내부에 설정된 최대 Lucene검색 결과에 의하여 제한되는 반환한 결과의 $count 를 초과할 수 있습니다

{BOX(title="페이지 매김을 포함")}템플릿 밑에 페이지 매김을 포함하려면, ''pagination=1'' 을 사용할 수 있습니다, 이는 위키 서식적용할 때와 같습니다. 하지만, 다른 곳에서 페이지 매김을 두고 싶은 경우, 스마티를 사용하여 할 수 있습니다. ''pagination=1'' 부분을 건너뛰십시오.

{CODE(caption="티키8")}
{pagination_links resultset=$results}{/pagination_links}
{CODE}{BOX}
!!예제
!!! 예제 TPL 파일
{CODE(caption="cart 플러그인에 추가내역을 표시하는 예제" wrap="1" colors="html")}
<table>
  {foreach from=$results item=row}
    <tr>
      <td>
        <h3>{$row.title}</h3>
        <p><em>Category: {$row.category}</em> <strong>Price:</strong> {$row.price}</p>
        {wikiplugin _name="addtocart" code=$row.tracker_field_20 description=$row.tracker_field_21|escape price=$row.tracker_field_24}{/wikiplugin}
      </td>
    </tr>
  {/foreach}
</table>

{pagination_links resultset=$results}{/pagination_links}
{CODE}

''주의: (최소한)티키 9.0 에서는  $row 값들이 역방향의 구문분석 없는 태그로 둘러쌓여 있습니다, 그러므로 TPL 내부에 값에 대하여 테스트를 원하는 경우 (예. price == 0 인 경우) 다음을 사용해야 할 것입니다:''
{CODE()}{if $row.stock neq '~ /np~0~np~'} {CODE}(하지만 첫 번재 ~ 와 / 사이에 스페이스 없음)
!!! 예제 블로그 게시물 목록
''다음 코드:''
{CODE(wrap=1)}
{LIST()}
   {list max="10"}
   {filter type="blog post"}
{LIST}
{CODE}

''는 이 사이트상에서 다음을 생성하게 될 것입니다:''

{LIST()}
   {list max="10"}
   {filter type="blog post"}
{LIST}