2011-08-25 9 views
0

Drupalブロックのページの表示設定では、パスの2番目の値が数値の場合、特定のブロックが表示されないようにしたいと考えています。これは私のために働いていないようです。乾杯。Drupal PHPブロックの可視性のルール

引数はONLY表示ブロック:

domain.com/video/one(引数0 '映像' と引数1が数存在しないからである)

は表示しない:

domain.com/video

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私たちの議論は似ていますが、私はあなたが2種類のタイプを混在させていると思います。 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

戻り値はブロックを表示する必要がある場合は「TRUE」にします。 – kiamlaluno

+0

元の投稿によると、ブロックが表示されないようにするには、「TRUE」を返す必要があります。 – Clive

+0

私は、それゆえ元のコードで私のコメント: "あなたはここで真を返す必要がありますか? – 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']についても同様です。Drupalは、そのブートストラップ時に、次のコードで$_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

2番目の引数が数字でないときにブロックを表示したいとします。 – atb

+0

まだ動作していません... – atb