뷰의 노드 참조 컨텍스트 필터에서 노드 ID 대신 노드 제목 또는 경로 별명을 사용하는 방법은 무엇입니까?


7

노드 B에 대한 노드 참조가있는 노드 A가 있습니다.

뷰에서 특정 노드 B가 참조 된 모든 노드 A (nid : 123, title : node-B-title)를 보여줍니다.

문맥 필터에서 nid를 사용하는 대신 노드 제목을 사용하고 싶습니다. 예를 들어,

view-name/123

사용하고 싶습니다

view-name/node-B-title

내가 어떻게 할 수 있습니까?

답변:


10

나는 매우 비슷한 문제가 있었고 해결책을 찾았을뿐만 아니라보기 작동 방식에 대한 새로운 것을 배웠습니다. 내가 배운 내용과 문제에 대한 해결책도 알려 드리겠습니다.

하나 이상의 상황에 맞는 필터가있는보기를 작성하는 경우보기는 해당 필터의 값을 어딘가에서 받아야합니다. 이 작업을 수행 할 수 있습니다-

  1. URL에서 컨텍스트 필터 값 선택
    • 일반적으로 양식의 URL이 있거나 양식의 단일 컨텍스트 필터 OR 또는 여러 필터에 대한 페이지보기 가 있습니다.foo/%/barfoo/bar/%foo/%/bar/%foo/bar/%/%
    • 여러 개의 필터가있는 경우 먼저 나타나는 URL 값이 첫 번째 필터, 두 번째 필터 옆에 매핑됩니다.
  2. 보기를 사용하면 URL에서 필터 값을 사용할 수없는 경우 수행 할 작업 을 알 수 있습니다 . 이것은 일반적으로 블록 뷰에 사용됩니다 .
    • 다른 작업 중에서 선택한 다음 선택 항목을 구성 할 수도 있습니다. 다른 작업 중에서 선택한 다음 선택 항목을 구성 할 수도 있습니다. asdfj kajsdf
  3. 또 다른 관점은 위의 # 1에 설명 된 것처럼 URL에서 필터 값 이 발견되면 필터 값 으로 수행 할 작업 을 알려주는 것입니다 . 일반적인 사용 사례는 다음과 같습니다.-필터 값을 기반으로 동적 제목 만들기, 필터 값 확인 등
    • 필터 값의 유효성을 검사 할 때 값도 변경할 수 있습니다! (이것이 우리 솔루션이 btw 인 곳입니다). 이것은 drupal form validation 콜백에서 $ form 값을 변경할 수있는 방식과 매우 유사합니다. 여기에 이미지 설명을 입력하십시오

특정 문제에 대한 해결책 은 위 이미지의 화살표로 표시된 섹션에서 매우 유사한 코드를 사용하는 것입니다.

이 링크 는 저에게 큰 도움이되었습니다. 여기에서 발췌 한 내용이 있습니다.

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

이것은 나를 위해 작동하지 않았지만 저장시보기에서 아약스 오류가 발생했습니다.
DrCord

1

이것은 모든 상황에서 작동하지는 않지만 문제의 문제에 대한 한 가지 접근법은 노드 B (또는 노드 유형 B)의 실제 노드 표시를 사용하고 경로 또는 경로 자동 모듈을 사용하여 원하는 경로를 설정하는 것입니다. 그런 다음 views 블록을 사용하여 컨텐츠 관계와 원하는 뷰를 추가하십시오.

NID에 컨텍스트 필터를 사용한 다음 설정하십시오 Provide default value > Content ID from URL. 그런 다음 페이지 또는 페이지 세트에 views 블록을 추가하십시오.

컨텍스트를 통해 뷰 페이지가 아닌 노드 자체에서 뷰 블록을 사용할 수 있으면 원하는 경로와 원하는 뷰를 쉽게 얻을 수 있습니다.


1

수락 된 답변을 편집했지만 여기에 실제 코드를 추가하고 싶었습니다.

상황 별 필터의 유효성 검사 옵션에서 PHP 유효성 검사 옵션을 사용하십시오.

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

1

view 인수는 컨텐츠 유형의 필드 참조 여야하며, "기본 인수 제공"옵션을 선택하고 Id 노드 옵션 (이와 유사한 것)을 확인하십시오.

1) "X 필드 참조"인수 추가 2) URL에서 ID 노드 확인 (기본 인수 추가) 3) 유효성 검사 섹션에서 노드의 컨텐츠 유형을 확인하고 "노드 유형"설정에서 "노드 ID"를 선택하십시오.

그리고 끝났습니다. :)


"URL의 콘텐츠 ID"는 nid 만 제공합니다. 용어 참조를 사용하는 경우 "용어 이름을 용어 ID로 변환 한" "확인 기준"을 사용할 수 있습니다. 노드 참조의 경우 제목을 nid로 변환하는 유사한 옵션이 없습니다. 제목이 반드시 고유하지는 않기 때문일 수 있습니다.
uwe

네, 맞습니다 만, 인수는 반드시 필드 참조 (nid) 여야합니다.
Eleo

1) 검증 섹션에서 인수 "X 필드 참조"2) 추가 기본 인수 URL에서 ID 노드 (확인) 3)를 추가 노드의 콘텐츠 형식을 확인하고 "노드 유형"setion의 "노드 ID"를 선택
Eleo

실제 URL은 nid를 가질 수 있으며 경로 별명은 노드 제목이 될 수 있습니다. 이것은 작동하지 않습니까?
SGhosh

0

오래된 질문이지만 Google을 통해 그것을 발견하고 나중에 그것을 찾는 다른 사람을 위해 내 솔루션을 공유 할 것이라고 생각했습니다.

모듈 이름이 지금이 은 SafeWord (자동)는 URL 친화적 인 필드를 만듭니다 : 기본적으로 Sumeet Pareek 제안 정확히 않습니다.


0

확장 경로 별명 (path_alias_xt) 모듈을 권장합니다 . 구성없이 설치 하여이 문제를 완전히 해결합니다. 기본적으로 마술입니다. : D 실제로는 아니지만 모듈 페이지에서 발췌 한 내용은 방금 설치하는 방법과이 문제 및 기타 문제를 해결하지만 모듈이 장면 뒤에서 그렇게하는 방식으로 들어 가지 않습니다 ... 오, 우리는 항상 코드를 읽으십시오 : D 특별히 뷰 경로 수정을 언급하지는 않지만 그것을 사용하여 완벽하게 작동합니다.

모듈 페이지에서 해결되는 문제 목록 :

  • node / 123과 같은 about-us와 같은 별칭을 정의한 후에도 페이지가 여전히 추악한 기계 생성 탭과 / node / 123 / edit, node / 123 / revisions 등과 같은 링크로 가득 차는 이유를 궁금해 한 적이 있습니까? .?
  • 마찬가지로 / taxonomy / term / % 및 / user / % 링크 : / dries / track을 보려고했지만 / user / 5 / track이 있습니까?
  • 브라우저 주소 표시 줄에 별칭 대신 추한 숫자가 표시되어 있습니까?
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.