Есть вот такой кусочек скрипта: PHP: <?php ... $result = sql_query("select `news`.`id` from `news`"); $total_rows = @mysql_num_rows($result); mysql_free_result($result); echo(' <div class="parts">Страницы: '); for($i=1; $i<=ceil($total_rows/NEWS_IN_PAGE); $i++) { if($part == $i) { echo(' <span class="part">'.$part.'</span>'); } else { echo(' <span class="part">'. '<a href="?mod=news&id=0&part='.($i).'" title="Перейти на страницу '.($i).'">'.($i).'</a>'. '</span>'); } } echo(' </div>'); ... ?> А это результат жизнедеятельности данного кусочка скрипта: HTML: <div class="parts">Страницы: <span class="part">1</span> <span class="part"><a href="?mod=news&id=0&part=2" title="Перейти на страницу 2">2</a></span> <span class="part"><a href="?mod=news&id=0&part=3" title="Перейти на страницу 3">3</a></span> <span class="part"><a href="?mod=news&id=0&part=4" title="Перейти на страницу 4">4</a></span> </div> Что скажете: Говнокод или нет?
Подойди к вопросу с другой стороны: если ты хочешь научится писать хороший код, я расскажу как. Сначала сформулируй, что должен выполнять написанный тобой код, так, что бы в двух-трех предложениях выразить его основное предназначение, и напиши сюда. Я тебе скажу, что делать дальше )
Собственно этот кусок кода вынут из скрипта, который выводит N-ое количество новостей из БД. Представленный, выше, кусок кода всего лишь выводит ссылки для перехода от свежих новостей к более ранним. Количество, выводимых на страницу, новостей зависит от константы NEWS_IN_PAGE, переменная $part, полученная из запроса методом $_GET, определяет текущую страницу.
Тогда вот это Не самый лучший вариант подсчета общего количества новостей. Если у тебя перед этим была выборка новостей с LIMIT то в ней можно было использовать директиву SQL_CALC_FOUND_ROWS а число новостей соответственно узнать запросом [sql]SELECT FOUND_ROWS()[/sql] Или второй вариант [sql]SELECT COUNT(news.id) FROM news[/sql]но тащить все id из базы, только для того чтобы узнать сколько их - неразумно.
Simpliest, у мускула есть оптимизация для [sql]select count(*) from table[/sql] в таком случае число строк берется из метаданных
Спасибо вам флоппик, Simpliest! Благодаря вашим практическим советам получен более приличный код: PHP: <?php ... $result = sql_query("select count(*) from `news`"); $parts_num = ceil(mysql_result($result, 0)/NEWS_IN_PAGE); mysql_free_result($result); echo "\n<div class=\"parts\">Страницы: "; for($i=1; $i<=$parts_num; $i++) { if($part == $i) echo "\n<span class=\"part\">$part</span>"; else { echo "\n<span class=\"part\">". "<a href=\"?mod=news&id=0&part=$i\" title=\"Перейти на страницу $i\">$i</a>". "</span>"; } } echo "\n</div>"; ... ?> Возможно ещё сделать лучше?
Да. Шаг 1. Для того, что бы ты мог легко переносить его с собой из проекта в проект нужно выделить основные параметры и сформировать функции которые тебе позволят за один вызов строить все нужные данные. Шаг 2. Нужно будет выделить текстовое отображение отдельно, что бы можно было его легко менять, а для вставки нужных значений использовать подстановку переменных.