web-dev-qa-db-ja.com

複数のワイルドカードパターンのdrupal_match_path()

複数の一致するワイルドカードURLパターンにCSSとJSを追加したいのですが。 複数の特定のURLにJavaScriptを追加する によると、 drupal_match_path() を使用してワイルドカードを使用でき、1つのパターンでうまく機能します。ただし、いくつかのパターンを使用して同じJSとCSSを追加しようとしています。これまでのところ、私はこれらを試しました:

  // By path matching wildcard patterns.
  $path = drupal_get_path_alias();
  $pattern = 'portfolio/* || photo-blog';

そして

  $path = drupal_get_path_alias();
  $pattern = 'portfolio/*, photo-blog';

そして

  $pattern = 'portfolio/*' 'photo-blog';
  $path = drupal_get_path_alias();

...しかし、これらはどれも機能しません。私はそれが次の文脈では不可能かもしれないと推測しています:

if (drupal_match_path($path, $pattern)) {
// add JS and CSS based on above
  }
2
Danny Englander

リンクしたAPIページには、$patterns引数:

$ patterns:\ n、\ r、または\ r\nで区切られた一連のパターンを含む文字列。

これらは、さまざまなオペレーティングシステムでのキャリッジリターンのタイプです。

すごい....あなたが試してみました:

 $pattern = "portfolio/*\nphoto-blog";
 // or
 $pattern = "portfolio/*\rphoto-blog";
 // or
 $pattern = "portfolio/*\r\nphoto-blog";

編集:

 // for platform portability heh
 $pattern = "portfolio/*" . PHP_EOL . "photo-blog";
8
tenken

これは私にso何度も得ました-drupal_match_path()はパスを区切るために改行文字を期待しています。この関数をプロジェクトに追加し、決して振り返らないでください。

function _get_path_pattern_string(array $items) {
  return implode(PHP_EOL, $items);
}

使用例(過度に冗長):

$patterns = array('portfolio/*', 'photo-blog', 'something-else');
$pattern_string = _get_path_pattern_string($patterns);
if (drupal_match_path($path, $pattern_string)) {
  // Do something...
}
1
Clive