it-swarm-ko.tech

상대 메뉴 링크는 어떻게 만듭니 까?

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를 가리켜 야합니다.

라이브로 이동할 때 모든 메뉴 경로를 편집 할 필요가 없도록 설정하려면 어떻게해야합니까?

10
Martin Duys

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을 사용하는 코드가 실패하는 이유는 다음과 같이 'load arguments'를 추가해야하기 때문입니다. 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 )

(새 모듈을 활성화하는 것을 잊지 마십시오. 그렇지 않으면 메뉴 시스템이 새 링크를 허용하지 않습니다)

4
nachbar

새 링크를 추가하면 menu_edit_item_validate () 에서 링크의 유효성이 검사되며 drupal_valid_path () 를 호출하여 경로가 유효한지 확인하거나 경로에서 액세스 할 수 있는지 확인합니다. 사용자.
drupal_valid_path()TRUE를 반환합니다.

  • 경로는 <front> (<front>/directory 또는 이와 유사한 경로는 제외됨)
  • 경로는 외부 경로입니다 (함수 rl_is_external ()TRUE를 반환 함)
  • 경로는 메뉴 콜백과 연결됩니다

절대 URL을 사용하는 것 외에도 유일한 해결책은 사용하려는 경로와 연관된 메뉴 콜백을 정의하는 사용자 정의 모듈을 사용하는 것입니다.
파일 또는 디렉토리를 가리키는 URL을 사용할 때 웹 서버는 Drupal을 호출하지 않고 해당 파일 또는 디렉토리를 표시해야합니다. 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 페이지 콜백 에 대한 값을 사용할 수 있습니다 콜백을 호출해서는 안됩니다. access 콜백 의 값은 모든 사용자가 해당 메뉴 콜백에 액세스 할 수 있음을 Drupal)에게 말합니다.

또는 "alias_for_directory/% menu_tail"과 관련된 메뉴 콜백을 정의하여 사용자를 원하는 디렉토리로 리디렉션합니다 ( drupal_goto () 사용). 서버가 .htaccess의 내용을 사용하지 않을 때이 솔루션을 사용하고 URL이 기존 파일이나 디렉토리를 가리키는 경우에도 Drupal)을 호출합니다.

5
kiamlaluno

나를 위해 다음과 같은 트릭을 수행했습니다 (on drupal 6).

같은 도메인의 다른 URL로 이동하고 싶습니다. Drupal http://www.example.com에서 실행 중이며 http://www.example.com/frontend에 대한 링크를 갖고 싶습니다.

메뉴 항목에서 경로로 입력하십시오 :

http:/frontend

drupal 메뉴는 다음으로 연결됩니다 : http://www.example.com/frontend

Https를 사용할 때 메뉴 항목의 경로 필드에 https :/frontend를 입력해야합니다.

3
Paul

다음과 같은 링크 문제를 해결했습니다.

http://groups.drupal.org/node/210308http://drupal.org/node/372252

내 테마가 메뉴를 잘못 인쇄하여 모든 항목이 현재 위치와 관련되어 있음을 나타냅니다 (예 :/logout 대신 admin/logout).

도움이 되었기를 바랍니다.

1
the_dillio

메뉴 구조에서 링크를 대체하기 위해 sql을 사용했습니다.

UPDATE menu_links SET link_path = replace(link_path, "livesite.com", "localhost.com");

이 작업이 필요한지 확실하지 않지만 메뉴 캐시를 플러시했습니다.

1
streamfan