Temat: Nasze "chore" fragmenty kodu
Kiedyś miałem za zadanie napisać stronicowanie wpisów blogowych. Oczywiście sposobów rozwiązania tego zadania jest tyle co opinii na temat polskiego rządu, ale wracając do tematu - życzeniem było to, żeby na 1 stronie widoczne były 3 wpisy, a potem po 5, z tym, że skrypt miał wykrywać na bieżącej stronie, czy na następnej zostało 5 wpisów, 3, czy może mniej? I pokazywać "następne 5 wpisów", lub np. "ostatni 1 wpis". Napisałem to raz, drugi, trzeci, ciągle się coś zleceniodawcy nie podobało. Aż pewnego dnia nie wytrzymałem nerwowo i napisałem funkcję AleMnieToWkurwia(), która wyglądała tak:
<?
function AleMnieToWkurwia($c, $page, $first_page, $per_page, $user)
{
$prefix = 'blog/blogitems.php?site='.urlencode($user).'&page=';
$pages = $c - $first_page;
$pages = floor($pages / $per_page);
$pages++;
$pages++;
if($c > $first_page && $c < ($first_page+$per_page)) // we have more than 3 posts, but less than 13 (for eg. 5 on next page).
{
$count = $c - $first_page; // all posts - 3 read.
if($page == 1)
$next = '<a href="'.$prefix.($page + 1).'">'._NEXT.' '.$count.' '._PAGES.'</a> ';
}
if($c >= ($first_page + $per_page)) // we have more or equal to 13 posts.
{
if($page <= 1) // first, second page
{
$next = '<a href="'.$prefix.($page + 1).'">'._NEXT.' '.$per_page.' '._PAGES.'</a> ';
}
if($page+1 == $pages) // penultimate page
{
$last = $c - (($pages - 2) * $per_page) - $first_page;
if($last != 0)
$next = '<a href="'.$prefix.($page + 1).'">'._NEXT.' '.$last.' '._PAGES.'</a> ';
$flag = 1;
}
if($page > 1 && $page < $pages && $flag != 1)
{
$next = '<a href="'.$prefix.($page + 1).'">'._NEXT.' '.$per_page.' '._PAGES.'</a> ';
}
}
if($page == 2)
$prev = '<a href="'.$prefix.($page - 1).'">'._PREV.' '.$first_page.' '._PAGES.'</a> ';
if($page > 2)
$prev = '<a href="'.$prefix.($page - 1).'">'._PREV.' '.$per_page.' '._PAGES.'</a> ';
return $prev.' '.$next;
}
function calculate_limits($page, $first_page, $per_page)
{
if($page == 1)
{
$limit_l = 0;
$limit_h = $first_page - 1; // display first 3 posts.
}
else
{
if($page == 2)
{
$limit_l = $first_page;
$limit_h = $first_page + $per_page - 1;
}
if($page > 2)
{
$num = $first_page + (($page - 1) * $per_page) - $per_page;
$limit_l = $num;
$limit_h = $limit_l + $per_page - 1;
}
}
$array[0] = $limit_l;
$array[1] = $limit_h;
return $array;
}
?>
Jakież było zdziwienie holenderskiego zleceniodawcy, który to ujrzał: "hey, what means ale-mne-to-wkurvia?"
:D