Многостраничные документы

  • Автор темы webdeveloper
  • Дата начала

webdeveloper

Guest
Многостраничные документы

Вот выложил на растерзание http://garbuz.com/multi_page.php

Поскольку пишу подобную вещь в первый раз, просьба по голове не бить :)

Конструктивная критика, комментарии и исправления приветствуются.
 

SeazoN

Guest
Класс(можно и функцией)
не должен быть привязан конкректно к чему-либо. Для возможности дальнейшего использования.

т.е примерный синтаксис(нагло содрано с phpBB203)
PHP:
function generate_pagination($base_url, $num_items, $per_page, $start_item, $add_prevnext_text = TRUE)
Всё что нужно - указать требуемые параметры
 

.des.

Поставил пиво кому надо ;-)
Александр я может невнимательно просмотрел код...
но смысл примера я не понял.. точнее наоборот смысл понял
реализацию нет.
PHP:
$dataBase = new DataBase();                // создаем экземпляр базы данных 
$guestBook = new GuestBook();              // инициализируем наш многостраничный доукмент 
$guestBook->setDataBase($dataBase);        // передем ссылку на базу данных 
$pageId = isset($_GET["id"])?$_GET[$id]:0; // принимаем параметр который хранит в себе текушую страницу 
$comments->setCurrentPage($pageId);        // устанавливаем текущую страницу. 
$comments->setPageSize(10);                // устанавливаем размер страницы 
$pagesCount = $guestBook->getPagesCount(); // определяем колличество страниц
Это что такое?
что за объекты Database, GuestBook, comments?
это размышления по ходу написания..? мысль идет вперед и объекты переименоваются.
Поправьте если я не прав.
 

webdeveloper

Guest
Спасибо за исправления - это я торопился и переписывая свой класс, который комментарии к сататьям выводит просто забыл заменить $comments на $guestBook

А вот $dataBase - в даном примере это просто какой то класс, который работает с базой данных. Мне просто не хотелось привязыватся к какой то конкретной базе вот я и вставил туда этот класс. Если хочется посмотреть на тот класс что я использую то я его могу точно так же выложить.

Должно быть вот так вот:

PHP:
<?php 
$dataBase = new DataBase();                // создаем экземпляр базы данных 
$guestBook = new MultiPageDocument();      // инициализируем наш многостраничный доукмент 
$guestBook->setDataBase($dataBase);        // передем ссылку на базу данных 
$pageId = isset($_GET["id"])?$_GET[$id]:0; // принимаем параметр который хранит в себе текушую страницу 
$guestBook->setCurrentPage($pageId);       // устанавливаем текущую страницу. 
$guestBook->setPageSize(10);               // устанавливаем размер страницы 
$pagesCount = $guestBook->getPagesCount(); // определяем колличество страниц 
$items = $guestBook->getItems();           // получаем массив записей в нашей гостевой книге 
?>
 

.des.

Поставил пиво кому надо ;-)
а теперь уже гораздо понятнее.. а я смотрел смотрел и ничего не понимал :)) столько объектов неизвестных :)
насчет класса и функции.. ну это дело в стиле..
насчет самого класса у меня замечание это - количество полей
в item а если у меня их больше? или меньше? мне класс придется править?
желательно еще добавить метод класса который регулировал бы это.
 

webdeveloper

Guest
Автор оригинала: .des.
а теперь уже гораздо понятнее.. а я смотрел смотрел и ничего не понимал :)) столько объектов неизвестных :)
насчет класса и функции.. ну это дело в стиле..
насчет самого класса у меня замечание это - количество полей
в item а если у меня их больше? или меньше? мне класс придется править?
желательно еще добавить метод класса который регулировал бы это.
Я честно говоря об этом не задумывался, т.к. никогда не попадал в такую ситуацию. Видимо да, придется. конечно можно написать какой нито метод, который будет считать колличество полей в рекордсете и выдавать соответствующее колличество полей в массиве $item, но вот надо ли это? То есть в реальном примере то конечно нужно - но это же всетаки для образовательных целей - стоит ли людей путать?

На всякий случай для понятности выкладываю класс для работы с базой данных - http://garbuz.com/database.php
 

.des.

Поставил пиво кому надо ;-)
ну это была попытка конструктивной критики .. ради образования, можно оставить и так.
конечно можно написать какой нито метод, который будет считать колличество полей в рекордсете и выдавать соответствующее колличество полей в массиве $item
а вот это не обязательно .. можно просто добавить переменную-член класса-количество полей и метод ее инциализации.
 

webdeveloper

Guest
Автор оригинала: .des.
ну это была попытка конструктивной критики .. ради образования, можно оставить и так.

а вот это не обязательно .. можно просто добавить переменную-член класса-количество полей и метод ее инциализации.
Мы наверное говорим про разные вещи. Я про то что если уж пытатся автоматизировать этот процесс, то может имеет смысл сделать что то типа

PHP:
function getItems(){ 
    $startPos = $this->_currentPage * $this->_pageSize; 
    $items = array(); 
    $query = "SELECT * FROM t_table LIMIT ".$startPos.", ".$this->_pageSize.""; 
    $result = $this->_dataBase->executeQuery($query); 
    while($row = $this->_dataBase->getRow($result))    { 
        $items[] = $this->_initItem($row);
    } 
    return $items; 
}
function _initItem($row){
	$item = array();
	while(list ($key, $value) = each($row)){
	$item[$key] = $value;
	}
	return $item;	
}
Таким образом можно вообще не заботится о том сколько там полей. Сколько есть - столько и будет их в массиве который вернется. И называтся они будут точно так же как и в базе данных.
 

.des.

Поставил пиво кому надо ;-)
ну это уже совсем хорошо :))
полезно!
А теперь обработка ошибок, исключительных ситуаций, значение параметров по умолчанию :)
и класс станет очень очень легко использовать :)
 

webdeveloper

Guest
Автор оригинала: .des.
ну это уже совсем хорошо :))
полезно!
А теперь обработка ошибок, исключительных ситуаций, значение параметров по умолчанию :)
и класс станет очень очень легко использовать :)
Ну так получится как у меня в моем движке почти :) Я думаю что для статьи для начинающих этого будет достаточно :)

Тем более что про обработку ошибок тут уже писали. А значения по умолчанию штука вообщем то простая - там и говорить то вобщем то нечего. Вот если бы ты мог взять сейчас то что я там понаписал и немного изменить текст статьи было бы здорово. А то я на работе сейчас и у меня доступа к ней нет. Там не много делов то - просто взять и вставить этот новый метод который я написал и все.
 
Сверху