…taking over the world a day at a time
Random header image... Refresh for more!

del.icio.us links fra 16. januar, 2008

Links fra 16. januar, 2008:

januar 17, 2008   No Comments

En bedre tegneserieside, del 1: 404 not found

Jeg har lige gennemført et storstilet redesign af tegneseriesiden.dk og vil da gerne dele et par af de tricks jeg har fået fyret af i koden. Til at starte med vil jeg komme lidt ind på hvad jeg har gjort ved min 404.php, altså den fil, som håndterer når en url ikke er fundet på serveren.

Den fil, der fulgte med mit tema var ikke meget bevendt - den skrev “404 not found” i en level 2-heading og det var såmænd det:

<?php get_header(); ?>

<div id="content" class="widecolumn">
<h2 class="center">Error 404 - Not Found</h2>
</div>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Oh, i en centreret level 2-heading. Ikke noget at skrive hjem om, med andre ord.

Der var meget at tage fat på - jeg ville have et søgefelt, arkiver, tagcloud og så kom et par andre ting til hen ad vejen.

Til at starte med kom søgefeltet, arkiverne (via plugin’et Smarter Archives) og tagclouden (via Wp 2.3) - det var sådan set nemt nok:

<?php get_header() ?>

<div id="content" class="widecolumn">

<h2 class="center">&Aring;h nej!</h2>
<p>Den side du bad om er her ikke.</p>
<p>M&aring;ske har den aldrig v&aelig;ret her.<br />
M&aring;ske har den v&aelig;ret her en gang, men har skiftet navn.<br />
M&aring;ske har den forladt os for aldrig at vende tilbage.</p>
<p>Det er altsammen meget godt, men hvad skal du s&aring; g&oslash;re nu?</p>
<p>En mulighed kunne v&aelig;re s&oslash;gning:<br />
<?php include (TEMPLATEPATH . '/searchform.php'); ?></p>

<p>Ellers kunne du m&aring;ske bruge arkivfunktionen eller tagcloud'en til noget:</p>

<h2>Arkiv for tegneseriesiden</h2>
<?php if (function_exists('wp_smart_archives')) {wp_smart_archives();} ?>
<h2>Tags</h2>
<?php wp_tag_cloud('smallest=8&largest=22'); ?>

</div>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Bedre. Jeg installerede så Alex Kings plugin Popularity Contest, som kan udregne hvilke indlæg der er de mest populære. Måske folk ledte efter et af de populære indlæg, når de ramte ved siden af? Koden er nem at inkludere, så de fem mest populære indlæg kom med på min 404:

<p>Du kunne ogs&aring; kigge p&aring; de 5 popul&aelig;reste indl&aelig;g:
<ul class="bullets">
<?php akpc_most_popular(5); ?>
</ul></p>

Jeg syntes at jeg var færdig, da jeg faldt over denne artikel - søgeresultater inkluderet på 404, gættet ud fra den URL man har forsøgt at tilgå? Nice. Meget nice.

Jeg væltede noget mere kode ind i min 404, som endte med at se sådan ud:

<?php
header("HTTP/1.1 404 Not Found");
header ("Pragma: no-cache"); // HTTP 1.0
header ("Expires: Mon, 25 Jul 1995 05:00:00 GMT"); // Date in the past
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header ("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP 1.1
header ("Cache-Control: post-check=0, pre-check=0, false"); // HTTP 1.1
// echo "\n<!–\n"; print_r($_REQUEST); echo "\n–>\n";

// her pilles 404-urlen fra hinanden
$search_term = substr($_SERVER['REQUEST_URI'],1);
$search_term = urldecode(stripslashes($search_term));
$find = array ("'.html'", "'.+/'", "'[-/_]'") ;
$replace = " " ;
$search_term = trim(preg_replace ( $find , $replace , $search_term ));
$search_term_q = preg_replace('/ /', '%20', $search_term);
get_header() ?>

	<div id="content" class="widecolumn">

		<h2 class="center">&Aring;h nej!</h2>
<p>Den side du bad om er her ikke.</p>
<p>M&aring;ske har den aldrig v&aelig;ret her.<br />
M&aring;ske har den v&aelig;ret her en gang, men har skiftet navn.<br />
M&aring;ske har den forladt os for aldrig at vende tilbage.</p>
<p>Det er altsammen meget godt, men hvad skal du s&aring; g&oslash;re nu?</p>
<p>En mulighed kunne v&aelig;re s&oslash;gning:<br /><?php include (TEMPLATEPATH . '/searchform.php'); ?></p>

<?php /* fyr urlen af som søgning */
query_posts('showposts=5&s='. $search_term_q );
?>
<?php if ( have_posts() ) :
/* check om der er hits på søgetermet inden vi går videre */ ?>
<h2>Du har muligvis kigget efter</h2>
<ul class="bullets">
<?php /* start af the loop */
while ( have_posts() ) : the_post(); ?>
<li><strong><a href="<?php the_permalink() ?>" title="Permanent Link til <?php the_title(); ?>" rel="bookmark"><?php the_title() ?></a></strong><br /> <em>Skrevet d. <?php unset($previousday); printf(__('%1$s', 'mimbo'), the_date('', '', '', false), get_the_time()) ?> <?php printf(__('i %s', 'mimbo'), get_the_category_list(', ')) ?></em>
<?php the_excerpt(); ?></li>

<?php /* slut på the loop */
endwhile; ?>
</ul>
<?php /* slut på else og if */
else : endif; ?>
<p>Du kunne ogs&aring; kigge p&aring; de 5 popul&aelig;reste indl&aelig;g:
<ul class="bullets">
<?php akpc_most_popular(5); ?>
</ul></p>
<p>Ellers kunne du m&aring;ske bruge arkivfunktionen eller tagcloud'en til noget:</p>

<h2>Arkiv for tegneseriesiden</h2>
<?php if (function_exists('wp_smart_archives')) {wp_smart_archives();} ?>
<h2>Tags</h2>
<?php wp_tag_cloud('smallest=8&largest=22'); ?>

	</div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

Jeg har også tilføjet nogle http-headers til filen, men jeg er ikke sikker på andet end at WordPress selv tilføjer dem. Men hellere at de er der end at de mangler…

Nu kan vi prøve det af - en nonsens-URL som http://tegneseriesiden.dk/mlfaslonsfo udløser ikke nogle søgeresultater, da “mlfaslonsfo” ikke findes i databasen (det må jeg så gøre noget ved!).
Hvis man rammer ved siden af med http://tegneseriesiden.dk/batman findes ordet “batman” i databasen og man får 5 forslag, endda med søgeordet præsenteret i the_excerpt via plugin’et Search Excerpt. Mums.

Jeg er sådan set færdig med min 404 nu, med mindre der er nogen der påpeger enten graverende fejl eller vilde forbedringsforslag.

Spørgsmål?
Stil dem, så skal jeg forsøge at svare - jeg er ikke noget kodegeni, men god til at samle bidder sammen og få dem til at virke, og kan som sådan svare ud fra den egenskab.

november 5, 2007   2 Comments