2011-08-25 1 views
0

Drupal 블록의 페이지 가시성 설정에서 경로의 두 번째 값이 숫자 인 경우 특정 블록이 표시되지 않도록하고 싶습니다. 이것은 나를 위해 일하지 않는 것 같습니다. 건배.Drupal PHP 블록 가시성 규칙

표시 블록 인수가있는 경우에만 :

domain.com/video/one (ARG 0 '비디오'와 인수 1이 존재 아닌 번호)

는 표시하지 않음 :

domain.com/video/1 그나마 알고

<?php 
    if (arg(0) == 'video' && is_nan(arg(1)) && empty(arg(2))) { 
    return TRUE; 
    } 
    else { 
    return FALSE; 
    } 
?> 
+0

정확히 작동하지 않는 것은 무엇입니까? 인수 변수에는 무엇이 들어 있습니까? –

+0

해당 코드는 어디에 사용합니까? 후크 구현에서 사용하고 있습니까, 아니면 모듈을 표시해야하는지 결정하는 PHP 코드로 사용하고 있습니까? URL이 무엇을 기대합니까? – kiamlaluno

+0

사과, 이것은 '페이지 별 공개 설정'아래의 블록에 대한 것입니다. 인수 :/video/video1은/video/1/video/1/... 블록을 나타내야합니다. – atb

답변

0

, 어떤 Y

domain.com/video 우리의 주장은 비슷하지만 두 종류의 유형이 섞여 있다고 가정합니다. is_nan() 은 숫자와 호환됩니다. 테스트 할 경우, 값은 숫자,

var_dump(is_numeric(arg(1)); 
경우

is_nan() 테스트는 "숫자"값이 구체적인 값 또는 "무한"좋아요 "숫자가 아닌"또는의 결과 인 경우 "0/0 "또는 그와 같은.

1

이것은 hook_block/hook_block_view 함수에 있다고 가정합니다. 당신은 다른 접근 방법을 시도 할 수 :

if (preg_match('/^video\/[0-9]+$/', $_GET['q'])) { 
    // Path has matched, don't show the block. Are you sure you should be returning TRUE here? 
    return TRUE; 
} 
else { 
    // Path has matched, go ahead and show the block 
    return FALSE; 
} 
+0

반환 값은 블록을 표시해야하는 경우에는 '참'이어야합니다. – kiamlaluno

+0

원래 게시물에 따르면 'TRUE'가 표시되어서는 안되는 경우 반환해야합니다. – Clive

+0

나는 원래의 코드에 대한 나의 의견을 다음과 같이 생각했다. "당신은 여기서 TRUE를 리턴해야합니까?" – Clive

1

당신은 간단하게 다음과 같은 코드를 사용할 수 있습니다 : 인수가 숫자 인 경우

<?php 
    $arg1 = arg(1); 
    $arg2 = arg(2); 
    // Check arg(1) is not empty, or is_numeric() returns TRUE for NULL. 
    return (arg(0) == 'video' && !empty($arg1) && !is_numeric($arg1) && empty($arg2)); 
?> 

KingCrunch 이미 말했듯이, is_nan()TRUE을 반환하지 않습니다. 보고 한 코드에 또 다른 오류가 있습니다. empty()PHP documentation에보고 된 바와 같이 변수에만 사용할 수 있습니다.

empty() 변수 만 검사하면 구문 분석 오류가 발생합니다. 즉, 다음은 작동하지 않습니다 : empty(trim($name)).

내가보고 한 코드는 "video/video1"과 같은 경로의 블록을 보여줍니다. "video/video1/edit"와 같은 경로에도 블록을 표시하려면 다음 코드를 사용해야합니다.

<?php 
    $arg1 = arg(1); 
    return (arg(0) == 'video' && !empty($arg1) && !is_numeric($arg1)); 
?> 

찾고있는 경로가 경로 별칭 인 경우 arg()을 사용하면 작동하지 않습니다. "video/video1"이 "node/10"의 경로 별칭이라고 가정합니다. 이 경우 arg(0)은 "노드"를 반환하고 arg(1)은 "10"을 반환합니다. "node/10"과 같을 $_GET['q']에 대해서도 마찬가지입니다."

드루팔, 그 부트 스트랩 동안, 다음 코드를 사용하여 $_GET['q']를 초기화하기 때문에이 문제가 발생 : 당신이 확인하는 것은 경로 별명을 당신 경우

// Drupal 6. 
    if (!empty($_GET['q'])) { 
    $_GET['q'] = drupal_get_normal_path(trim($_GET['q'], '/')); 
    } 
    else { 
    $_GET['q'] = drupal_get_normal_path(variable_get('site_frontpage', 'node')); 
    } 
// Drupal 7. 
    if (!empty($_GET['q'])) { 
    $_GET['q'] = drupal_get_normal_path($_GET['q']); 
    } 
    else { 
    $_GET['q'] = drupal_get_normal_path(variable_get('site_frontpage', 'node')); 
    } 

는, 당신은 다음을 사용한다 코드 :

// Drupal 6. 
$arg = explode('/', drupal_get_path_alias($_GET['q']); 
return (arg[0] == 'video' && !empty($arg[1]) && !is_numeric(arg[1]) && empty($arg[2])); 
// Drupal 7. 
$arg = explode('/', drupal_get_path_alias(); 
return (arg[0] == 'video' && !empty($arg[1]) && !is_numeric(arg[1]) && empty($arg[2])); 
+0

두 번째 인수가 숫자가 아닐 때 블록을 표시하려고합니다. – atb

+0

아직 작동하지 않습니다 ... – atb