DrupalがURLで#を%23として書き換えないようにする


7

私は出力を書き直し、それをトリミングし、続きを読むリンクを提供するフィールドがあります。続きを読むリンクには#が含まれています。これは、リンク先ページでビューアコーディオンをトリガーするページアンカーだからです。

ビューは実際に表示されているリンクで#文字を%23に変換しており、リンクが壊れています。

URLの#文字に戻すにはどうすればよいですか?


やや関連:drupal.stackexchange.com/questions/21124/…。ビューを前処理する必要があり、UIを使用してビューを機能させることができませんでした
Clive

回答:


3
function drupal_urlencode($text) {
  if (variable_get('clean_url', '0')) {
    return str_replace(array('%2F', '%3F', '%3D', '%26', '%2523'),
                       array('/', '?', '=', '&', '#'),
                       urlencode($text));
  }
  else {
    return str_replace('%2F', '/', urlencode($text));
  }
}

3

つまり、これが実際に行った処理であり、前処理やオーバーライドは必要ありません。これについて助けてくれたAcquiaのPeter Bullに感謝します。

HTMLを書き換えるためにいくつかの追加のViewsフィールドでこれを処理しました。

  1. 「表示から除外」を選択して「詳細リンク」を削除することを除いて、現在の用語と同じように、用語の説明に追加フィールドを追加しました。

  2. フィールドの順序を変更して、新しい用語説明フィールドが既存のフィールドの前にロードされるようにしました。

  3. 元の用語の説明フィールドを編集しました。[このフィールドの出力を書き換える]をオンにして、新しいフィールドのトークンをテキストエリアに配置し、リンクのHTMLを追加します。したがって、HTML出力を次のように書き換えます。

[token-for-new-term-description-field] <a href="https://drupal.stackexchange.com/mypagewiththeview#training-block-[counter]" class="foo">more</a>

次に、上記の書き換えに含まれていたmoreリンクを削除しました。

この回避策により、説明フィールドのトリミングされた出力が保持され、l()およびcheck_plain()を介してそのパスを実行しなくても、アンカー内の適切なカウンターIDを使用してリンクをレンダリングできます。

また、リンクの先頭に/を付ける必要があるため、ルート相対です。l()を介して渡されないため、自動的には行われません。また、このビューページにdocrootからの相対パスがない場合、リンクが壊れる可能性があります。

わーい!


2
$url = l(t("title of your page"),"$link_url",array('fragment' => 'hash url without #'));

最初の引数はページのタイトルです

2番目の引数は$ link_urlはexを意味します。www.google.com/link_url。

そして最後は、この配列のフラグメントの配列です。#の後に渡したいリンクを渡すことができます。

例:http://domain.com/india#rajkot なので、他の変換をエンコードまたはデコードする必要はありません

完全な構文は

l(t('My Anchor Link'), '', array(
 'fragment' => ' ',
 'external' => TRUE,
 'attributes' => array(
 'title' => 'Title here.'
 ),
 ));
?>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.