2011-01-12 3 views
1

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

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

Спасибо, Blake

Edit: Drupal v6.15 Не совсем уверен, что вы имеете в виду Освальд, team2648.com/media является HTE страница. Я использовал модуль интерпретатора 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>'; 
} 
?> 
+1

Пожалуйста, укажите версию Drupal, которую вы используете. Кэширование изменено в Drupal 7. Также, как вы реализовали страницу? – Oswald

ответ

2

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

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

, который затем привел меня к этому: http://drupal.org/project/cacheexclude

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

2

Hope this helps.

То есть для Drupal 6.

+0

Так что это не какой-то фрагмент кода, который я могу разместить в нижней части страницы? Похоже, я должен создать свой собственный модуль. Также было бы неплохо иметь возможность использовать это на нескольких страницах. – TechplexEngineer

1

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

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

+0

Было бы неплохо иметь модуль, чтобы делать то, что я хочу. Однако я не могу заставить модуль Picasa функционировать. Google сообщает мне, что он получил неверный запрос. – TechplexEngineer

1

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

$GLOBALS['conf']['cache'] = FALSE; 
0

для Drupal 6,

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

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

0

Да, вы можете сделать это программно, и приведенный ниже код действителен для 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.