0

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

引数が次の場合にのみブロックを表示:

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;
  }
?>
4

3 に答える 3

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;
}
于 2011-08-25T19:35:23.887 に答える
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あなたが報告したコードには別のエラーも含まれています: PHP ドキュメントempty()で報告されているように、変数でのみ使用できます。

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」を返します。$_GET['q']「ノード/10」に等しい場合も同様です。

これは、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]));
于 2011-08-25T20:23:57.773 に答える
0

あなたの引数がどのように見えるかわかりませんが、2種類のタイプを混同していると思います. is_nan() 数字でのみ機能します。値が数値かどうかをテストしたい場合は、

var_dump(is_numeric(arg(1));

is_nan()「数値」値が具体的な値であるか、「無限」や「0/0」などの結果のような「数値ではない」かどうかをテストします。

于 2011-08-25T19:12:14.667 に答える