2010-05-11 2 views
1

Drupal 사이트에서 뷰 모듈을 사용하여 사용자 페이지를 만들었는데, 이는 사용자의 멋지게 스타일 된 그리드 (HTML 테이블)입니다. 각 필드에 대해 몇 개의 필드를 표시하고 있으며 이름과 프로필 그림이 모두 사용자 노드에 연결되도록 설정되어 있습니다.드루팔 (Drupal 6/Views2) 그리드 스타일 : 전체 세포가 노드에 링크

전체 셀 (HTML td)이 사용자 노드에 링크되도록 변경하는 가장 좋은 방법은 무엇입니까? 편집 : HTML 링크 태그를 추가하는 것이 아니라 각 프로필 페이지의 URL에 액세스하는 데 관심이 있습니다.

뷰의 테마를 수정 해 보았습니다. (예 : views-view-grid (users.tpl.php)와 같은 스타일 출력을 지나치게 많이 사용합니다.)하지만 사용자의 URL을 얻는 우아한 방법은 없습니다. 마디.

EDIT : 각 셀의 HTML을 살펴보고 첫 번째 링크의 URL을 추출하여 사용하는 자바 스크립트의 임시 솔루션을 구현했지만 Drupal 변수를 사용하는 더 좋은 방법은 없습니다.

도움 주셔서 감사합니다.

.td_link { 
    display: block; 
    width: 100%; 
} 

그래서 기본적으로 당신이 할 필요가있다 : 당신의 CSS 파일에서

<td><a href="..." class="td_link">the link</a></td> 
... 

: 이런 식으로 뭔가에 대해 ... 더 자바 스크립트를 표에서

을 필요로하지 어떻게

답변

1

OK 프로파일 URL을 추출하는 방법이 더 우수하고 (espais에 기인 한) 전체 블록 링크 솔루션에 몇 가지 문제가 있습니다. 문서화 할 가치가 있다고 생각합니다.그래서 여기에 내 원래의 문제에 대한 완벽한 해결책이 있습니다 :

1) views-view-fields.tpl.php를 오버라이드하기 위해 사용자 정의 템플릿 파일을 추가하십시오 (유용한 링크는 barraponto 덕분에 http://views-help.doc.logrus.com/help/views/using-theme 참조). 이 사용자 정의 파일에서 링크의 모든 코드를 감싸고 끝 부분 바로 앞에 명확한 수정 div를 추가하여 컨테이너의 전체 높이에 대한 링크를 늘려야합니다. 당신이 둥지 HTML 링크 (정말 이상한 행동을 생산)에 허용되지 않는 한

<a class="td-link" href="user/<?php print $row->uid; ?>"> 
... 
<div class="clear-fix"></div> 
</a> 

2) 지금 당신은 각 격자 요소 내부에서 다른 링크를 제거 할 필요가있다. 가장 먼저 할 일은보기를 편집하고 필드 중 어느 것도 "이 필드를 사용자에게 연결"을 선택하지 않았는지 확인하는 것입니다. 프로필 사진 필드를 포함하려면 작은 수정 모듈을 추가해야합니다. 기본적으로이 필드가 링크가되는 것을 막을 방법이 없기 때문입니다! 이 댓글에서 모듈을 가져올 수 있습니다. http://drupal.org/node/720772#comment-2757536

3) 마지막으로 CSS입니다. 테마의있는 style.css에 다음을 추가

a.td-link { 
    display: block; 
    color: #000; 
    text-decoration: none; 
    border: 1px solid #E9EFF3; 
} 
a.td-link:HOVER {border-color: #85b3d4;} 
a.td-link label {cursor: pointer;} 
div.clear-fix {clear: both;} 

이 텍스트에서 서식 링크를 제거합니다 (우리는 링크뿐만 아니라 텍스트처럼 보이게하는 전체 블록을 원하는대로), 그리고 밖으로 링크를 뻗어 용기를 채우십시오. 또한 커서 그래픽을 일관되게 만들고 마우스 오버 할 때 멋진 테두리 효과를 추가합니다. 또한보기에 사용자 정의 CSS 클래스를 추가 할 수 있으므로 CSS 코드에서 스타일을 지정할 요소를 훨씬 쉽고/깔끔하게 선택할 수 있습니다.

+0

LOL, 이것이 실제로 메뉴 문제를 해결할 수있다 ... 그 점;) – espais

1

링크에 클래스 추가, 작은 CSS 스 니펫.

+0

제안 해 주셔서 감사합니다.하지만이 작업은 모든 콘텐츠를 링크 (모든 텍스트/이미지)로 바꾸기 만하면 콘텐츠 사이의 간격이나 div의 가장자리로 바꾸지 않습니다. 나는 div 클래스 전체를 클릭 할 수있는 유일한 해결책은 javascript를 사용하는 것이라고 생각한다. 문제는 우아한 방법으로 사용자 노드의 실제 URL을 얻는 방법을 볼 수 없다는 것입니다. 정보는 셀 내용에 있습니다. 사용자 노드에 대한 이름과 그림 필드 링크는 있지만 사용자 정의 테마 템플릿 파일로 해당 정보에 액세스하는 것 같습니다. – jackocnr

+0

얼마나 당황 스럽습니까? 방금 블록 링크 방법이 실제로 원하는대로 작동한다는 것을 깨달았습니다. 전에 내가 뭘 잘못하고 있었는지 확신하지 못했습니다. 아마도 이상한 CSS 우선 순위 문제 일 수 있습니다. 이것은 실제로 JS를 사용하여 링크로 전체 div를 만드는 더 나은 솔루션입니다 ... 감사합니다. – jackocnr

+0

당신이 그것을 좋아한다면 받아들이십시오;) 나는 그것이 작동하도록 기쁘게 생각합니다. – espais

0

<> 태그 및 클릭 할 수있는 임의의 요소로 실제 링크를 구별하는 것이 중요합니다. 의미론을 신경 쓰지 않더라도 자바 스크립트를 사용하지 않는 방문자, 특히 검색 엔진에주의해야합니다.

블록 요소를 링크로 바꾸는 대신 espais가 제안한대로 링크를 블록 요소로 전환해야합니다. 마크 업을보다 잘 제어 할 수있는 한 가지 방법은 custom fields을 사용하여 나머지 필드 주위에 링크의 여는 태그와 닫는 태그를 추가하는 것입니다.

+0

불행히도 espais의 제안이 원하는 효과를 내지 못합니다 (내 의견 참조). 나는 사실 자바 스크립트를 사용하는 것으로 괜찮습니다. 방문자가 내 사이트를 방문하도록 요구하면 좋겠지 만, 내가 말한 것처럼 셀에는 동일한 링크가 포함되어 있기 때문에 검색 엔진에서는 문제가되지 않습니다. 내 원래의 질문을 내 문제에 대해 더 구체적으로 업데이트했습니다. – jackocnr

0

spais 및 scott-reynen이 맞습니다. 그러나 각각의 필드를 복수 블록 (<, >)으로 배치하는 대신 CSS로 스타일을 지정하여 (여백과 패딩을 가질 수있는) 블록을 각각 > 요소로 바꾸는 것이 좋습니다. 모두가 같은 장소에 연결하기위한 것입니다 경우 모든 요소는 인라인 요소 (< 범위 > 대신 <의 DIV >)를해야하지만

, 당신은 하나의 < > 요소 아래에 모두 함께 배치 할 수 있습니다. 당신은 행 템플리트를 변경하여이 작업을 수행 할 수 있습니다 : 귀하의 경우에는

을 선택하고보기 모듈 내에서 템플리트를 테마 폴더로 복사 한 다음 "테마 : 정보"라는보기로 적절하게 이름을 변경하십시오. <div> 또는 <p > 또는 다른 블록 요소가 출력되고 있는지 확인하십시오. 줄 바꿈이 필요한 경우 <br>을 사용하십시오.

+0

참고 display : block을 사용하여 요소를 지정할 수 있습니다. 따라서 마진과 패딩을 적용합니다. –

+0

귀하의 조언에 감사드립니다. 나는 이후 espais가 옳았다는 것을 깨달았습니다. 내 유일한 문제는 이제 해당 사용자 지정 서식 파일에서 사용자 프로필 URL에 액세스하는 것입니다. 나는 그 템플릿 파일들에서 PHP 코드에 어떤 변수가 사용 가능한지 알지 못한다 ... – jackocnr