Modx 필터. MODx에서 if else 조건 사용

오늘 유용한 기사 phx 필터 및 해당 수정자 MODX Revo에 대해 템플릿 내에서 바로 다양한 태그의 값을 조작할 수 있습니다.

그들은 무엇을 위해 필요합니까?

phx 수정자는 modx 개발자의 삶을 더 쉽게 만듭니다. 필요한 이미지 캐러셀(또는 배너)이 있는 웹사이트가 있다고 가정해 보겠습니다. 에만 출력 홈페이지 . 이렇게 하려면 별도의 청크에 넣은 다음 이 구성을 사용하여 템플릿에 표시하면 됩니다.

어디: 1 — 홈페이지 ID,
$carusel— 캐러셀(배너) 코드가 포함된 청크입니다.
전체 찻주전자만 생성됩니다. 새 템플릿, 몇 줄의 캐러셀 코드를 위해. 나도 그랬고, 일반적으로 우리는 절망하지 않고 phx를 개발에 도입합니다.

위의 구조를 좀 더 자세히 살펴보겠습니다.

[[*id:is=`1`:then=`[[$carusel]]`]]

*ID— ID 표시 현재 페이지;

:is=`1`:그러면=

- 같은지 확인 *ID == 1? 동일하면 내용이 출력됩니다. 그 다음에;
$carusel— 캐러셀 청크를 표시합니다.

*id 대신 다른 필드를 사용할 수 있습니다. 예를 들어 *template - 현재 사용되는 템플릿을 표시합니다. 또는 TV 필드가 채워졌는지 여부(*키워드로 두기)를 확인하고, 채워져 있으면 표시할 수 있습니다. 이 사례를 좀 더 자세히 살펴보겠습니다. 표준 마크업은 다음과 같습니다.

일: TV 키워드가 비어 있으면 이 행을 표시하지 마십시오.
해결책.

[[*키워드:!empty=` `]]

잔뜩

수정자의 처리를 모니터링해야 합니다. 수정자를 무분별하게 사용하면 불필요한 로드가 발생합니다. 회전목마로 돌아가자. 이 항목왼쪽에서 오른쪽으로 읽고 MODH는 조건의 참 여부, 내용이 현재 페이지에 표시되는지 여부에 관계없이 모든 중첩 조건을 실행합니다. [[$carusel]], 어떤 경우에도 해당 내용이 처리됩니다. 이와 관련하여 항목을 다시 작성하는 것이 더 적절합니다.

[[$caru[[*id:is=`1`:then=`sel`]]]]

이 경우 청크의 내용은 $carusel, 조건이 충족되면 처리됩니다.

*id:is=`1`

왜냐하면 수행

[[*id:is=`1`:then=`sel`]]

현재 페이지의 ID가 1이면 마지막으로 처리되는 것은 [[$carusel]], id가 1이 아닌 경우 - [[$카루]]. 그리고 청카라면 $caru- 요소에 없으면 로드가 발생하지 않습니다.

일반적으로 이상적인 출력은 다음과 같습니다.

[[$[[*id:is=`1`:then=`carusel`]]]]

레이아웃을 적절하게 통합하는 방법에 대해 Modx 레보나는 여기를 읽는 것이 좋습니다.

메모! 사이트 구성 요소의 논리에 맞게 수정자를 원하는 만큼 결합할 수 있지만 기억해야 할 가장 중요한 점은 수정자의 주요 본질은 다음과 같습니다. 개발을 더 쉽게, 이미 복잡한 작업을 복잡하게 만들지 않습니다. 일반적으로 가장 효과적이고 효과적인 방법- 디자인이 더 단순하고 명확할수록 나중에 작업하기가 더 쉬워지기 때문에 이것이 가장 간단합니다. 다음은 모든 MODH Revo 태그에 사용할 수 있는 주요 수정자입니다.

수정자 체인

좋은 예연결은 날짜 문자열의 형식을 다음과 같이 다른 형식으로 지정합니다.

[[+mydate:strtotime:date=`%Y-%m-%d`]]

스니펫 대신 출력 수정자를 사용하여 데이터베이스의 "modx_user_attributes" 테이블에 대한 직접 액세스는 수정자를 사용하여 간단히 수행할 수 있습니다. 사용자 정보. 테이블에서 적절한 열을 선택하고 이를 출력 수정자 속성으로 지정합니다. 예를 들면 다음과 같습니다.

내부 사용자 키: [[!+modx.user.id:userinfo=`internalKey`]] 로그인: [[!+modx.user.id:userinfo=`username`]] 전체 이름: [[!+modx.user .id:userinfo=`fullname`]] 역할: [[!+modx.user.id:userinfo=`role`]] 이메일: [[!+modx.user.id:userinfo=`email`]] 전화: [[!+modx.user.id:userinfo=`phone`]] 휴대폰: [[!+modx.user.id:userinfo=`mobilephone`]] 팩스: [[!+modx.user.id :userinfo=`fax`]] 생일: [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]] 성별: [[!+modx.user . id:userinfo=`gender`]] 국가: [[!+modx.user.id:userinfo=`country`]] 주: [[!+modx.user.id:userinfo=`state`]] 우편번호: [[!+modx.user.id:userinfo=`zip`]] 사진: [[!+modx.user.id:userinfo=`photo`]] 댓글: [[!+modx.user.id:userinfo = `comment`]] 날짜 마지막 로그인: [[!+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]] 로그인 횟수: [[!+modx.user.id:userinfo=`logincount` ] ]

느낌표에 특히 주의하세요 [[ ! +modx.user.id]]. 그것은 허용한다 캐시하지 마세요출력 내용. 왜 캐시하면 안 되나요? 다음과 같이 상상해 봅시다. 사이트에 5명의 사용자가 있습니다. 첫 번째 사용자가 챌린지가 있는 페이지를 방문했습니다.

[[!+modx.user.id:userinfo=`username`]]님, 환영합니다!

계획대로 이 페이지에는 사용자에게 환영 메시지가 표시됩니다. 따라서 결과가 캐시되면 이 페이지에 처음 입장할 때 방금 입력한 사용자의 이름이 저장되고 다른 모든 사용자에게는 자신의 이름이 아닌 이 페이지에 처음 들어온 사용자의 이름이 표시됩니다. . 이를 방지하기 위해 다음을 사용하여 이 태그를 캐시하지 않습니다. 느낌표전화하기 전에 [[ ! +modx…

P.s.: 잊지 마세요 끄다필요한 곳에 태그를 캐싱하세요! 이렇게하려면 다음이 필요합니다. 제거하다느낌표에서 ( ! ) . 대부분의 조각 결과는 캐시에서 쉽게 작동할 수 있습니다. 다음 강의에서 살펴보겠습니다.

Revolution의 필터를 사용하면 특정 태그가 처리되는 방식을 조작할 수 있습니다. 템플릿 내에서 바로 값을 변경할 수 있습니다.

입력 필터

현재 입력 필터는 출력 필터 처리를 준비하는 데 사용됩니다. 일반적으로 MODX 엔진 내부에서만 사용됩니다.

출력 필터

Revolution에서 출력 필터는 Evolution의 PHx와 동일한 방식으로 작동하며 이제 필터만 MODX 엔진에 직접 내장됩니다. 구문은 다음과 같습니다.

[]

필터는 순차적으로 적용될 수 있습니다. 이렇게 하려면 왼쪽에서 오른쪽으로 한 줄로 작성하세요.

[]

필터를 사용하여 스니펫의 출력을 수정할 수도 있습니다. 필터는 모든 매개변수 앞에(물음표 앞에) 지정되어야 합니다.

[]

출력 수정자

표에는 몇 가지 수정자와 그 사용 예가 나와 있습니다. 예제에서는 수정자가 자리 표시자에 적용되지만 모든 MODX 태그에 적용될 수 있다는 점을 기억해야 합니다. 사용하는 태그가 적어도 수정자가 처리할 내용을 출력하는지 확인하세요.

조건부 출력 수정자

수정자 설명 사용예
만약, 입력 다음 수정자의 입력으로 임의의 텍스트를 전달합니다. [[*id:input=`[[+placeholder]]`:is=`1`:then=`Yes`:else=`No`]]
또는 또는 [[+numbooks:is=`5`:or:is=`6`:then=`여기에 5~6권의 책이 있습니다`:else=`몇 권의 책인지 잘 모르겠습니다`]]
그리고 여러 수정자를 링크로 결합 그리고 [[+numbooks:gt=`5`:and:lt=`10`:then=`여기에 5~10권의 책이 있습니다`:else=`5권 미만이거나 10권 이상이 있습니다`]]
isequalto, isequal, 같음, 같음, is, eq 전달된 값과 설정된 값을 비교합니다. 값이 일치하면 "then"값이 표시되고 그렇지 않으면 "else"값이 표시됩니다. [[+numbooks:isequalto=`5`:then=`여기에 책이 5권 있습니다`:else=`책이 몇 권인지 잘 모르겠습니다`]]
notequalto, notequals, isnt, isnot, neq, ne 전달된 값과 설정된 값을 비교합니다. 값이 일치하지 않으면 "then"값이 표시되고, 그렇지 않으면 "else"가 표시됩니다. [[+numbooks:notequalto=`5`:then=`책이 몇 권인지 잘 모르겠습니다`:else=`책이 5권 있습니다`]]
보다 큼, 같음보다 큼, ge, 예: isgte, gte 동일하며 조건만 "크거나 같음"입니다. [[+numbooks:gte=`5`:then=`여기에 5권 이상의 책이 있습니다`:else=`여기에는 5권 미만의 책이 있습니다`]]
isgreaterthan, 더 큼, isgt, gt 동일합니다. "엄격히 더"라는 조건만 적용됩니다. [[+numbooks:gt=`5`:then=`여기에 5권 이상의 책이 있습니다`:else=`5권 이하의 책이 있습니다`]]
같음보다 작음, 작음보다작음, el, le, islte, lte 동일하며 조건만 "작거나 같음"입니다. [[+numbooks:lte=`5`:then=`여기에는 5권 이하의 책이 있습니다`:else=`여기에는 5권 이상의 책이 있습니다`]]
islowerthan, islessthan, lowerthan, lessthan, islt, lt 동일합니다. "엄격히 적음"이라는 조건만 적용됩니다. [[+numbooks:lte=`5`:then=`여기에 5권 미만의 책이 있습니다`:else=`여기에 5권 이상의 책이 있습니다`]]
숨다 조건이 true인 경우 요소를 숨깁니다. [[+numbooks:lt=`1`:숨기기]]
보여주다 조건이 true인 경우 요소를 표시합니다. [[+numbooks:gt=`0`:표시]]
그 다음에 조건을 만드는 데 사용됩니다. [[+numbooks:gt=`0`:then=`책 재고가 있습니다!`]]
또 다른 조건을 만드는 데 사용됩니다(“then”과 함께). [[+numbooks:gt=`0`:then=`책 재고가 있습니다!`:else=`죄송하지만 모든 상품이 매진되었습니다.`]]
memberof, ismember, 미주리 사용자가 지정된 사용자 그룹의 구성원인지 확인합니다. [[!+modx.user.id:memberof=`관리자`]]

문자열 작업을 위한 수정자

수정자 설명 사용예
고양이 태그 뒤에 값을 추가합니다. [[+numbooks:cat=`책`]]
lcase, 소문자, strtolower 모든 문자를 소문자로 변환합니다. [[+제목:lcase]]
ucase, 대문자, strtoupper 모든 문자를 대문자로 변환합니다. [[+제목:ucase]]
유워드 단어의 첫 글자를 대문자로 씁니다. [[+제목:ucwords]]
유우퍼스트 문자열의 첫 글자를 대문자로 바꿉니다. [[+이름:ucfirst]]
htmlent, htmlentities 모든 문자를 해당 HTML 엔터티로 변환합니다. [[+이메일:htmlent]]
esc, 탈출 다음을 사용하여 안전하게 문자를 이스케이프합니다. 정규 표현식그리고 `str_replace()`. 또한 MODX 태그를 이스케이프합니다. [[+이메일:탈출]]
조각 모든 하이픈, 탭 및 여러 공백을 단 하나의 공백으로 바꿉니다. [[+텍스트문서:스트립]]
스트립스트링 문자열에서 지정된 하위 문자열을 잘라냅니다. [[+name:stripString=`Mr.`]]
바꾸다 하위 문자열을 대체합니다. [[+pagetitle:replace=`Mr.==부인`]]
스트립태그, 스트립태그, 알림, 스트립태그 모든 태그를 잘라냅니다(허용된 태그를 지정할 수 있음). 안전 목적으로 사용하지 마십시오. [[+코드:스트립_태그]]
len,길이,strlen 문자열의 길이를 인쇄합니다. [[+긴문자열:strlen]]
역방향, strrev 문자열을 문자별로 반전합니다. [[+미러텍스트:역방향]]
줄 바꿈 매 n번째 문자 뒤에 줄 바꿈을 삽입합니다(단어가 끊어지지 않음). [[+bodytext:wordwrap=`80`]]
워드랩컷 이 문자가 단어 안에 있더라도 n번째 문자마다 줄바꿈을 삽입합니다. [[+bodytext:wordwrapcut=`80`]]
한계 줄의 시작 부분부터 지정된 수의 문자를 인쇄합니다(기본값은 100). [[+설명:한도=`50`]]
생략 줄임표를 추가하고 줄이 지정된 문자 수보다 길면 줄을 자릅니다(기본값은 100). [[+설명:줄임표=`50`]]
꼬리표 차폐. :tag 없이 요소를 있는 그대로 표시합니다. 문서에 사용하기 위해 [[+showThis:태그]]
추가, 증가, 증가 지정된 숫자를 더합니다(기본값 +1). [[+다운로드:incr]] [[+블랙잭:추가=`21`]]
빼기, 감소, 감소 지정된 숫자를 뺍니다(기본값 -1). [[+countdown:decr]] [[+moneys:subtract=`100`]]
곱하기, mpy 지정된 숫자를 곱합니다(기본값 *2) [[+trifecta:mpy=`3`]]
나누기, div 지정된 숫자로 나눕니다. (기본값 /2) [[+등급:div=`4`]]
모듈러스, 모드 숫자의 모듈러스를 반환합니다(기본값: %2, 0 또는 1 반환). [[+번호:모드]]
비어 있는 경우,기본값,비어 있는 경우,비어 있는 경우 태그 값이 비어 있으면 수정자 값을 반환합니다. [[+name:default=`익명`]]
비어 있지 않음, !비어 있음, 비어 있지 않으면 비어 있지 않음 태그 값인 경우 수정자 값을 반환합니다. 아니다비어 있는 [[+name:notempty=`안녕하세요 [[+name]]!`]]
nl2br 문자를 대체합니다. 새 줄\n HTML br 태그에 [[+텍스트파일:nl2br]]
날짜 지정된 형식(날짜 형식)에 따라 타임스탬프를 텍스트로 변환합니다. [[+생년월일:날짜=`%Y`]]
strtotime 날짜를 텍스트로 UNIX 타임스탬프로 변환합니다. [[+시간:strto시간]]
퍼지 날짜 타임스탬프를 승인하고 "오늘 오후 16시 20분" 형식으로 날짜를 반환합니다. [[+createdon:퍼지날짜]]
~ 전에 태그에 지정된 날짜 이후 경과된 초, 분, 주 또는 월 수를 반환합니다. [[+createdon:이전]]
MD5 값의 MD5 해시를 생성합니다. [[+비밀번호:md5]]
cdata CDATA 태그로 출력을 래핑합니다. [[+콘텐츠:cdata]]
사용자 정보 사용자 프로필에서 요청된 값을 반환합니다. 사용자 ID가 필요합니다 [[!+modx.user.id:userinfo=`사용자 이름`]]
로그인 상태 현재 컨텍스트에서 사용자에게 권한이 부여된 경우 1을 반환합니다. [[!+modx.user.id:isloggedin:is=`1`:then=`Yes`:else=`No`]]
로그인하지 않았습니다 사용자인 경우 1을 반환합니다. 아니다현재 상황에서 승인됨 [[!+modx.user.id:isnotloggedin:is=`1`:then=`No`:else=`Yes`]]
우렌코드 값을 URL로 변환합니다. 즉, PHP `urlencode()` 함수를 사용합니다. [[+mystring:urlencode]]
URL디코드 값을 URL에서와 같이 변환합니다. 즉, PHP 함수 `urldecode()`를 사용합니다. [[+myparam:urldecode]]

각 사용자가 최신 데이터를 볼 수 있도록 사용자 작업을 위한 수정자는 캐시되지 않은 상태로 호출되어야 합니다.

매개변수와 함께 출력 수정자 사용

태그에 매개변수가 있는 경우 수정자 바로 뒤에 매개변수를 작성해야 합니다.

[[!getResources:default=`죄송합니다. 아무것도 찾을 수 없습니다`? &tplFirst=`blogTpl` &parents=`2,3,4,8` &tvFilters=`blog_tags==%[[!tag:htmlent]]%` &includeTVs=`1` ]]

사용자 정의 수정자 만들기

모든 조각을 출력 수정자로 사용할 수 있습니다. 이렇게 하려면 수정자 대신 코드 조각 이름을 지정하면 됩니다. 예를 들어 출력에 특정 개수의 느낌표를 추가하는 조각 []을 만들어 보겠습니다.

[[*pagetitle:makeExciting=`4`]]

이러한 태그 호출은 처리를 위해 makeExciting 스니펫에 다음 매개변수를 전달합니다.

매개변수 의미 예시 값

모두 건강하세요. 이 기사에서는 실행 중인 웹사이트에서 TV 매개변수를 기반으로 문서 필터를 만드는 방법을 설명하겠습니다. Modx 혁명. 우리는 스니펫을 사용할 것입니다 태그관리자2~에서 안치르. 이 스니펫은 여러 대의 TV에서 동시에 작동할 수 있을 뿐만 아니라 숫자 데이터(가격 형식) 및 다중 목록에서도 작동할 수 있습니다. 우리는 이러한 각 예를 더 자세히 분석할 것입니다.

1. 먼저 tagManager2를 설치해야 합니다.

이를 위해 우리는 응용프로그램/설치자/

버튼을 누르세요 "추가 기능 다운로드"그리고 검색창에 입력하세요 태그관리자2

또한 스니펫을 설치해야 합니다. getPage 및 getProducts. 따라서 섹션 "패키지 관리"다음과 같아야 합니다(그런데 음역 코드 조각은 별칭을 라틴어로 음역하는 역할을 담당합니다).

패키지를 다운로드하고 설치한 후 다음으로 이동하세요. "환경 설정"

2. tagManager2 스니펫 설정

안에 환경 설정 tag_manager2 섹션을 선택하세요

필터 설정 옵션이 표시됩니다.

모든 것이 매우 간단하고 명확하지만 여전히 다음과 같습니다.

  • 안에 "최상위 디렉터리 리소스 ID"제품이나 페이지가 필터링될 카탈로그 템플릿 또는 카테고리의 ID를 지정하세요.
  • 안에 "추가 다중 목록 구분 기호"# 기호를 넣으세요. 아래에서 왜 필요한지 알아볼 수 있습니다.
  • 안에 "TV 또는 다중 목록 필드 이름"다중 목록으로 TV를 등록하세요. 아래에서 만드는 방법을 보여 드리겠습니다.
  • "TV 이름 또는 필드 이름 수치» - 여기서는 숫자가 포함될 TV 매개변수를 지정해야 합니다. 이는 일반적으로 가격 매개변수입니다. 이 필터"시작 및 끝" 슬라이더로 표시됩니다.
  • 안에 '제품 템플릿 ID'필터링이 필요하고 위에 지정된 TV 매개변수가 첨부된 페이지의 ID를 기록합니다.
  • 안에 "필터링에 사용되는 매개변수 세트의 이름" Catalog_filters를 등록하세요. 이 템플릿매개변수 템플릿에서 사용할 것입니다. 페이지 가져오기그리고 getProducts
  • 등록하다 "매개변수 세트와 연관된 스니펫"페이지나 제품을 표시하고 페이지를 매기는 코드 조각의 이름입니다. 보통 이 페이지 가져오기.

3. getPage에서 Catalog_filters 매개변수 세트를 생성합니다.

getPage 스니펫으로 이동해 보겠습니다.

탭으로 이동 "옵션"그리고 버튼을 누르세요 "매개변수 세트 추가". 물론 기존 항목을 편집할 수 있지만 getPage를 업데이트할 때 이제 생성할 매개변수를 덮어쓸 가능성이 있습니다. 업데이트하지 않을 경우에는 편집만 하면 됩니다.

기존 매개변수를 편집하고 값을 지정합니다.

새 매개변수 생성 및 값 할당

편집된 매개변수가 표시됩니다. 녹색, 생성됨 - 보라색

4. 필터에 대한 TV 매개변수 생성 또는 편집

예를 들어 3개의 TV 매개변수를 만들었습니다.

TV 매개변수의 이름(제목)을 지정해야 한다는 사실에 특별한 주의를 기울이고 싶습니다. 그렇지 않으면 필터 제어 모듈에 표시되지 않을 수도 있습니다.

5.청크 fitr_tpl 생성

이 청크는 getProducts의 각 개별 결과를 출력하는 역할을 담당합니다.

6. 문서 트리에 구조 만들기

나에게는 다음과 같습니다.

메인 페이지의 ID는 1이고 제품의 템플릿 ID는 1입니다(tag_manager2 설정에 이 값이 있습니다. 다른 값이 있는 경우 설정에서 변경하는 것을 잊지 마세요).

7. filter.js 편집

주소로 가보자 /assets/comComponents/tag_manager2/js/web/filters.js그리고 대신

멀티태그: ["태그"],//추가 이름. 여러 값이 있는 필드

대체된 값으로 코드를 삽입하세요.

다중 태그: ["filtr1", "filtr2"],//추가 이름. 여러 값이 있는 필드

여기의 모든 것은 매우 간단하고 명확합니다. 여러 값을 사용하여 tv 필드를 삽입했습니다. 일반적으로 이것은 모든 설정의 구성입니다(하지만 큰 사람의 허락 없이는 건드리지 않는 것이 좋습니다. 즉, 모듈 작성자의 조언을 의미합니다)

8. 필터 및 필터링 결과 표시

필터 그 자체

[]
[[+필터]]

페이지 매김으로 결과 표시

[[!tm카탈로그]]
    [[!+page.nav]]

결과 정렬

9. 필터 활성화

이제 필터를 활성화하기만 하면 됩니다. 이를 위해 우리는 애플리케이션/필터 관리.

여기에서 각 필터 옆의 확인란을 선택하고 버튼을 클릭해야 합니다."구하다" .

모든 작업을 올바르게 수행했다면 필터가 작동해야 합니다. 그게 다야. 궁금한 점이 있으시면 댓글로 질문해 주시면 답변해 드리겠습니다. 일반적으로 tagManager2 에 대한 문서는 다음과 같습니다. 개발에 행운을 빕니다. 안에 "데모" tagManager2를 사용하여 필터를 구현하는 내 사이트 중 하나

예, 웹사이트에 Ajax 필터를 구현하는 또 다른 방법 =)

페이지에 일반적인 리소스 목록을 간단히 표시하는 것부터 시작해 보겠습니다. AJAX 작업을 위한 자체 메커니즘을 작성하지 않고 pdoPage에 있는 AJAX 메소드를 사용하므로 AJAX 페이지 매김이 제대로 작동하는지 확인하십시오.

("!pdoPage" | 조각: [ "ajaxMode" => "default", "parents" => 0, "limit" => 3, "includeTVs" => "height,weight,speed_type,price", "tvPrefix" => "", "tpl" => "@INLINE

($페이지제목)

무게: ($weight)

키: ($height)

유형: ($speed_type)

", ]}
("page.nav" | 자리표시자)

필터에는 이 레이아웃을 사용하겠습니다. 하지만 여기서 레이아웃은 특별한 역할을 하지 않습니다. 가장 중요한 것은 JS 코드에 올바른 클래스를 지정하는 것입니다.


필터 처리 JS 코드는 다음과 같습니다.

$(document).on("change keyup", "#filters input", function())( // pdoPage가 연결되었는지 확인 if (typeof(pdoPage) == "undefine") return; // 값 수집 ​​단일 배열의 모든 필터 중 var fields = (); $.each($("#filters").serializeArray(), function())( // 매개변수가 배열(체크박스)이 아닌 경우 모든 것이 간단한 if (this.name.indexOf("")<= 0) { fields = this.value; } else { // Для чекбоксов посложнее var name = this.name.replace("",""); if (typeof(fields) == "undefined") { fields = ; } fields.push(this.value); } }); // И отправляем этот массив на сервер. $.post(document.location.href, { action: "filter", fields: fields, // Параметр hash - обязательный (он содержит настройки pdoPage) hash: pdoPage.configs.page.hash }, function(data) { // Просим pdoPage загрузить новый список ресурсов var tmp = document.location.href.split("?"); pdoPage.keys.page = 0; pdoPage.loadPage(tmp, pdoPage.configs.page); }); });
이미 필터 값을 변경하면 리소스 목록이 업데이트됩니다. 이제 남은 것은 필터 처리 방법을 "설명"하는 것뿐입니다. 이렇게 하려면 이벤트용 플러그인을 만드세요. OnHandle요청:

컨텍스트->키 == "mgr" || 비어 있음($_SERVER["HTTP_X_REQUESTED_WITH"]) || $_SERVER["HTTP_X_REQUESTED_WITH"] != "XMLHttpRequest") 반환; switch ($_POST["action"]) ( case "filter": $output = array("success" => false, "message" => ""); // 해시가 수신되었는지와 pdoPage 매개변수가 수신되었는지 확인 존재하는 경우 ( isset($_POST["hash"]) && !empty($_POST["hash"]) && isset($_SESSION["pdoPage"][$_POST["hash"]]) && !empty($ _SESSION[" pdoPage"][$_POST["hash"]])) ( $hash = (string) $_POST["hash"]; // 필터링에 사용할 수 있는 TV만 지정 $tvs = array("height"," Weight" ,"speed_type"); // 선택 조건 채우기 $where = array(); foreach ($tvs as $tv) ( switch ($tv) ( case "price": // 체크박스 처리 예 if ( isset($_POST[ "fields"]["price"]) && !empty($_POST["fields"]["price"])) ( $where_price = ; foreach ($_POST["fields"]["price "] as $range ) ( $value = 폭발("-", $range); if (count($value) != 2) ( 계속; ) $min = (int) $value; $max = (int) $value; $where_range = "CAST(`TVprice`.`value` AS DECIMAL(13,3)) >= " . $min; if ($max) ( $where_range .= " AND CAST(`TVprice`.` 값` 십진수(13.3))<= " . $max; } $where_price = "(" . $where_range . ")"; } $where = "(" . implode(" OR ", $where_price) . ")"; } break; default: if (isset($_POST["fields"][$tv]) && $_POST["fields"][$tv] !== "") { $where[$tv] = $_POST["fields"][$tv]; } break; } } // Добавляем это условие в параметры pdoPage "на лету" $_SESSION["pdoPage"][$hash]["where"] = $where; $output["message"] = $where; $output["success"] = true; } else { $output["message"] = "Error"; } echo $modx->toJSON($output); 주사위(); 부서지다; 기본값: 중단; )
이제 필터가 작동하고 있습니다. 유일한 것은 pdoPage가 결과가 없을 때 무엇을 표시할지 "모른다"는 것입니다. 이 경우를 고려하여 파일을 만들어 보겠습니다. pdopage.custom.js매개변수에 지정하고 프론트엔드_js:

("!pdoPage" | 조각: [ "ajaxMode" => "default", "frontend_js" => "/assets/comComponents/pdotools/js/pdopage.custom.js", "parents" => 0, "limit" => 3, // ... )
표준 코드에서는 조건만 추가합니다. 또 다른서버의 응답이 비어 있는 경우:

// ... pdoPage.loadPage = function (href, config, mode) ( // ... $.post(config["connectorUrl"], params, function (response) ( if (response && response["total") ]) ( // ... ) else ( // 조건 추가 elsewrapper.find(rows).html("Nothingfound");wrapper.find(pagination).html("");wrapper.removeClass(" loading"); Wrapper.css((불투명도: 1)); if (config["mode"] == "default") ( $("html, body").animate((scrollTop: Wrapper.position(). 상단 - 50 || 0), 0); ) ) ), "json"); ); // ...
이것으로 간단한 AJAX 필터가 완성되었습니다.

이 기사에서 나는 당신에게 이야기하고 싶습니다. MODx의 필터(수정자).

원칙적으로는 그것들 없이도 살 수 있지만, 그것이 어떻게 어디서 사용되는지 알면 개발자는 작지만 때로는 매우 유용한 논리를 사이트에 추가할 수 있는 강력한 도구를 받게 됩니다.

이 기사에서 나는 MODx 혁명. 필터를 적용하는 기능은 기본적으로 MODx Revolution 코어에 이미 내장되어 있는 PHx 스니펫 덕분에 존재하지만 PHx는 Evolution 코어에 포함되어 있지 않으므로 Evo에 별도로 설치해야 합니다.

그래서, 필터자리 표시자와 태그를 구문 분석하여 얻은 데이터를 조작할 수 있습니다. 그들은 기회를 제공합니다 수정하다템플릿에서 직접 데이터를 얻을 수 있습니다.

필터 구문은 다음과 같습니다.

체인으로 배열할 수 있어 매우 편리합니다.

동시에 매개변수를 스니펫에 전달할 수도 있습니다. 가장 중요한 점은 스니펫 이름과 물음표 사이에 필터가 작성된다는 것입니다.

다음 표에는 일부 필터와 보여주는 중 애플리케이션. 예제에서는 자리 표시자를 사용하지만 모든 MODx 태그에 필터를 적용할 수 있으므로 자리 표시자가 실제로 무언가를 반환하는지 확인하세요.

조건부 수정자

수정자설명
또는 문자열 수정자와 함께 사용하여 논리적 AND 관계를 생성할 수 있습니다.
그리고 문자열 수정자와 함께 사용하여 논리적 "OR" 관계를 생성할 수 있습니다.
isequalto, isequal, 같음, 같음, is, eq 출력을 지정된 값과 비교하고 일치하는 경우 태그 구문 분석을 계속합니다. "then", "else"와 함께 사용됩니다. [[+numbooks:isequalto=`5`:then=`책이 5권 있습니다!`:else=`몇 권인지 잘 모르겠습니다`]]
notequalto, notequals, isnt, isnot, neq, ne 출력을 지정된 값과 비교하고 일치하지 않으면 태그 구문 분석을 계속합니다. "then", "else"와 함께 사용됩니다. [[+numbooks:notequalto=`5`:then=`책이 몇 권인지 잘 모르겠습니다`:else=`책이 5권 있습니다!`]]
보다 큼, 같음보다 큼, ge, 예: isgte, gte

출력을 지정된 값과 비교하고 출력이 전달된 값보다 크거나 같으면 태그 구문 분석을 계속합니다. "then", "else"와 함께 사용됩니다.

[[+numbooks:gte=`5`:then=`5권 또는 5권 이상`:else=`5권 미만`]]
isgreaterthan, 더 큼, isgt, gt

출력을 주어진 값과 비교합니다. 출력이 더 크면 구문 분석이 계속됩니다. "then", "else"와 함께 사용됩니다.

[[+numbooks:gt=`5`:then=`5권 이상 있습니다`:else=`5권 미만입니다`]]
같음보다 작음, 작음보다작음, el, le, islte, lte 출력을 지정된 값과 비교하고 출력이 전달된 값보다 작거나 같으면 태그 구문 분석을 계속합니다. "then", "else"와 함께 사용됩니다. [[+numbooks:lte=`5`:then=`5권 이하입니다`:else=`5권보다 많습니다`]]
islowerthan, islessthan, lowerthan, lessthan, islt, lt 출력을 주어진 값과 비교합니다. 출력이 적으면 구문 분석이 계속됩니다. "then", "else"와 함께 사용됩니다. [[+numbooks:lte=`5`:then=`5권 미만`:else=`5권 이상`]]
숨다 이전 조건을 확인합니다. true인 경우 요소를 숨깁니다. [[+numbooks:lt=`1`:숨기기]]
보여주다 이전 조건을 확인합니다. true인 경우 요소를 표시합니다. [[+numbooks:gt=`0`:표시]]
그 다음에 어떤 조건의 결과로 사용됨 [[+numbooks:gt=`0`:then=`지금 사용 가능합니다!`]]
또 다른 어떤 조건의 결과로 사용됩니다. "그때"와 함께 사용됩니다. [[+numbooks:gt=`0`:then=`지금 구매 가능합니다!`:else=`죄송합니다. 현재 매진되었습니다.`]]
memberof, ismember, 미주리 사용자가 특정 그룹에 속해 있는지 확인한 결과를 반환합니다. [[+modx.user.id:memberof=`관리자`]]

문자열 수정자

수정자설명
고양이 출력이 비어 있지 않으면 지정된 문자열을 출력에 추가합니다. [[+numbooks:cat=` 책`]]
lcase, 소문자, strtolower 문자열의 모든 문자를 소문자로 변환합니다. PHP 함수 strtolower와 동일 [[+제목:lcase]]
ucase, 대문자, strtoupper 문자열의 모든 문자를 대문자로 변환합니다. PHP 함수 strtoupper와 동일 [[+제목:ucase]]
유워드 문자열에 있는 모든 단어의 첫 글자를 대문자로 변환합니다. PHP ucwords 함수와 동일 [[+제목:ucwords]]
유우퍼스트 문자열의 첫 글자를 대문자로 변환합니다. PHP 함수 ucfirst와 동일 [[+이름:ucfirst]]
htmlent, htmlentities

PHP htmlentities 함수와 동일합니다. ENT_QUOTES 플래그와 함께 시스템 매개변수 "modx_charset"의 현재 값을 사용합니다.

[[+이메일:htmlent]]
esc,탈출 정규식과 str_replace를 사용하여 문자를 안전하게 기억합니다. 또한 [, ] 및 `를 이해합니다. [[+이메일:탈출]]
조각 모든 줄 바꿈, 탭 및 여러 공백을 단일 공백으로 바꿉니다. [[+텍스트문서:스트립]]
스트립스트링 문자열에서 지정된 하위 문자열을 제거합니다. [[+name:stripString=`Mr.`]]
바꾸다 하나의 하위 문자열을 다른 하위 문자열로 바꿉니다. [[+pagetitle:replace=`Mr.==부인`]]
스트립태그, 스트립태그, 알림, 스트립태그 지정된 태그를 제외한 모든 PHP 및 HTML 태그를 제거합니다. PHP Strip_tags 함수와 동일 [[+코드:strip_tags=`

`]]

len,길이,strlen 문자열의 길이를 인쇄합니다. PHP strlen 함수와 동일 [[+긴문자열:strlen]]
역방향, strrev PHP 함수 strrev와 동일 [[+미러텍스트:역방향]]
줄 바꿈 PHP 워드랩 기능과 동일합니다. 줄바꿈 위치 설정을 위한 최적의 값을 취합니다. [[+bodytext:wordwrap=`80`]]
워드랩컷 단어 나누기가 포함된 PHP 단어 감싸기 기능과 동일합니다. 줄바꿈 위치 설정을 위한 최적의 값을 취합니다. [[+bodytext:wordwrapcut=`80`]]
한계 문자열 길이를 제한(자릅니다)지정된 수의 문자로. 기본 길이 제한은 100자입니다. [[+설명:한도=`50`]]
생략 문자열을 지정된 문자 수만큼 자르고 줄임표를 추가합니다. 기본 제한은 100자입니다. [[+설명:줄임표=`50`]]
꼬리표 :tag 없이 호출된 요소를 표시합니다. 예를 들어 내 것과 같은 문서화에 유용합니다 =) [[+이것을 보여주세요]]
수학 계산 결과를 반환합니다(프로세서에 부하가 발생하므로 권장되지 않음).
추가, 증가, 증가 지정된 양(기본적으로 1씩)만큼 증가된 값을 반환합니다. [[+다운로드:증가]]
[[+블랙잭:추가=`21`]]
빼기, 감소, 감소 지정된 값을 값에서 감소시킵니다. (기본값: -1) [[+카운트다운:감소]]
[[+돈:빼기=`100`]]
곱하기,mpy 숫자를 곱한 결과를 반환합니다. (기본값: *2) [[+trifecta:mpy=`3`]]
나누기, div 숫자로 나눈 결과를 반환합니다. (기본값: /2) 0은 허용되지 않습니다. [[+등급:div=`4`]]
모듈러스, 모드 나눗셈의 나머지를 반환합니다(기본값: %2, 0 또는 1 반환). [[+번호:모드]]
비어 있는 경우,기본값,비어 있는 경우,비어 있는 경우 출력이 비어 있으면 주어진 문자열을 반환합니다. [[+name:default=`익명`]]
비어 있지 않음, !비어 있음, 비어 있지 않으면 비어 있지 않음 출력이 비어 있지 않으면 주어진 문자열을 반환합니다. [[+name:notempty=`안녕하세요 [[+name]]!`]]
nl2br PHP nl2br 함수와 동일합니다. 모든 줄바꿈은 다음으로 대체됩니다.
[[+텍스트파일:nl2br]]
날짜 PHP strftime 함수와 동일합니다. 형식은 값으로 전달됩니다. 날짜 형식을 참조하세요. [[+생년월일:날짜=`%Y`]]
strtotime PHP strtotime 함수와 동일합니다. 날짜에만 적용됩니다. 날짜 형식을 참조하세요. [[+시간:strto시간]]
퍼지 날짜 "오늘 13시 40분", "어제 18시 40분" 형식으로 날짜를 반환합니다. [[+게시됨:퍼지날짜]]
~ 전에 날짜부터 현재 순간까지의 초, 분, 시간, 주 등의 수를 반환합니다. 날짜에만 적용됩니다. [[+createdon:이전]]
MD5 PHP md5 함수와 동일합니다. [[+비밀번호:md5]]
cdata CDATA 태그로 문자열을 묶습니다. [[+콘텐츠:cdata]]
사용자 정보 요청된 사용자 데이터를 반환합니다. MODx의 사용자 ID에 적용됩니다. 수정자에는 반환해야 하는 필드가 포함되어 있습니다. [[+modx.user.id:userinfo=`사용자 이름`]]
로그인 상태 이 컨텍스트에서 사용자에게 권한이 부여되면 "true"를 반환합니다. [[+modx.user.id:isloggedin]]
로그인하지 않았습니다 이 컨텍스트에서 사용자에게 권한이 부여되면 "true"를 반환합니다. [[+modx.user.id:isnotloggedin]]
우렌코드 PHP urlencode 함수와 동일 [[+mystring:urlencode]]
URL디코드 PHP urldecode 함수와 동일 [[+myparam:urldecode]]

맞춤 수정자 만들기

스니펫은 수정자로 사용될 수 있습니다. 이렇게 하려면 필터 이름을 스니펫 이름으로 바꾸면 됩니다. 예를 들어 "makeDownloadLink"라는 스니펫이 있습니다.

[[+file:makeDownloadLink=`제목`]]

이 호출은 다음 매개변수를 스니펫에 전달합니다.


결과는 반환될 것입니다. 단편.

사용 예

다음은 필터가 차례로 호출되는 예입니다. 이 예에서는 문자열의 날짜 형식을 다른 형식으로 지정합니다.

[[+mydate:strtotime:date=`%Y-%m-%d`]]

코드 조각에서 데이터베이스의 modx_user_attributes 테이블에 직접 액세스하는 것은 간단히 userinfo 수정자를 사용하여 대체할 수 있습니다. 필수 필드를 얻으려면 데이터베이스의 열 이름을 수정자 매개변수에 전달해야 합니다.

내부 키: [[!+modx.user.id:userinfo=`internalKey`]]

사용자 이름: [[!+modx.user.id:userinfo=`사용자 이름`]]

전체 이름: [[!+modx.user.id:userinfo=`fullname`]]

역할: [[!+modx.user.id:userinfo=`role`]]

이메일: [[!+modx.user.id:userinfo=`email`]]

전화: [[!+modx.user.id:userinfo=`phone`]]

모바일: [[!+modx.user.id:userinfo=`mobilephone`]]

팩스: [[!+modx.user.id:userinfo=`fax`]]

생년월일: [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]]

성별: [[!+modx.user.id:userinfo=`gender`]]

국가: [[+modx.user.id:userinfo=`국가`]]

지역: [[+modx.user.id:userinfo=`state`]]

우편번호: [[+modx.user.id:userinfo=`zip`]]

아바타: [[+modx.user.id:userinfo=`photo`]]

공유하다