Posted by Marcus 78 on November 30, 2010 at 12:31am
Hej allihop
Sitter med en sida som innehåller 2 hemsnickrade moduler med dålig dokumentation. Den ena handhar en sökning mot en databas och den andra genererar länkar till bilder. 2 helt olika saker alltså.
Problemet är att när jag är inloggad som admin så flyter det på bra och det är rätt svar på sökningar och rätt bilder och bildlänkar, men när man är gäst så får man fel på båda.
I bildmodulen så blir det så att den först genererade bilden fastnar. Tror att det är något problem med cache men är osäker.
Någon som har några som helst idéer.
Är mycket tacksam för all hjälp!
//Marcus
Comments
Tror du får slänga upp lite
Tror du får slänga upp lite kod om du vill ha hjälp med felsökning. Du påpekar nämligen att det är hemma snickrat och då är det ganska lite att gå på.
Här kommer koden!
Absolut! Här är koden för den ena modulen. Valde den eftersom det var minst kod på denna.
Tänkte bara att eftersom det är ett gemensamt problem för 2 olika moduler så borde problemet ligga någon annanstans, men så kanske man inte kan resonera.
Tänkte själv också att detta skulle kunna åtgärdas om man bara stängde av block cache men den möjligheten finns inte. Det är en radioknapp med bara 1 alternativ "aktiverat".
Så vitt jag förstått av hur den nedanstående modulen fungerar så länkar den samman bilder från en katalog och dess underkataloger med de olika noderna.
Problemet är att är man inte inloggad så "fastnar" den första bilden som visas. Tömmer man sedan cache så laddas en ny korrekt bild, men den "fastnar" också.
<?php
// $Id$
/**
* @file
* Main file of the Header Pictureblock module, containing all the code.
* The module generates a block that displays a picture with a URL created from
* the displayed nodes URL Alias.
*
* For more information see the @link readme.txt @endlink file.
*
*/
/**
* Implementation of hook_perm()
*
* Valid permissions for this module
*
* @return array An array of valid permissions for the header_pictureblock module
*/
function header_pictureblock_perm() {
return array('access header_pictureblock content');
} // function onthisdate_perm()
/**
* Implementation of hook_block().
* @param string $op one of "list", "view", "save" and "configure"
* @param integer $delta code to identify the block
* @param array $edit only for "save" operation
*/
function header_pictureblock_block($op = 'list', $delta = 0, $edit = array()) {
if ($op == "list") {
// Generate listing of blocks from this module, for the admin/block page
$block = array();
$block[0]["info"] = t('Header picture');
return $block;
}
elseif ($op == 'view') {
$block['subject'] = '';
$block['content'] = header_pictureblock_return_block_content();
return $block;
}
} // function kommun_filter_block
/**
* Returns the content of the block generated by this module.
*
* This function creates a URL adress to an image file by combining the base_path
* of your Drupal instalation, the path to this module and a folder stucture and
* file name generated based on the URL alias of the displayed node. See readme.txt
* on how exactly that works.
*
* Then it uses the generated URL to create a simple HTML image tag and
* returns it.
*
* @return string
* Returns the HTML code to be used as the content of the block.
*/
function header_pictureblock_return_block_content() {
$html = '';
$path_module = drupal_get_path('module', 'header_pictureblock') . '/headers/';
$path_picture = drupal_get_path_alias('node/' . arg(1)) . '/';
while ($position = strrpos($path_picture, '/')) {
$path_picture = substr($path_picture, 0, $position);
if (file_exists($path_module . $path_picture . '.jpg')) {
$html = '<img class="header_img" src="'. base_path() . $path_module . $path_picture . '.jpg">';
break; // we want to stop looking as soon as the first image is found, not to overwrite it with an image that is higher up in the URL hierarchy
}
else if (file_exists($path_module . $path_picture . '.png')) {
$html = '<img class="header_img" src="'. base_path() . $path_module . $path_picture . '.png">';
break; // we want to stop looking as soon as the first image is found, not to overwrite it with an image that is higher up in the URL hierarchy
}
else {
$html .= 'Där finns ingen bild för sidan: "' . $path_picture . '", för att lägga till en bild till sidan lägg den på platsen: "' .
$path_module . $path_picture . '.jpg"';
$html .= '<br/><br/>';
}
}
return $html;
} // function header_pictureblock_return_block_content
Hmm. Ja du kan ju testa att
Hmm. Ja du kan ju testa att lägga till en rad i header_pictureblock_block()
$block[0]["info"] = t('Header picture');$block[0]["cache"] = BLOCK_NO_CACHE; // Denna tillkommer
Det låter lite fel med radioknappen. Är det en till option som döljs med css eller är det något som döljer det alternativet?
Om man vill "låsa" en sådan inställning, som att alltid ha block cache på, så gör man det bäst i settings.php istället.
Tack för det snabba
Tack för det snabba svaret
Det hjälpte dessvärre inte. Lade in koden i funktionen header_pictureblock_block() utan att det förändrade något
Kör vanliga garland i admin läge och jag tror inte att det är någon förändring av css där. Känns snarare som någon form av force function från Drupal men jag förstår inte varför.
Dessutom är bandbreddsoptimeringarna omöjliga att förändra. Både Optimera CSS-filer och Optimera javascript är ställda på inaktivera.
//Marcus
I Drupal 6 är det problem med
I Drupal 6 är det problem med att ändra block cache inställningar i kod i efterhand.
Hoppa in i databasen och ändra där direkt för att få det att slå igenom. Det är tabellen "block", fältet "cache" som ska ändras. För "BLOCK_NO_CACHE" sätter man värdet till -1.
Alla värden finns definierade längst upp i filen "block.module".
Du tömde cachen innan? Ibland
Du tömde cachen innan? Ibland kan det vara så att "om det redan är sparat i cachen, så returneras cachat trots inaktiverad cache". Ibland stoppar bara inställningarna att ny data cachas.
Annars kan du under felsökning lägga till följande kod i modulen.
function header_pictureblock_init() {global $conf;
$conf['block_cache']=false;
$conf['cache']=false;
$conf['preprocess_css'] = false;
$conf['preprocess_js'] = false;
}
Kolla i settings.php om det sitter någon sådan inställning där. Annars testa ett annat tema. Inte ovanligt att folk ändrar i garland tyvärr. Någonstans tas det alternativet bort. Om inte temat ändrar det så är det antagligen en xxx_form_alter.
Bara för att kontrollera lite
Bara för att kontrollera lite så att jag inte gör fel i databasen
I databasen så finns drupal_variable med instansen block_cache som har värdet s:1:"1";. Den ska väl ändras till s:1:"-1"; ?
Får passa på att säga att jag mina antaganden om cache grundar sig i att om jag tömmer cache så fungerar det i tills nästa siduppdatering så jag är inte helt säker på var felet ligger, endast en kalkylerad gissning. Är inte så erfaren!
I block.module är inställningen redan enligt följande så det vilket känns lite motstridigt med tanke på hur det ser ut i prestandainställningarna.
define('BLOCK_NO_CACHE', -1);
Testade runt mellan olika teman och jag kan fortfarande inte ändra block cache
I databasen så finns
Nej. frjo har rätt i att det antagligen sitter sparat i tabellen block för just det enskilda blocket. Variables tabellen overridar man om man sätter det i den globala $conf variabeln.
Någonstans ligger nog en __form_alter eller liknande som tar bort alternativ för dig.
Hej igen Tack för all hjälp
Hej igen
Tack för all hjälp men jag skulle gärna vilja få lite bekräftat.
Går alltså in i phpmyadmin, databasen drupal_blocks (eftersom det är inställt på att alla db´s börjar med drupal) går till den aktuella modulen (i mitt fall)
Header_Pictureblock och sätter dess cachevärde till -1.
I block modulen hittar jag följande, att BLOCK_NO_CACHE redan är ställt till -1.
define('BLOCK_NO_CACHE', -1);define('BLOCK_CACHE_PER_ROLE', 0x0001);
define('BLOCK_CACHE_PER_USER', 0x0002);
define('BLOCK_CACHE_PER_PAGE', 0x0004);
define('BLOCK_CACHE_GLOBAL', 0x0008);
Så där behöver jag inte göra någon ändring.
Det är möjligt att svaret på följande fråga går över mitt huvud men jag frågar ändå. Hur kommer det sig att det blir annorlunda beroende på om jag är inloggad eller ej?
//Marcus
Korrektomundo! Inte ändra
Korrektomundo!
Inte ändra något i block.module
Det är om man är inloggad eller inte, eller tillhör en viss roll eller inte osv som styr om man får cachad data.
Det är där den bedömningen görs. Det är bara så det är gjort helt enkelt.
Ditt problem skulle kunna bero på page cache också, men det verkar inte så.
Tack så mycket
Tack så mycket för hjälpen.
Det fungerar såsom det ska nu!
Har blivit inkastad mitt i ett projekt som till stor del saknar dokumentation. Är dessutom inte så erfaren så detta har varit till extremt stor hjälp!
//Marcus