Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ответ 002 на задачу N 14
 
 автор: SoftTime   (30.03.2006 в 15:11)   письмо автору
 
 

Ответ 002 на задачу N 14.
С условиями задачи можно ознакомится по ссылке.
Обычно такие задачи оформляют в виде класса. Я так и поступил.
Класс полностью готов к употреблению. Все настройки вынесены отдельно.
Каждый метод снабжён кратким описанием. Класс легко масштабируется
и может быть дополнен новыми фильтрами.
Настройки

<?
mysql_connect
('localhost','root');
mysql_select_db('test');
define("_TAB_NAME","name");// Таблица для навигации
define("_FIELD_NAME","name");// поле для навигации
define("_ID_NAME","id_name");// Ключевое поле для идентификации 
define("_ORDER_BY","id_name"); // Поле для сортировки
define("_NUM_ON_PAGE",5); // Сколько строчек списка выводить на страницу
?>

Класс

<?
class alphaPages{
  
// Задаём алфавит
  
var $ALPHA 'АБВГДЕЖЗИКЛМНОПРСТУФХЦЧЩШЭЮЯ';
  
// Инициализация объекта. Установка начальных условий списка
  
function alphaPages(){
    
$this->sql "SELECT * FROM "._TAB_NAME;
  }  
  
// Метод выводит "карточку" человека
  
function profile(){
    
$this->sql .= " WHERE "._ID_NAME."=".$_GET['id'];
    
$query mysql_query($this->sql);
    
$r mysql_fetch_assoc($query);
    
$ret='<table>';
    foreach(
$r as $field=>$value){
      
$ret .= "<tr><td>".$field."</td><td>".$value."</td></tr>";
    }
    
$ret.='</table>';
    return 
$ret;     
  }
  
// метод строит панель алфавитной навигации  
  
function makeAlphaNavBar(){
    
$sql 'select DISTINCT(LEFT(UPPER('._FIELD_NAME.'),1)) as letter from '._TAB_NAME;
    
$query mysql_query($sql);
    while(
$r mysql_fetch_assoc($query)){
      
$this->ALPHA str_replace($r['letter'],'<a href="?letter='.$r['letter'].'">'.$r['letter'].'</a>',$this->ALPHA);
    }
    return 
$this->ALPHA;  
  } 
  
// метод строит панель постраничной навигации
  
function makePageNavBar(){
    
$query mysql_query($this->sql);
    
$maxpage ceil(mysql_num_rows($query)/_NUM_ON_PAGE);
    for(
$i=1;$i<$maxpage;$i++){
      
$ret.='|<a href="?letter='.$_GET['letter'].'&page='.$i.'">'.$i.'</a>';
    }
    return 
$ret;
  }  
######### Набор фильтрующих список методов ##############
  // Метод фильтрует список по букве   
  
function setLetter(){
    
$this->sql .= " WHERE "._FIELD_NAME." like '".$_GET['letter']."%'";
  }
  
// Метод ставит ограничения по странице  
  
function setPage(){
    
$this->setOrder();
    if(empty(
$_GET['page'])) $page=0;
    else 
$page $_GET['page'];
    
$this->sql .= " LIMIT ".$page*_NUM_ON_PAGE.",".(_NUM_ON_PAGE);
  }
  
// метод задаёт порядок сортировки
  
function setOrder(){
    
$this->sql .= " ORDER BY "._ORDER_BY;
  }  
#########################################################  
  // метод строит итоговый список
  
function getList(){
    
$query mysql_query($this->sql);
    while(
$r mysql_fetch_assoc($query)){
      
$ret .= '<a href="?id='.$r[_ID_NAME].'">'.$r[_FIELD_NAME].'</a><br>';
    }
    return 
$ret;  
  }
}
// the end of class
?>

Пример использования

$nav = new alphaPages();
// Выводим алфавит
$navBar = $nav->makeAlphaNavBar();
// Ставим букву
if(!empty($_GET['letter'])) $nav->setLetter(); 
// Вычисляем сколько страниц. Обязательно после фильтрации по букве
$pageBar = $nav->makePageNavBar();
// Что будем показывать
if(!empty($_GET['id'])) $out = $nav->profile(); 
else{
 $nav->setPage(); 
 $out = $nav->getList();    

// показываем
?>
<table>
  <tr><td><?=$navBar?></td></tr>
  <tr><td><?=$pageBar?></td></tr>
  <tr><td><?=$out?></td></tr>
  <tr><td><?=$pageBar?></td></tr>
</table>

Axxil

http://www.softtime.ru/info/task.php?id_article=86

   
 
 автор: cheops   (03.04.2006 в 01:25)   письмо автору
 
   для: SoftTime   (30.03.2006 в 15:11)
 

Очень неплохой скрипт, прекрасно справляется со своей задачей. Я не являюсь сторонником применения ООП в PHP
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=9847
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=6076
главным образом из-за того, что "Обязательно после фильтрации по букве" - PHP и сеть так устроены, что очень сложно создать код, элементы которого не зависили бы от порядка их вызова, а это очень большой грех с позиции ООП и в таких случаях лучше придерживаться стандартных функций, которые всем известны.
Но повторюсь, что скрипт очень хороший - а представление данных выше всяких похвал.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования