D7에 티저를 표시 할 때 노드 제목 앞에 특정 필드를 렌더링하려고합니다.
node.tpl.php 업데이트를 살펴 보았지만 분리 $title
된 $content
것을 알았으므로 어떻게 접근 해야하는지 잘 모르겠습니다. 일부 검색 후 사람들이 Drupal-6 에서이 문제를 해결하기 위해 CCK 및 ConTemplate 모듈을 사용하도록 제안 했지만 Drupal-7 솔루션이 더 있는지 궁금합니다.
어떤 제안?
D7에 티저를 표시 할 때 노드 제목 앞에 특정 필드를 렌더링하려고합니다.
node.tpl.php 업데이트를 살펴 보았지만 분리 $title
된 $content
것을 알았으므로 어떻게 접근 해야하는지 잘 모르겠습니다. 일부 검색 후 사람들이 Drupal-6 에서이 문제를 해결하기 위해 CCK 및 ConTemplate 모듈을 사용하도록 제안 했지만 Drupal-7 솔루션이 더 있는지 궁금합니다.
어떤 제안?
답변:
이것은 Drupal 7에서 정말 간단합니다.
로 render
와 hide
당신의 단일 요소의 위치를 제어 할 수있는 posibility 알고 $content
드루팔 6 필요 것처럼 모든 사항을 사용자가 직접 출력하지 않고 있습니다.
단순화 된 노드 템플릿은 다음과 같습니다.
<div>
<h2><?php print $title; ?></h2>
<div class="content">
<?php print render($content); ?>
</div>
</div>
약간만 수정하면 요구 사항을 처리 할 수 있습니다.
<div>
<?php print render($content['field_name_of_image']); ?>
<h2><?php print $title; ?></h2>
<div class="content">
<?php print render($content); ?>
</div>
</div>
를 사용 render
하면 요소를 출력 할 수 있습니다. Drupal은 렌더링 된 내용을 추적하여 같은 장소에 두 번 인쇄되는 것을 피하기 때문에 단순히 인쇄하는 것보다 더 영리합니다. 제목 위에 필드를 렌더링 할 때 렌더링 될 때 렌더링되는 항목도 제거 $content
됩니다.
Display Suite 도 매우 멋집니다.
Display Suite를 사용하면 끌어서 놓기 인터페이스를 사용하여 컨텐츠가 표시되는 방식을 완전히 제어 할 수 있습니다. 수십 개의 템플릿 파일을 통해 작업하지 않고도 원하는 방식으로 노드, 뷰, 주석, 사용자 데이터 등을 정렬 할 수 있습니다. 더 많은 드래그 앤 드롭 재미를 위해 사전 정의 된 레이아웃 목록 (D7 만 해당)을 사용할 수 있습니다!
제목 모듈 ( http://drupal.org/project/title)을 살펴보십시오 . 시나리오에 유용 할 수 있습니다. 나는 당신과 비슷한 이유로 어떤 이유로 설치 / 활성화했으며 제목 필드를 배치하는 방법에 유연성을 부여하는 것 같습니다.
나는 그것을 비활성화하고 Display Suite를 사용하고 있으므로 리콜이 약간 스케치 될 수 있습니다.
이것은 해킹 솔루션이며 누군가가 더 우아한 것을 내놓을 것이라고 확신하지만 당신이 갇혀 있고 아무도하지 않을 경우를 대비하여 ...
모두 page.tpl.php
인쇄를 제거하고 $title
기계 이름이 $ new_title 또는 이와 유사한 이름의 새 사용자 정의 필드를 추가하는 데 사용할 수 있습니다 . 그런 다음 노드 편집에 원래 제목 상자를 숨기고, 노드 저장 사용 계산 된 필드 또는 복사 할 일부 사용자 지정 PHP에 $new_title
에 $title
.
그런 다음 CSS를 작성하여 $ new_title을 이전 페이지 제목처럼 보이게하고 필드 관리 화면에서 드래그 앤 드롭하여 원하는 순서대로 필드를 배치 할 수 있어야합니다. 당신이 복사하기 때문에 $new_title
로 $title
, 브라우저 표시 줄에 페이지 제목은 여전히 직장과 아무것도 노드 제목 누락에 대해 불평을해야한다.
내가 말했듯이, 그것은 해킹이지만 작동합니다. 더 많은 정보가 필요하면 알려주세요
page.tpl.php (garland)
...
<div id="center"><div id="squeeze"><div class="right-corner"><div class="left-corner">
<?php print $breadcrumb; ?>
<?php if ($mission): print '<div id="mission">'. $mission .'</div>'; endif; ?>
/*
* Print custom block or var
*/
<?php if ($custom_block): print '<div id="custom-block" class="clear-block">'. $custom_block .'</div>'; endif; ?>
<?php if ($tabs): print '<div id="tabs-wrapper" class="clear-block">'; endif; ?>
<?php if ($title): print '<h2'. ($tabs ? ' class="with-tabs"' : '') .'>'. $title .'</h2>'; endif; ?>
<?php if ($tabs): print '<ul class="tabs primary">'. $tabs .'</ul></div>'; endif; ?>
<?php if ($tabs2): print '<ul class="tabs secondary">'. $tabs2 .'</ul>'; endif; ?>
<?php if ($show_messages && $messages): print $messages; endif; ?>
<?php print $help; ?>
<div class="clear-block">
<?php print $content ?>
</div>
<?php print $feed_icons ?>
<div id="footer"><?php print $footer_message . $footer ?></div>
</div></div></div></div> <!-- /.left-corner, /.right-corner, /#squeeze, /#center -->
...
template.php
/**
* Override or insert variables into the page template.
*/
function phptemplate_preprocess_page(&$variables) {
$node = $variables['node'];
if($node->type == MY_NODE_TYPE) {
$variables['custom_block'] = 'bla bla bla';
}
}
이것은 원래 게시물의 티저 질문에는 적용되지 않지만이 문제를 우연히보고 전체보기에서 문제를 해결하려는 사람들에게는 코드가없는 옵션이 있습니다. 예를 들어) 해당 블록을 콘텐츠 블록 위에 있지만 동일한 지역에 배치하십시오.
template.php에서 전처리 기능을 사용해야한다고 생각합니다.
/**
* Override or insert variables into the page template.
*/
function THEMENAME_process_page(&$variables) {
// look for $variables['page_title'] if i remember
}
그리고 추가로
/**
* Override or insert variables into the node template.
*/
function THEMENAME_preprocess_node(&$variables) {
//
}
변수를 덤프하고 원하는 것을 수행하십시오. 추가 / 제거 / 업데이트.
Display Suite 및 "Region to Block"추가 기능을 사용하는 코드없는 솔루션으로이 문제를 해결했습니다 . 나는 유연성을 위해이 솔루션을 가장 좋아합니다.
기본적으로, "Region to Block"추가 부분을 활성화하고 Display Suite에서 "Fulltext Content"디스플레이를 활성화하십시오. (전체 노드 디스플레이에서 제목 위에 내용을 표시한다고 가정하면 마찬가지로 Default를 제외한 다른보기 모드에 사용할 수 있습니다 ). 이제 "전체 텍스트 내용"의 "디스플레이 관리"부분의 화면 하단에 "블록 영역"탭이 나타납니다. 거기에 새 블록 이름을 입력하고 원하는 필드를 저장하고이 블록으로 끌어다 놓습니다. 마지막으로, 블록 제목 화면에서 새로 생성 된 블록을 노드 제목 위로 이동하십시오 .
http://www.youtube.com/watch?v=y4wyjxyhbNA 에서 동일한 접근 방식의 비디오를 볼 수 있습니다. 물론 제목 위에 왼쪽 블록이 아닌 제목 위에 블록을 배치해야합니다.
아래 코드는 zen 템플릿에 적합합니다.
<?php
// this goes in template.php
// check if node type page and then add to $vars array
// declaring $vars['foo'] gives you a $foo variable to use in page.tpl.php
function YOURTHEMENAME_preprocess_page(&$vars, $hook) {
if (isset($vars['node'])) :
if($vars['node']->type == 'page'):
$node = node_load($vars['node']->nid);
$output = field_view_field('node', $node, 'field_image', array('label' => 'hidden'));
$vars['my_image_field'] = $output;
endif;
endif;
}
?>
마지막으로 page.tpl.php에서 필드를 쉽게 인쇄 할 수 있습니다.
<?php
if ($my_image_field):
print render($my_image_field);
endif;
?>