1

私は、自分の考えではなく、他のソースからスクリプトをまとめました。これを機能させる必要がある理由は、opencartに優れたWebショップ機能を処理させながら、優れたcms機能を使用できるようにするために、drupalトップメニューをopencartインストールの上部に配置するためです。

問題は、スクリプトからキャッシュファイルに出力するメニューが相対URLを使用することです。もちろん、これは、サブドメイン上にあるopencartにメニューが必要な場合、パスがサブドメインのパスを示すことを意味します。良くない。

編集:わかりました、コードが機能するようになり、しばらくの間少し混乱しました。すべての$contentと$contentsがどこにでもあります。以下のコードを現在の外観に変更します。時間間隔を1秒に変更する必要がありました。そうしないと、drupalページの動作が非常に奇妙になりました。

<?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メニューが変更されてもショップのメニューが変更されないため、あまり効果がありません。新しいファイル名で。

Drupalパスと絶対パスに関する他の質問をここで確認しましたが、十分に理解していないか、適用できません。

4

1 に答える 1

1

確かstr_replace()に、URLの問題にaを使用して、ドメインを入れることができます。したがって、スクリプトの最後に向かって

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

本当に技術的なことをしたい場合は、正規表現または DOM Document でそれを行うことができますが、与えられた状況ではそれで十分です

キャッシュについてはcache.unique-key.time、opencarts/system/cache/フォルダーに保存してから呼び出すだけです。

$menu_var = $this->cache->get('unique-key');

$menu_var空/偽でない場合は出力し、そうでない場合は生成します

于 2012-04-15T11:16:09.220 に答える