it-swarm-korea.com

조건부 논리를 사용하여 노드 ID를 기반으로 page.tpl.php에 <div>를 표시하지 않는 방법은 무엇입니까?

Panels의 "Disable Drupal blocks/regions") 설정에서 지원하지 않는 영역이있는 테마를 사용하고 있습니다. PHP에서 if 문을 사용하여 if 문을 제거하려고했지만 내 = PHP 구문이 잘못되었거나 올바른 Drupal 변수를 사용하고 있지 않습니다. 지금 섹션은 다음과 같습니다.

<?php
    if ($node->nid != 51) {
        echo '<div id="left">';
            { if ($left) { print $left;}
        echo '</div>';
 ?>

PHP에 두 번째 if 문을 올바르게 중첩하지 않는 느낌이 있습니다.

3
Jay

노드 51을 볼 때 왼쪽 사이드 바를 숨기려고하면 올바른 방법이 아닙니다. 경로가 'node/51'일 때 숨겨 지도록 왼쪽 사이드 바에서 블록의 블록 가시성 설정을 편집하십시오. 그런 다음 템플릿에서 다음을 수행 할 수 있습니다.

<?php
  if ($left) {
    print '<div id="left">' . $left . '</div>';
  }
?>

왼쪽 사이드 바에 블록이 없으면 전체 div # left가 숨겨집니다.

8
marcvangend

왼쪽 사이드 바에 표시된 모든 블록의 가시성 설정을 변경하는 것이 왼쪽 사이드 바를 숨기는 올바른 방법이라고 생각합니다.
어떤 이유로 든 코드에서 왼쪽 사이드 바를 숨겨야하는 경우 (예 : 현재 표시 페이지의 URL이 아닌 특정 조건에서 왼쪽 사이드 바를 숨겨야하기 때문에) 페이지 템플릿을 렌더링하기 전에 호출되는 hook_preprocess_page()을 구현하면됩니다. 이 후크는 페이지 템플리트에 전달 된 모든 변수를 변경할 수 있습니다.

function mymodule_preprocess_page(&$variables) {
  if (isset($variables['node']) && $variables['node']->nid == 51) {
    // The left sidebar will not be shown.
    $variables['left'] = '';
    // …
  }
  // …
}

후크는 PHP 코드를 작성하지 않은 경우 블록 가시성 설정을 변경할 때 불가능한 일부 노드 필드에 특정 값이 있는지 확인하는 등 더 복잡한 조건이 검증되었는지 확인할 수 있음) eval() 블록 모듈에서 (이 경우 해당 코드를 사용자 정의 모듈에 넣는 것이 좋습니다).

구문 오류가 발생하는 이유는 코드에 닫는 대괄호와 일치하지 않는 중괄호가 있고 닫는 대괄호가 없기 때문입니다.

if ($node->nid != 51) {
  echo '<div id="left">';
    /* This bracket is extra. -> */ { if ($left) { print $left;}
  echo '</div>';
} /* <- This bracket is missing in the code you reported. */
3
kiamlaluno