Using query_posts
is not advised anymore and in your instance, using it outside of a page template will cause strange results, query_posts
is used for altering the main loop of your site, therefore its advised to use something like WP_Query
instead.
Replace from line 14 of your code:
<?php
//bad: do not use query_posts
global $query_string;
query_posts("{$query_string}&posts_per_page=8");
if ( have_posts() ) while ( have_posts() ) : the_post();
?>
With this,
<?php
//good: use WP_query instead
$paged = get_query_var('paged');
$wp_query = new WP_Query(array('posts_per_page' => 8, 'paged' => $paged));
while ($wp_query->have_posts()) : $wp_query->the_post();
?>