Есть ли способ сказать Drupal не кэшировать определенную страницу? - PullRequest
1 голос
/ 12 января 2011

У меня есть собственная страница php, которая обрабатывает поток изображений и делает из него альбомы. Однако всякий раз, когда я добавляю картинки в свой канал, страница Drupal не меняется, пока я не очистил кеши.

Есть ли способ заставить Drupal не кэшировать эту конкретную страницу?

Спасибо, Блейк

Редактировать: Drupal v6.15 Не совсем уверен, что вы имеете в виду Освальд, team2648.com/media это страница. Я использовал модуль интерпретатора PHP. Вот код php:

    <?php
//////// CODE by Pikori Web Designs - pikori.org   ///////////
//////// Please do not remove this title,          ///////////
//////// feel free to modify or copy this software ///////////
$feedURL = 'http://picasaweb.google.com/data/feed/base/user/Techplex.Engineer?alt=rss&kind=album&hl=en_US';


$photoNodeNum = 4;
$galleryTitle = 'Breakaway Pictures';
$year = '2011';
?>



<?php
  /////////////// DO NOT EDIT ANYTHING BELOW THIS LINE //////////////////

$album = $_GET['album'];
if($album != ""){

  //GENERATE PICTURES
  $feedURL= "http://".$album."&kind=photo&hl=en_US";
  $feedURL = str_replace("entry","feed",$feedURL);

  $sxml = simplexml_load_file($feedURL);
  $column = 0;
  $pix_count = count($sxml->channel->item);

  //print '<h2>'.$sxml->channel->title.'</h2>';
  print '<table cellspacing="0" cellpadding="0" style="font-size:10pt" width="100%"><tr>';
  for($i = 0; $i < $pix_count; $i++) { 

print '<td align="center">';
$entry = $sxml->channel->item[$i];
$picture_url = $entry->enclosure['url'];
$time = $entry->pubDate;
$time_ln = strlen($time)-14;
$time = substr($time,0,$time_ln);
$description = $entry->description;
$tn_beg = strpos($description, "src=");
$tn_end = strpos($description, "alt=");
$tn_length = $tn_end - $tn_beg;
$tn = substr($description, $tn_beg, $tn_length);
$tn_small = str_replace("s288","s128",$tn);

$picture_url = $tn;
$picture_beg = strpos($picture_url,"http:");
$picture_len = strlen($picture_url)-7;
$picture_url = substr($tn, $picture_beg, $picture_len);
$picture_url = str_replace("s288","s640",$picture_url);
print '<a rel="lightbox[group]" href="'.$picture_url.'">';
print '<img '.$tn_small.' style="border:1px solid #02293a"><br>';
print '</a></td> ';

if($column == 4){ print '</tr><tr>'; $column = 0;}
else $column++;
  }
  print '</table>';
  print '<br><center><a href="media">Return to album</a></center>';
} else {

  //GENERATE ALBUMS 
  $sxml = simplexml_load_file($feedURL);
  $column = 0;
  $album_count = count($sxml->channel->item);

  //print '<h2>'.$galleryTitle.'</h2>';
  print '<table cellspacing="0" cellpadding="0" style="font-size:10pt" width="100%"><tr>';
  for($i = 0; $i < $album_count; $i++) { 

$entry = $sxml->channel->item[$i];

$time = $entry->pubDate;
$time_ln = strlen($time)-14;
$time = substr($time,0,$time_ln);

$description = $entry->description;
$tn_beg = strpos($description, "src=");
$tn_end = strpos($description, "alt=");
$tn_length = $tn_end - $tn_beg;
$tn = substr($description, $tn_beg, $tn_length);

$albumrss = $entry->guid;
$albumrsscount = strlen($albumrss) - 7;
$albumrss = substr($albumrss, 7, $albumrsscount);

$search = strstr($time, $year);
if($search != FALSE || $year == ''){
  print '<td valign="top">';
  print '<a href="/node/'.$photoNodeNum.'?album='.$albumrss.'">';
  print '<center><img '.$tn.' style="border:3px double #cccccc"><br>';
  print $entry->title.'<br>'.$time.'</center>';
  print '</a><br></td> ';

  if($column == 3){ 
    print '</tr><tr>'; $column = 0;
  } else {
    $column++;
  }
} 
  }
  print '</table>';
}
?>

Ответы [ 6 ]

2 голосов
/ 12 января 2011

Спасибо за ваш ответ.

Сайт, на который вы ссылались, дал мне новые слова для поиска, и, таким образом, я нашел это: http://www.drupalcoder.com/story/365-disable-drupals-page-cache-for-some-pages

, что привело меня к этому:1006 *http://drupal.org/project/cacheexclude

, который сделал именно то, что я хотел.

2 голосов
/ 12 января 2011
1 голос
/ 12 октября 2012

Напишите эту строку кода в верхней части пользовательской страницы, которую вы не хотите кэшировать:

$GLOBALS['conf']['cache'] = FALSE;
1 голос
/ 13 января 2011

Это не отвечает на ваш конкретный вопрос о кешировании, но - рассмотрите возможность использования нативных решений Drupal, таких как Picasa , для подобных вещей.

Когда вы используете не-Drupal PHP-приложения в среде Drupal, как у вас здесь, вы получаете странные взаимодействия с другими компонентами Drupal. Модули Drupal создаются с учетом Drupal, поэтому обычно встраиваются такие вещи, как нормальное кэширование.

0 голосов
/ 09 марта 2017

Да, вы можете сделать это программно, и приведенный ниже код действителен для Drupal 6 и 7.

Ссылка: http://techrappers.com/post/27/how-prevent-javascript-and-css-render-some-drupal-pages

/**
 * Implements hook_init().
 */
function MODULE_NAME_init() {
global $conf;
// current_path() is the path on which you want to turn of JS or CSS cache
  if (current_path() == 'batch' || current_path() == 'library-admin') {
    // If you want to force CSS or JS cache to turned off
    $conf['preprocess_js'] = FALSE;
    $conf['preprocess_css'] = FALSE;

    // If you want normal caching to turned off 
     drupal_page_is_cacheable(FALSE); 
  } 
}

Обратите внимание, что drupal_page_is_cacheable (FALSE);может отключить только обычное кэширование, это не приведет к автоматическому отключению кэширования JS, если вы не используете $ conf ['preprocess_js'] = FALSE.

0 голосов
/ 16 октября 2012

Для Drupal 6,

Если вы просто хотите исключить из кэширования определенную страницу, вы можете использовать модуль Cache exclude, где вам просто нужно указать URL.

для drupal 7 также доступен, но в версии для разработчиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...