Drupalとは別のコンテンツにリンクする必要があるローカルホスト上のサイトでの作業で忙しい。
現在のメニューパスはhttp://mylocalsite/the_folder_for_the_other_content
のように設定されています。 <front>/the_folder_for_the_other_content
または/the_folder_for_the_other_content
またはthe_folder_for_the_other_content
を試してみると、「パス 'whatever_I_use'が無効であるか、アクセス権がありません。」というエラーが表示されます。
ライブに移行するときは、すべてのメニュー項目がhttp://myrealsite/the_folder_for_the_other_content
を指すようにする必要があることは明らかです。
ライブ配信時にすべてのメニューパスを編集する必要がないように設定するにはどうすればよいですか?
kiamlalunoの答えは私にとってはうまくいきませんでした。 %menu_tailを使用すると、大量のエラーが発生し、menu_tail_load関数が引数の欠落に関する問題を抱えていました。
_Warning: Missing argument 2 for menu_tail_load(), called in ... /includes/menu.inc on line 579 and defined in menu_tail_load() (line 827 of ... /includes/menu.inc).
Warning: Missing argument 3 for menu_tail_load(), called in ... /includes/menu.inc on line 579 and defined in menu_tail_load() (line 827 of ... /includes/menu.inc).
_
私にとって何がうまくいったか
_function allow_menu_links_menu() {
$items = array();
$items['sites/d8/files/%'] = array(
'title' => 'Folder Content',
'page callback' => 'allow_menu_links_cb', /* never called */
'access callback' => TRUE,
);
return $items;
}
_
次に、_sites/d8/files/Documents/MyFile.pdf
_のようなパスを持つメニュー項目を使用して、sites/d8/filesフォルダー(およびサブフォルダー)内のファイルを提供できます。
メニューシステムは、次に_href="/sites/d8/files/Documents/MyFile.pdf"
_のようなリンクを生成します。
カスタムメニューモジュールを使用しない場合、メニューシステムは上記で始まるパスを拒否します。
_http:sites/d8/files/Documents/MyFile.pdf
_のようなパスを使用しようとすると、_href="http:sites/d8/files/Documents/MyFile.pdf"
_のようなリンクが生成されます。これは、サイトのルートにいるときに機能しますが、コンテンツページにいるときは、ブラウザーコンテンツページに関連するURLを解釈しますが、機能しません。
_http:/sites/d8/files/Documents/MyFile.pdf
_のようなパスを使用する場合、メニューシステムはそれを受け入れますが、メニューシステムは_href="http:/sites/d8/files/Documents/MyFile.pdf"
_のようなリンクを生成し、ブラウザ(少なくともSafari)は_href="http://sites/d8/files/Documents/MyFile.pdf"
_として解釈します。 、「sites」という名前のサーバーの検索に失敗しました。
(詳細な調査で、menu_tailを使用するコードが失敗する理由は、ここに記載されているように、「ロード引数」を追加する必要があるためです: http://api.drupal.org/api/drupal/includes--menu .inc/function/menu_tail_load/7 。kiamlalunoのコードで$ itemsの定義に'load arguments' => array('%map', '%index'),
を追加すると機能します。menu_tail_loadで明示的なロード引数が必要かどうかの問題についても説明しますここ: http://drupal.org/node/298561 )
(新しいモジュールを有効にすることを忘れないでください。そうしないと、メニューシステムが新しいリンクを受け入れません)
新しいリンクを追加すると、リンクは menu_edit_item_validate() から検証され、パスが有効かどうかを確認するために drupal_valid_path() が呼び出されるか、またはユーザー。drupal_valid_path()
はTRUE
を返します
<front>
(<front>/directory
、または類似のパスは除外されます)TRUE
を返します)絶対URLの使用とは別に、唯一の解決策は、使用するパスに関連付けられたメニューコールバックを定義するカスタムモジュールを用意することです。
ファイルまたはディレクトリを指すURLを使用すると、Drupalを呼び出さずにWebサーバーがそのファイルまたはディレクトリを表示するはずです。 Drupalに付属する.htaccessファイルには次のディレクティブが含まれているため、Apacheでそれが起こります。
# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
あなたの場合、カスタムモジュールには次のようなコードが含まれている必要があります。
function mymodule_menu() {
$items = array();
$items['the_folder_for_the_other_content/%menu_tail'] = array(
'title' => 'Folder content',
'page callback' => 'mymodule_view',
'access callback' => TRUE,
'load arguments' => array('%map', '%index'),
);
return $items;
}
titleとpage callbackには任意の値を使用できます。そのメニューコールバックは呼び出されないはずです。 access callbackの値は、Drupal=すべてのユーザーがそのメニューコールバックにアクセスできることを示しています。
別の方法として、「alias_for_directory /%menu_tail」に関連付けられたメニューコールバックを定義して、ユーザーに表示したいディレクトリにリダイレクトすることができます( drupal_goto() を使用)。サーバーが.htaccessのコンテンツを使用していないときにこのソリューションを使用し、URLが既存のファイルまたはディレクトリを指している場合でもDrupalを呼び出します。
私にとっては、次のトリックがありました(drupal 6))。
同じドメインの別のURLにリダイレクトしたい場合、Drupalがhttp://www.example.com
で実行されていて、http://www.example.com/frontend
へのリンクが欲しい
メニュー項目で、パスとして入力してください:
http:/frontend
drupalメニューは以下にリンクします:http://www.example.com/frontend
Httpsを使用する場合は、メニュー項目のパスフィールドにhttps:/ frontendと入力する必要があります。
次のリンクの問題を解決しました:
http://groups.drupal.org/node/210308 および http://drupal.org/node/372252
私のテーマはメニューを間違って印刷していたため、すべてのアイテムが私の現在の場所(つまり、/ logoutではなくadmin/logout)に関連していることがわかりました。
お役に立てれば。
Sqlを使用して、メニュー構造のリンクを置き換えました。
UPDATE menu_links SET link_path = replace(link_path, "livesite.com", "localhost.com");
これが必要かどうかはわかりませんが、メニューキャッシュをフラッシュしました。