<MyRusakov.ru />

Создание движка на PHP и MySQL 2.0

Создание движка на PHP и MySQL 2.0

Видеокурс "Создание движка на PHP и MySQL 2.0" научит Вас создавать профессиональные движки для сайтов на PHP и MySQL с использованием ООП и паттерна MVC.

В курсе разобрана вся теория по структуре движка: как всё устроено, какие должны быть объекты, какая у них иерархия и как они взаимодействуют между собой.

В практической части будет создан движок с чистого листа. Будет создано ядро, все адаптеры, все вспомогательные классы, а также классы для работы с объектами базы данных. И чтобы курс был максимально полезным, будет создан движок для сайта MyRusakov.ru.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Навигация по страницам на PHP

Навигация по страницам на PHP

Если у Вас динамический сайт, то, наверняка, Вам потребуется сделать навигацию по страницам. Допустим, если у Вас блог и у Вас есть хотя бы 50 записей, то согласитесь, что на одной странице Вы их все не выведите. Такая страница будет огромной и бестолковой. И в этой статье я расскажу, как сделать навигацию по страницам на PHP.

В основе лежат оператор LIMIT и GET-параметр. Вот примерный алгоритм работы:

  1. Получить значение GET-параметра, отвечающего за номер страницы.
  2. На основании значения переданного номера страницы, вывести из базы данных только те записи, которые должны находиться на этой странице.
  3. Вывести получившиеся записи на страницу.

Чтобы стало понятнее, давайте приведу стандартный код шаблона, который реализует подобный алгоритм:

<?php
  $count = 5;// Количество записей на странице
  $page = $_GET["page"];// Узнаём номер страницы
  $mysqli = new mysqli("localhost", "root", "", "db");// Подключаемся к базе данных
  $shift = $count * ($page - 1);// Смещение в LIMIT. Те записи, порядковый номер которого больше этого числа, будут выводиться.
  $result_set = $mysqli->query("SELECT * FROM `articles` LIMIT $shift, $count");// Делаем выборку $count записей, начиная с $shift + 1.
  /* Выводим результат */
  while ($row = $result_set->fetch_assoc()) {
    print_r($row);
    echo "<br />";
  }
?>

Как видите, всё более, чем прозрачно. И сделать навигацию страниц на PHP совсем не трудно. Но теперь главная сложность будет состоять в том, чтобы натянуть эту базу на свой движок. Но здесь уже, увы, только Вы сможете разобраться в коде своего движка.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (36):

Screen Screen 30.01.2012 15:42:11

А как можно реализовать номера страниц как на картинке в шапке темы?

Ответить

Admin Admin 30.01.2012 15:45:32

Можно, здесь принцип простой: выводить просто ссылки: <a href="index.php?page=5">5</a>. Вместо 5 вывести в цикле все необходимые страницы. Но здесь простая база, но если хочется делать какой-то сдвиг (допустим, на 1-й странице, можно перейти с 1-й по 10-ю страницу, а на 10 страницы, например, с 5-й по 15-ю), то здесь уже всё гораздо сложнее, и в двух строчках никак не опишешь. Тут надо просто сесть и подумать.

Ответить

Screen Screen 05.02.2012 11:09:57

Я вот все сделал, но у меня выводит так: Array ( [id] => 1 [theme] => test [newa] => text text text [newb] => text1 text1 text [user] => user [cat] => 3 ) Почему выводит название полей и т.д?

Ответить

Admin Admin 05.02.2012 13:36:31

Правильно всё выводит, далее нужно этот массив обрабатывать и выводить данные так, как того требует Ваш дизайн и вёрстка. Они у каждого уникальны.

Ответить

Screen Screen 05.02.2012 19:55:41

А как именно их можно обработать? Можно пример, а то я их ранее не разу не обрабатывал.

Ответить

Admin Admin 05.02.2012 20:00:19

Почитайте про работу с массивами в PHP. Затем внутрь HTML просто в нужные места подставляйте все данные из массива.

Ответить

Arthur Arthur 20.03.2012 01:20:31

"Можно, здесь принцип простой: выводить просто ссылки: <a href="index.php?page=5">5</a>. Вместо 5 вывести в цикле все необходимые страницы." Здравствуйте, Михаил! А можно пример. А то я не совсем понял.

Ответить

Admin Admin 20.03.2012 05:40:23

for ($i = 1; $i <= 5; $i++) echo "<a href='index.php?page=$i'>$i</a>";

Ответить

Arthur Arthur 20.03.2012 11:01:21

Спасибо!

Ответить

RussianPro RussianPro 03.06.2012 16:50:32

Fatal error: Call to a member function fetch_assoc() on a non-object in X:\home\test1.ru\www\index.php on line 9 У меня как всегда всё через жопу.

Ответить

Admin Admin 03.06.2012 16:59:36

Скорее всего, ошибка в запросе.

Ответить

RussianPro RussianPro 03.06.2012 17:00:23

я уже разобрался в чём дело

Ответить

RussianPro RussianPro 06.06.2012 17:46:26

Ребят, а как можно узнать номер последней страницы?

Ответить

Amicus Amicus 23.06.2012 00:50:43

Михаил, у меня проблема такого плана. Запрос по нескольким полям с WHERE с формы плюс навигация. Отдельно все идеально работает, и запрос и навигация - вместе никак. Т. е. первая страничка нормально отображается, а при переходе на следующую все... Я так понимаю, проблема в том что не запоминатся результаты запроса. Как это решить? Через сесии?

Ответить

Admin Admin 23.06.2012 11:28:12

Сам запрос запоминайте в GET-параметре. И сама форма поиска должна иметь метод GET. И передавайте этот параметр на каждую страницу.

Ответить

Amicus Amicus 27.06.2012 12:08:37

Михаил, спасибо! Пробывал, но не выходит. Понимаю, что проблема в голове, но какая есть... Реализовал через сесии - работает. Наверное для такого способа реализации есть противопоказания?

Ответить

Admin Admin 27.06.2012 12:22:17

Можно и через сессии.

Ответить

RussianPro RussianPro 08.07.2012 18:22:49

Не могли бы Вы показать, как исправили эту проблему? У меня тоже самое...

Ответить

den98 den98 10.01.2013 20:33:13

Добрый вечер Михаил. Помогите код не проходит валидацию: Line 318, Column 73: an attribute value specification must be an attribute value literal unless SHORTTAG YES is specified …iv class="pstrnav"><b>1</b> | <a href=gallery.php?cat=&page=2>2</a> | <a href=… ✉ Line 318, Column 84: an attribute value must be a literal unless it contains only name characters …strnav"><b>1</b> | <a href=gallery.php?cat=&page=2>2</a> | <a href=gallery.php… ✉ You have used a character that is not considered a "name character" in an attribute value. Which characters are considered "name characters" varies between the different document types, but a good rule of thumb is that unless the value contains only lower or upper case letters in the range a-z you must put quotation marks around the value. In fact, unless you have extreme file size requirements it is a very very good idea to always put quote marks around your attribute values. It is never wrong to do so, and very often it is absolutely necessary.

Ответить

Admin Admin 10.01.2013 21:36:26

Надо писать не &, а &amp; в ссылках.

Ответить

den98 den98 11.01.2013 22:49:48

Спасибо валидацию прошел. Если интересно можете оценить сайт www.clearsky62.ru Буде рад критике. Это мое первое детище во многом благодаря Вашему сайту.

Ответить

den98 den98 04.05.2013 23:11:21

Михаил, точно не знал в какой раздел написать и решил написать тут. Проходя Ваш курс PHP и MySql с нуля до Гуру есть ошибка в функции getPagination(); Точнее в цикле: for($i = 2; $i < $count_pages; $i++) это ваш код, он не выводит последнюю страницу. Ошибка содержится в условии вот правильный код: for($i = 2; $i <= $count_pages; $i++) Это код из урока: protected function getPagination ($count, $count_on_page, $link) { $count_pages = ceil($count / $count_on_page); $sr["number"] = 1; $sr["link"] = $link; $pages = $this->getReplaceTemplate($sr, "number_page"); $sym = (strpos($link, "?") !== false)? "&amp;": "?"; for($i = 2; $i < $count_pages; $i++) { $sr["number"] = $i; $sr["link"] = $link.$sym."page=$i"; $pages .= $this->getReplaceTemplate($sr, "number_page"); } $els["number_pages"] = $pages; return $this->getReplaceTemplate($els, "pagination"); print_r ($count_pages); } P.S. Надеюсь кто изучает будет полезно знать так, как я искал не один час. Хочу выразить Вам свою благодарность за то что Вы делаете, очень познавательно и интересно РЕКОМЕНДУЮ ВСЕМ!!!

Ответить

Admin Admin 05.05.2013 11:21:09

Напишите мне на myrusakov@gmail.com

Ответить

AntDant AntDant 17.06.2013 04:04:50

а как можно сделать что бы количество страниц само добавлялось. Если например записей больше чем на 5 страницах ? 1.3.5.6 и далее само

Ответить

Admin Admin 17.06.2013 10:58:09

Данный скрипт автоматически добавит новые страницы.

Ответить

rakegent rakegent 21.07.2013 01:48:07

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

Ответить

rakegent rakegent 21.07.2013 01:56:16

на дипломку задание с института, сайт isrip.tk только начил делать и застрял, меню "состав института" там статей надо на постраничку делить, вроде на чистом шаблоне делается, с помошью скриптов, а применить к своему никак не получается, помогите плииз!??

Ответить

Admin Admin 21.07.2013 18:10:39

В статье все довольно доступно объянено. Либо посмотрите в видеоуроках, там это тоже разбиралось.

Ответить

rakegent rakegent 25.07.2013 07:20:17

уже неделю мучаюсь, никак не получается, замучался, у меня ошибку выдает на строке while ($row = $result_set->fetch_assoc()) { пробовал добавить в артиклс в директории блокс.но нет,на платном уроке токо лимит указан а что дальше не соображаю. пробовал все, даже 100% ные скрипты не могу установить, помогите прошу

Ответить

Admin Admin 25.07.2013 17:31:41

Как понимаю, у Вас эта ошибка? http://myrusakov.ru/php-fetchassoc.html

Ответить

gala_78 gala_78 24.08.2013 22:38:50

а как "натянуть эту базу" на тот сайт, что в вашем бесплатном курсе по PHP? На конкретном примере было бы легче разобраться чайникам. Спасибо

Ответить

prog prog 09.09.2013 21:36:19

Я хочу в главной странице сайта поставить навигацию страниц, как можно это реализовать.

Ответить

prog prog 31.10.2013 23:10:23

Здраствуйте, Михаил.Как можно сделать постраничную навигацию на этот код index.php?view=video&t=<?=$item['title_url'];?> userfiles/video/<?=$item['img'];?>

Ответить

Admin Admin 01.11.2013 10:52:47

Добавлять параметр page в ссылку.

Ответить

prog prog 02.11.2013 10:19:37

Здраствуйте, Михаил.Как можно сделать постраничную навигацию на этот код foreach($video as $item):?> <div class="video"> <a href="index.php?view=video&t=<?=$item['title_url'];?>"><img src="userfiles/video/<?=$item['img'];?>" alt="<?=$item['title'];?>" width="200" height="120" /></a> <div class="video-title"><a href="index.php?view=video&t=<?=$item['title_url'];?>"><div class="video-title"><?=$item['title'];?></div></a></div> </div> <?endforeach;}?> Помогите пожалуйста.

Ответить

Oleg-yak1 Oleg-yak1 12.07.2015 16:44:14

for ($i = 1; $i <= 5; $i++) echo "<a href='index.php?page=$i'>$i</a>"; использовал данный код для вывода кнопок с низу выдачи БД здесь работает хорошо. Вопрос: Как сделать ограничение на вывод кнопок вида 1 ...10 11 <b>12</b> 13 14... 100 ?? И еще как сделать что бы выбранная страница всегда заключалась в тег Б тоесть выделялась чем то

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.