2012-04-15 3 views
1

나는 내 생각이 아닌 다른 출처의 양식을 스크립트에 넣었습니다. 이 기능을 작동시켜야하는 이유는 opencart가 우수한 웹 상점 기능을 처리하는 동안 우수한 cms 기능을 사용할 수 있도록 opencart 설치 상단에 drupal 톱 메뉴를 가져 오는 것입니다.drupal 메뉴의 인쇄 캐시를 사용하고 상대 경로를 절대 경로로 변환하는 데 도움이 필요합니다.

스크립트의 캐시 파일에 인쇄하는 메뉴는 상대적 url.s을 사용합니다. 이것은 메뉴가 하위 도메인에있는 opencart에 필요할 때 경로가 하위 도메인의 경로를 표시한다는 것을 의미합니다. 안좋다.

편집 : 좋아, 나는 일하는 코드를 얻었고 잠시 혼란 스러웠다. 모든 $ content와 $ contents는 어디에나있다. 아래 보이는 코드가 어떻게 보이는지 변경합니다. 시간 간격을 1 초로 변경해야하는데 그렇지 않으면 drupal 페이지가 매우 이상하게 작동했습니다. 가게의 메뉴가 변경 would't 이후

<?php 
    $cache_time = 1; // Time in seconds to keep a page cached 
    $cache_folder = 'cache'; // Folder to store cached files (no trailing slash) 
    $cache_filename = $cache_folder.md5($_SERVER['REQUEST_URI']); 
    // Location to lookup or store cached file 
    //Check to see if this file has already been cached 
    // If it has get and store the file creation time 
    $cache_created = (file_exists($cache_file_name)) ? filemtime($cache_filename) : 0; 

    if ((time() - $cache_created) < $cache_time) { 
    readfile($cache_filename); 
    // The cached copy is still valid, read it into the output buffer 
    die(); 
    } 
?> 

<?php ob_start(); // Turns on output buffering ?> 
<?php $contents = ob_get_contents(); ?> 
<!-- //Stores the contents of the buffer in a variable as a string --> 

<?php if ($page['header_menu']): ?> 
<div id="header-menu-wrapper"> 
<div id="header-menu"> 
<?php print render($page['header_menu']); ?> 
</div> 
</div> 
<?php endif; ?> 

<?php 
    $contents = ob_get_contents(); 
    $contents = str_replace('href="','href="http://yourdomain.com', $contents); 
    file_put_contents($cache_filename, $contents()); 
    ob_end_flush(); 
?> 

또한, 그렇지 않으면 매우 좋은하지 않을 것, 항상 같은 파일 이름에 기록 캐시 된 파일을 얻을 수있는 것이 좋은 것입니다 때 드루팔 메뉴가 변경되면 새 파일 이름이 생깁니다.

drupal 및 절대 경로와 관련하여 여기에서 다른 질문을 보았지만 충분히 이해하지 못하거나 적용 할 수 없습니다.

답변

1

은 확실히 당신은 도메인을 두는 경우, url 문제에 대한 str_replace()을 사용할 수 있습니다. 그래서 스크립트의 끝으로 당신이 정말 기술 얻기 위해 원하는 경우

<?php 
$content = ob_get_contents(); 
$content = str_replace('href="','href="http://yourdomain.com/', $content); 
file_put_contents($cache_filename, $content); 
ob_end_flush(); 
?> 

이, 당신이 그것을 할 수 정규식 심지어 DOM 문서로, 그러나 당신이 준 상황에 대한 캐시에 관해서는

충분해야, 당신은 단지 opencarts에 cache.unique-key.time/system/cache/ 폴더를 저장 한 다음 호출 할 필요가

그것은 거짓/빈 아니라면 99,

및 인쇄 $menu_var, 그렇지 않으면 생성이

+0

SWEET! 좋아, 내가 코드가 작동하고 절대 경로를 얻고 있어요. 대단히 감사합니다 :) 나는 독창적 인 키 등등에 관한 것을 얻지 않으며, 장신구가 그림에 들어오는 곳을 찾지 않습니다. 캐시 파일은 drupal 설치 루트에 저장되므로 opencart에서 사용하는 테마에 캐시 파일이 필요합니다. 그래서 저는 실제 캐시 파일을 가져 오는 것 이외에는 opencart를 사용하여 더 많은 것을하려고하지 않습니다. 그래서, 내가해야 할 일은 drupal의 루트에서 항상 같은 이름이고 그것을 덮어 쓰는 것입니다. 다시 고맙습니다. – user1334233

+0

아 아하. 문제 없어. 이 문제가 해결되면 내 대답 옆에있는 체크를 클릭하십시오 :) –

+0

클릭을 시도했지만 내 평판이 존재하지 않아서 투표 할 수 없습니다. 아니면 다른 것을 클릭 할 의향이 있습니까? – user1334233

관련 문제